FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

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


2010年01月29日

tempdb

T-SQLの性能試験。大量データ発生が予想される処理での性能問題は
フェーズが後になればなるほど費用がかかります。当社ではできるだ
け単体テスト時にこの芽を摘むようにしているのですが、数万件を
ターゲットにテストを開始。1分足らずで終了。1件あたり2ミリ秒。
まあまあですか。と安心していたのもつかの間、5万件に件数を上げた
ところで異常終了。あらら、バグですか!

調査してみたものの、それらしいバグは見つからず調査は暗礁に。

時を同じくして名古屋の方も「10万件でテストすると突然異常終了
するんですよ。」と連絡が。

同じ処理をテストしているわけではないんですが、なにか共通性が
あるのでは?ということで環境周りを調査。

すると、tempdbが肥大化してHDDを圧迫しているではないですか。
なんとそのサイズ120GB!

一旦、インスタンスを停止して再起動(tempdbがリセットされる)
再度、処理を実行してエクスプローラを観察していると見る間に
ディスクの空きが無くなっていくではないですか!

うーん、こりゃ困ったなあ・・・。どう対処するか。

名古屋から「ここのSQLが異常に遅いことがわかりました」という
連絡があり、そのSQLの実行プランを見てみると件数から見て明らか
にLOOP JOIN を使うべきところにHASH JOINが使用されているでは
ないですか!

早速、"JOIN" キーワードを "INNER LOOP JOIN" に変更して実行。

1分20秒で何事もなく終了。tempdbのサイズはたったの数百MB!
こんなことってあるんですねえ!?

[ posted by H.K ]

この記事に対するコメント

オラクルの一時表領域でも同じことありますよ
【2015/10/01 09:26】 URL | もぶー #- [ 編集]



この記事に対するコメントの投稿














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



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/453-2e2b7799
この記事にトラックバックする(FC2ブログユーザー)











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