TPC-H Non-Clusteredの Oracleでの記録を見ると、現在の所の第1位は以下のような記録でした。
- 1000GBで 140,181 QphH 12.15 $/QphH
- 3000GBで 198,907 QphH 16.58 $/QphH
(正確には 140,181QphH@1000GB などと、ScaleFactor(SF)を @に続けて書きます。
ちなみに SFが異なる値を比較するのは意味が無い と言われている。)
ちなみに SFが異なる値を比較するのは意味が無い と言われている。)
QphHの名前((Query-per-Hour Performance Metric))から単純に考えると 1時間あたりの何クエリー発行できるか という値に見えるが、実際の計算はもう少し複雑。
前回、とりあえず 22個の TPC-HのSQLを実行したら
3436秒 = 57分16秒 かかったと書いたが、
では、これは 1時間あたり 約22クエリーなので 22 QphH@32GB なのか?
3436秒 = 57分16秒 かかったと書いたが、
では、これは 1時間あたり 約22クエリーなので 22 QphH@32GB なのか?
実際に計算したら 22ではなく、 974 QphH だった!
詳しく見ていきましょう。
TPC-Hで表示されている QphHは、正確には "TPC-H Composite Query-per-Hour Metric" と呼ばれており、Compositeという通り、
TPC-H Power (1セッションで、どれだけ速く処理できるか)
TPC-H Throughput (複数セッションで、どれだけ速く処理できるか)
の2つの値から計算される値となります。
具体的には、それらの値の相乗平均が QphH となります。
では、TPC-H Powerの計算方法は、というと、3600*SF の値を、22個のSQLの処理時間の相乗平均で割った値となります。数式にするとこんな感じ。
QIは Query Intervalで、各SQLの処理時間(秒) が入ります。
分母は相乗平均なので1つでも短いクエリーがあるとかなり値は良くなってきます。
例えば、22個のSQL文が全て10秒で終了して合計220秒の場合は 11,520QphHとなります。
しかし、1個のSQLが199秒かかったが他の21個のSQLが1秒で終了して合計220秒の場合は 90,564QphHとなり約8倍のパフォーマンスとなります!!
なので、きちんと TPC-Hを測定する場合は、いくつかのSQLは捨てる代わりに、思いっきり早いSQLを作るというテクニックを使う場合もあるようです。今回はOracleの機能や構成による違いをみたいので、そこは追求しませんでした。
(本当は22個のSQLの他にインサート、デリートをする2つのSQL(Refresh Functionsと呼ばれています)があるのですが、今回は割愛。大体上記の計算式で合っています。)で、
今回、自分は1セッションで検証したので TPC-H Powerの値を測っていることになりますが、各Queryの実行時間は
Q1 226.78 sec
Q2 18.17 sec
...
Q22 39.88 sec
で、これにエクセルで (3600 * SF) / (product(Q1~Q22) ^ (1/22) ) なんて計算をして、974 QphH というのが出てきました。
TPC-H Throughputは、今後の複数セッションの検証の時に説明しますが、いくつかのTPC-Hのレポートを見ると、若干 TPC-H Throughputの方が高い数値となる傾向にあるようですが、概ね同じ程度の値となります。なので、エイヤーッと、 QphH と 自分の TPC-H Powerをそのまま比較することにします。
すると 14万~19万 QphHと 974QphHなので、約140倍から200倍の差 というところになります。
今回検証した環境の値段は HWは 約12万円ですが、Oracle価格と3年保守を入れないといけないので、それだけで数百万。。。 $/QphH は多分、100 $/QphH 位でしょうか。こちらも 6~8倍とかなり負けてます。
これで一応計測の目安が出来たので、次からはいくつか構成を変えながら、出来るだけパフォーマンスアップ出来るように考えていきます。
本日の結果: 974 QphH@32GB
今回参考にした TPC-Hの仕様書
TPC BENCHMARK H Standard Specification
0 件のコメント:
コメントを投稿