ブロッコリーを克服するまでプログラミング

プログラミングとか趣味とかを報告します。

SQLServer : アロケーションサイズでDBチューニングできているのか。

※いつも書いてますが、適当人間の記事なので、参考にしないでください。

※webRTCの記事のアクセスのみが増え、「あっやべ、あんな適当な記事にしちゃった」と常日頃思っています。

 

 先輩から「データベース配置するパーティションアロケーションサイズは64KB。これ常識な。」って言われて、「えっ、早くなるんですか?」って訊いたら「やったことないから知らん。」って言われたのはいつのことか。

 

 原理的にはなんとなくわかるんです。SQL Server でデータベースを作成するとき、「64KB単位」っていう文字列が出てくるんですよね。つまり、データの単位が64KBなんだから、アロケーションサイズも64KBなら、IOコスト的にWIN-WINでしょ!っていうことなんですよね!たぶん!

f:id:atwtama:20180216233344p:plain

  

 まず、パーティションを適当に割ります。Iドライブ(64KB)とJドライブ(規定4096)に割りました。

f:id:atwtama:20180216233724p:plain

 

 次に全く同じデータベースを2つ作成します。片方はIドライブに、片方はJドライブに配置しました。

※ 下図みたいにコア数でデータベースファイルの数をどうこうとかも見た記憶がありますが、これをするかしないかで変わるかも調べてみたいです。

f:id:atwtama:20180216233859p:plain

 

 テーブルはこんな感じにしました。あるあるなんですが、「きれいなデータを挿入しても現地で役に立たない」というのは無視で、適当に20万行INSERTしました。

f:id:atwtama:20180216234251p:plain

 

 それでは、単純明快なSELECT文を適当に実行すると・・・

f:id:atwtama:20180217000614p:plain

64KBアロケーションサイズのほうがなんか早い・・・。と思ったけど、条件とかで変動するし、研究が必要そう。

 

 なんか微妙だったので、50万行ずつを3テーブルにINSERTし、OUTER JOIN したものをSELECT してみたところ、同様にざっくり 1 : 2 くらいの速度であった。

つまり、

64KBアロケート >= 規定値アロケート

なのである!(たぶん)

 

SQL Server 2016 環境構築時のパフォーマンスに関するベストプラクティス – Microsoft Japan Data Platform Tech Sales Team Blog