せっかくなのでTEXT型とXML型の性能差および、UNLOGGED TABLEによる性能向上効果も合わせて比較してみた。測定のモデルは以前示したものと同じ、約1GB(2,592,000件)のXMLデータをTEXT型とXML型にそれぞれCOPYしたときの処理時間を示す。
測定結果
数値の単位はms。
型 |
通常テーブル |
UNLOGGEDテーブル |
XML |
58126.714 |
47997.477 |
TEXT |
22930.184 |
14488.658 |
考察
- 同じサイズのデータをCOPYするのにXML型はTEXT型と比較すると非常に時間がかかる。
- 通常テーブルだと2.5倍
- UNLOGGEDテーブルだと3.3倍。WAL書き込みがない分、処理時間の比率がより高くなる。
- TEXT型の場合、UNLOGGEDテーブル化することで40%近いロード性能向上効果がある。
- XML型の処理に時間がかかる原因はlibxml2によるXMLパース処理であると思われる。
- XML型とTEXT型との処理の差異はlibxml2によるXMLパース処理のみと仮定。
- XML型処理内のXMLパース処理時間比率をざっくり計算すると
(47997.477 - 14488.658 / 47997.477) = 69.8%
結論
- つまりXML型のロード処理を高速化するためには、XMLパース処理を高速化しないことにはどうにもならない?