スポンサーリンク
スポンサーリンク

SQLServerは、断片化率が高くなると、SQLが実行される際、パラレル処理されなくなり、極端に処理性能が低下します

SQL ServerTransact-SQLデータベースビッグデータ

ストレージを増設する前、12TBのストレージで、10TBのDBを運用していたので、1ヵ月に1回程度、SQLServerのDB Shrinkを実行していました。
その影響で、メインのテーブルとインデックスを中心に、断片化率が99%に達していました。

各テーブルとインデックスの断片化率は、こちらのSQLでチェックできます。

ビッグデータな上に、頻繁に機能に変更が加えられるシステムなので、処理コストの高いSQLが無いかは、定期的にチェックしていたのですが、断片化率はチェックしていませんでした。

断片化を解消すると、チューニングアドバイザによるインデックスと統計情報の抽出率が向上し、今まで抽出さていなかった、インデックスと統計情報が抽出されるようになりました。

また、週次処理が実行された後、特定の機能が極端に遅くなる現象が毎週発生し、その度に、チューニングアドバイザを実行し直したり、ヒント文で使用されるインデックスを固定したりしていましたが、断片化を解消してからは、週次処理後に特定のSQLが極端に遅くなるといった現象は、発生しなくなりました。

断片化を解消するには、テーブルとインデックスのリビルドが必要です。

・テーブルをリビルドするサンプルSQL

・テーブルをPage圧縮でリビルドするサンプルSQL

・インデックスをリビルドするサンプルSQL

・インデックスをPage圧縮でリビルドするサンプルSQL

Page圧縮は、I/O性能の低下はみられないのに、データ量が10分1になるので、ビッグデータを扱うDBでは必須です。

リビルドを実行しても、3割程度は断片化が解消されませんでした。
一旦、断片化してしまうと、断片化を完全に解消することは出来ない為、断片化させない工夫が必要なようです。

断片化が進んでいても、毎週1回、以下のSQLで断片化率3%以上のインデックスを抽出し、12時間ほどかけてリビルドするようになってからは、データベースのパフォーマンスは安定するようになりました。

【参考URL】
http://msdn.microsoft.com/ja-jp/library/ms190273(v=sql.105).aspx
http://msdn.microsoft.com/ja-jp/library/ms188388.aspx
http://msdn.microsoft.com/ja-jp/library/ms178065(v=sql.105).aspx
http://msdn.microsoft.com/ja-jp/library/ms175097(v=sql.105).aspx
http://msdn.microsoft.com/ja-jp/library/ms191528(v=sql.105).aspx

 

コメント

タイトルとURLをコピーしました