sql serverインデックスの断片化と再構築の必要性について
TRANSCRIPT
![Page 1: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/1.jpg)
SQL Server インデックスの仕組みと 断片化、 再構築の必要性について
2012/02/14
インフラグループ 大和屋貴仁
![Page 2: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/2.jpg)
データベースのデータは、
FusionIOなどの物理ディスク
に書き込んで、保存します。
細かいお話の前に……
![Page 3: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/3.jpg)
Chapter. 1 物理ディスクのデータ格納のおさらい
ざっくりとした説明をします。 概念レベルなので、 詳しい人にしたら、間違ってる箇所も。。。
![Page 4: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/4.jpg)
物理ディスクのデータ格納
物理ディスクにデータを格納する時は、
最初に部屋を確保します。
どーんと、広いフロアから人を探すの
大変ですよね?
● Aさん→
↓まず、部屋を確保
●
↑Aさん専用の部屋
![Page 5: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/5.jpg)
物理ディスクのデータ格納
どーんと、広いフロアに部屋を
たくさん作っていきます。
←こんな感じで、新しいデータをいれる度に部屋を確保します。
●
![Page 6: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/6.jpg)
物理ディスクのデータ格納
Aさんが太って、
部屋におさまらない場合は?
● ←はみ出しちゃう!!でも、はみ出したら迷惑。
![Page 7: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/7.jpg)
物理ディスクのデータ格納
Aさんの部屋を
大きくしてあげたら良いよね!
● ↑Aさんの部屋を大きくしてあげれば良い。
![Page 8: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/8.jpg)
物理ディスクのデータ格納
部屋を並べ替えたら、
Aさんの部屋も収納できるけど……
● ←部屋を並べ替えてあげれば、 Aさんの部屋を確保できるけど…… Aさんだけの為に、わざわざ部屋並べ替えるの 手間だよね。
![Page 9: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/9.jpg)
物理ディスクのデータ格納
Aさんを切り刻め!!
![Page 10: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/10.jpg)
物理ディスクのデータ格納
切り刻んだAさんを
あっちこっちにあるAさんの部屋に格納。
![Page 11: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/11.jpg)
物理ディスクのデータ格納
え!?
Aさんが必要!?まじか……。
Aさん切り刻んでるから、まず集めなきゃ。
あっちこちにちらばっているAさんの部屋から Aさんだった残骸を集めて!
![Page 12: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/12.jpg)
物理ディスクのデータ格納
集めたAさんを
くっつけて、Aさん復活!。
●
![Page 13: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/13.jpg)
物理ディスクのデータ格納
ちなみに、
もっとAさんがでっかくなったり、
タイミングによっては……
Aさんの部屋が増えて、 あっちこっちに散らばって、 集めるのが大変!!
![Page 14: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/14.jpg)
物理ディスクのデータ格納
どれぐらい散らばっているかを示すのが
断片化率
と言います。
![Page 15: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/15.jpg)
物理ディスクのデータ格納
デフラグ
って聞いたことありません?
こんな画面でやったデフラグ→
![Page 16: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/16.jpg)
物理ディスクのデータ格納
デフラグって、
切り刻んだAさんをくっつけて、
1個の部屋を用意してあげること。
● そう! 面倒だから、やらなかった 部屋の並べ替えですね。
![Page 17: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/17.jpg)
Chapter. 2 SQL Serverのインデックスの再構築
ざっくりとした説明をします。 概念レベルなので、 詳しい人にしたら、間違ってる箇所も。。。
![Page 18: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/18.jpg)
データベースのデータは、
FusionIOなどの物理ディスク
に書き込んで、保存します。
もう一度言います
![Page 19: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/19.jpg)
物理ディスクのデータ格納
データはディスクに書き込むんだから、
断片化とは無縁ではありません。
![Page 20: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/20.jpg)
SQL Serverのインデックス
B-Tree式です。
UserID 1~10000
UserID 10001~
UserID 1~5000
UserID 5001~10000
UserID 10001~15000
UserID 15001~
UserID 1~1000
UserID 1001~2000
UserID 2001~3000
UserID 2001~2100
UserID 2101~2200
UserID 2201~2300
UserID
![Page 21: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/21.jpg)
SQL Serverのインデックス
インデックスとディスクが 関係しています。
UserID 1~1000
UserID 1001~2000
UserID 2001~3000
UserID 2001~2100
UserID 2101~2200
UserID 2201~2300
インデックスの下に物理ディスクがあります。
![Page 22: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/22.jpg)
SQL Serverのインデックス
で、断片化が進むと……。
UserID 2001~3000
UserID 2001~2100
UserID 2101~2200
UserID 2201~2300
ユーザID2001~2100を参照するのに あっちこちを見ないと、いけなくなる。
![Page 23: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/23.jpg)
物理ディスクのデータ格納
データベースの中で、
断片化したデータを整理整頓するのが
インデックスの再構築です。
物理ディスク上に散らばっているデータを
整理整頓する作業です。
![Page 24: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/24.jpg)
インデックスの再構築は
物理ディスク上に散らばっているデータを
物理的に整理整頓する作業です。
物理的に並べ替えているので、
途中でキャンセルすると、
元に戻します。 掃除をはじめて20分たったときに、 キャンセルすると 掃除をやめるのではなく、 掃除を始める前の状態にもどします。 キャンセルすると20分とは言いませんが、 案外時間かかることもあります。
![Page 25: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/25.jpg)
テーブルが断片化すると?
• データを参照するのに、 CPU負荷が増えます。 Disk I/Oが増えます。 参照時間が増えます。
• データを更新するのに Diskスペースを確保し、 データを切り刻むので、 CPU負荷が増えます。 Disk I/Oが増えます。 更新時間が増えます。
![Page 26: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/26.jpg)
データの断片化は……
• データの更新、削除をしていけば 必ず断片化します。
• データ量が増えれば、増えるほど、 断片化によるオーバヘッドが増えます。
![Page 27: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/27.jpg)
インデックスの再構築は
• 断片化率が高いほど、再構築に時間が かかります。
• データ量が多いほど、再構築に時間が かかります。
![Page 28: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/28.jpg)
ご利用は計画的に。
DB性能に問題が無い段階でも、 定期的に、 断片化率の高いテーブルのインデックスを
再構築しておくことで、
トータルでのメンテ時間は短縮できます。
![Page 29: Sql serverインデックスの断片化と再構築の必要性について](https://reader035.vdocuments.pub/reader035/viewer/2022081720/5566007fd8b42a2a4d8b4e34/html5/thumbnails/29.jpg)
IndexView
ツールの準備中。
再構築が必要なインデックスの選定、 再構築時の進捗確認
などが、
しやすいようにツールを作り始めてます。
http://sqlazure.jp/r/sql-server/260/