オラクル R&D センター

尚、本ブログに関する情報を無断引用することを禁止します。 引用希望の場合はコメント欄に記入下さい。個別対応します。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ハイパースレッドはORACLEでどの程度有効なのか

いまさらながらORACLEデータベースにおける
ハイパースレッドON時のパフォーマンスを検証してみよう。
(ハイパースレッドのON/OFFはBIOSで切替可)
Oracleは9.2.0.1(EE)を使用

検証パターンは以下のとおり。
・100万件×20件の直積演算SELECT
 ハイパースレッドあり
 経過: 00:00:17.93
 経過: 00:00:20.84
 経過: 00:00:17.54

 ハイパースレッドなし
 経過: 00:00:21.03
 経過: 00:00:28.73
 経過: 00:00:20.71

 ちなみにサンプルスキーマのSH.SALESとSH.COUNTRIESを
 直積演算しています。実行計画は以下のとおり
 実行計画
 ----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1062 Card=1)
1 0 SORT (AGGREGATE)
2 1 MERGE JOIN (CARTESIAN) (Cost=1062 Card=19309149)
3 2 INDEX (FULL SCAN) OF 'COUNTRY_PK' (UNIQUE) (Cost=1 Card=19)
4 2 BUFFER (SORT) (Cost=1061 Card=1016271)
5 4 PARTITION RANGE (ALL)
6 5 BITMAP CONVERSION (TO ROWIDS)
7 6 BITMAP INDEX (FAST FULL SCAN) OF 'SALES_TIME_BIX



・1000万回のLoop処理
 begin
  for i in 1..10000000 loop
  dbms_output.put_line('');
  end loop;
 end;
 /

 ハイパースレッドあり
 経過: 00:00:33.46
 経過: 00:00:33.46
 経過: 00:00:33.45

 ハイパースレッドなし
 経過: 00:00:33.81
 経過: 00:00:33.81
 経過: 00:00:33.82

 ハイパースレッドあり(2セッションから同時実行)
 経過: 00:00:41.24 経過: 00:00:41.26
 経過: 00:00:41.29 経過: 00:00:41.37
 経過: 00:00:41.28 経過: 00:00:41.26

 ハイパースレッドなし(2セッションから同時実行)
 経過: 00:01:07.07 経過: 00:01:07.49
 経過: 00:01:07.43 経過: 00:01:07.43
 経過: 00:01:07.07 経過: 00:01:07.49

極限られた一例でしか検証していませんが
思った以上に有効にはたらくようです。


さらに、2006年10月に再度検証を行いました。

OracleEEではハイパースレッドの有効性が「見える化」できましたが
ひょっとしたらEE機能(Partitionと並列処理機能)+ハイパースレッドの
おかげだったのかもしれません。
OracleSEではどうでしょう。OSレベルで上手くやってくれるのでしょうか。
以下検証結果です。

準備:汎用DBを作って、SH.SALES表を非パーティションで再作成

SALES_COPYとCOUNTRIESの直積演算結果

ハイパースレッド時
1回目・・・5.05秒、2回目・・・5.06秒
ハイパースレッドOFF時
1回目・・・5.08秒、2回目・・・5.05秒
むむ、、変わらない。ということは
1SQLの処理はハイパースレッドで
分割処理されないのか。
よく考えてみれば至極当たり前か。。
尚、非パーティション化したので実行計画が変わって
パーティション表のSELECT時よりもレスポンスが速い結果となりました。

では、次にPL/SQLのLoop処理

ハイパースレッド時
1回目・・・36.04秒、2回目・・・33.04秒
ハイパースレッドOFF時
1回目・・・34.03秒、2回目・・・33.08秒

ハイパースレッド時(2Sessionから同時実行)
1回目・・・41.03秒、41.06秒
2回目・・・41.01秒、41.03秒

ハイパースレッドOFF時(2Sessionから同時実行)
1回目・・・66.08秒、67.02秒
2回目・・・67.06秒、67.07秒

結論:ハイパースレッドは有効にはたらくが
   1SQLの処理までを分割処理できない。
スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://oracool.blog26.fc2.com/tb.php/34-0126bbe4
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。