2011年2月28日月曜日

TPC-H blocksizeを 32kに

前回のつづき

前回は blocksizeはデフォルトの 8kで作成しましたが、今回は 32kにしてみました。
DWHは出来るだけ blocksizeを大きくするのが定石ですが、結果は、、、

blocksizeElapsedQphH@32GB
8KB3,436 sec974
32KB3,342 sec986

若干速くなってはいるものの、わずか数%良くなっただけ。

今回は Paralle Degreeを初めから 6にしてテーブルを作成しているため、ディスクへのアクセスは direct readになっています。strace(1)を使って、読み込みサイズを見ると、どちらも 1MBでしたので、処理時間が変わらないことも納得がいきます。

direct readの時の I/Oサイズは db_file_multiblock_read_count=128 から、8k x 128 = 1MBとなります。
blocksize=32kの場合も 1MBなのは _db_file_direct_io_count = 1048576 によって決められているようです。
簡単に試した結果 _db_file_direct_io_countを大きくすると、pread(2)の際のサイズも大きくなることを確認しました。このパラメータに関する検証は、後の課題にしたいと思います。

とりあえず今回の結論は、direct readでアクセスする場合、大事なのは blocksizeではなく I/Oサイズ。

本日の結果: 986 QphH@32GB

次回は Linux I/O Schdulerを、デフォルトの cfqから noopに変えてみます。
実は驚くべき結果が。。。

0 件のコメント:

コメントを投稿