sql serverインデックスの断片化と再構築の必要性について

29
SQL Server インデックスの仕組みと 断片化、 再構築の必要性について 2012/02/14 インフラグループ 大和屋貴仁

Upload: -

Post on 28-May-2015

8.309 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Sql serverインデックスの断片化と再構築の必要性について

SQL Server インデックスの仕組みと 断片化、 再構築の必要性について

2012/02/14

インフラグループ 大和屋貴仁

Page 2: Sql serverインデックスの断片化と再構築の必要性について

データベースのデータは、

FusionIOなどの物理ディスク

に書き込んで、保存します。

細かいお話の前に……

Page 3: Sql serverインデックスの断片化と再構築の必要性について

Chapter. 1 物理ディスクのデータ格納のおさらい

ざっくりとした説明をします。 概念レベルなので、 詳しい人にしたら、間違ってる箇所も。。。

Page 4: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

物理ディスクにデータを格納する時は、

最初に部屋を確保します。

どーんと、広いフロアから人を探すの

大変ですよね?

● Aさん→

↓まず、部屋を確保

↑Aさん専用の部屋

Page 5: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

どーんと、広いフロアに部屋を

たくさん作っていきます。

←こんな感じで、新しいデータをいれる度に部屋を確保します。

Page 6: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

Aさんが太って、

部屋におさまらない場合は?

● ←はみ出しちゃう!!でも、はみ出したら迷惑。

Page 7: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

Aさんの部屋を

大きくしてあげたら良いよね!

● ↑Aさんの部屋を大きくしてあげれば良い。

Page 8: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

部屋を並べ替えたら、

Aさんの部屋も収納できるけど……

● ←部屋を並べ替えてあげれば、 Aさんの部屋を確保できるけど…… Aさんだけの為に、わざわざ部屋並べ替えるの 手間だよね。

Page 9: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

Aさんを切り刻め!!

Page 10: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

切り刻んだAさんを

あっちこっちにあるAさんの部屋に格納。

Page 11: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

え!?

Aさんが必要!?まじか……。

Aさん切り刻んでるから、まず集めなきゃ。

あっちこちにちらばっているAさんの部屋から Aさんだった残骸を集めて!

Page 12: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

集めたAさんを

くっつけて、Aさん復活!。

Page 13: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

ちなみに、

もっとAさんがでっかくなったり、

タイミングによっては……

Aさんの部屋が増えて、 あっちこっちに散らばって、 集めるのが大変!!

Page 14: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

どれぐらい散らばっているかを示すのが

断片化率

と言います。

Page 15: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

デフラグ

って聞いたことありません?

こんな画面でやったデフラグ→

Page 16: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

デフラグって、

切り刻んだAさんをくっつけて、

1個の部屋を用意してあげること。

● そう! 面倒だから、やらなかった 部屋の並べ替えですね。

Page 17: Sql serverインデックスの断片化と再構築の必要性について

Chapter. 2 SQL Serverのインデックスの再構築

ざっくりとした説明をします。 概念レベルなので、 詳しい人にしたら、間違ってる箇所も。。。

Page 18: Sql serverインデックスの断片化と再構築の必要性について

データベースのデータは、

FusionIOなどの物理ディスク

に書き込んで、保存します。

もう一度言います

Page 19: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

データはディスクに書き込むんだから、

断片化とは無縁ではありません。

Page 20: Sql serverインデックスの断片化と再構築の必要性について

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インデックスの断片化と再構築の必要性について

SQL Serverのインデックス

インデックスとディスクが 関係しています。

UserID 1~1000

UserID 1001~2000

UserID 2001~3000

UserID 2001~2100

UserID 2101~2200

UserID 2201~2300

インデックスの下に物理ディスクがあります。

Page 22: Sql serverインデックスの断片化と再構築の必要性について

SQL Serverのインデックス

で、断片化が進むと……。

UserID 2001~3000

UserID 2001~2100

UserID 2101~2200

UserID 2201~2300

ユーザID2001~2100を参照するのに あっちこちを見ないと、いけなくなる。

Page 23: Sql serverインデックスの断片化と再構築の必要性について

物理ディスクのデータ格納

データベースの中で、

断片化したデータを整理整頓するのが

インデックスの再構築です。

物理ディスク上に散らばっているデータを

整理整頓する作業です。

Page 24: Sql serverインデックスの断片化と再構築の必要性について

インデックスの再構築は

物理ディスク上に散らばっているデータを

物理的に整理整頓する作業です。

物理的に並べ替えているので、

途中でキャンセルすると、

元に戻します。 掃除をはじめて20分たったときに、 キャンセルすると 掃除をやめるのではなく、 掃除を始める前の状態にもどします。 キャンセルすると20分とは言いませんが、 案外時間かかることもあります。

Page 25: Sql serverインデックスの断片化と再構築の必要性について

テーブルが断片化すると?

• データを参照するのに、 CPU負荷が増えます。 Disk I/Oが増えます。 参照時間が増えます。

• データを更新するのに Diskスペースを確保し、 データを切り刻むので、 CPU負荷が増えます。 Disk I/Oが増えます。 更新時間が増えます。

Page 26: Sql serverインデックスの断片化と再構築の必要性について

データの断片化は……

• データの更新、削除をしていけば 必ず断片化します。

• データ量が増えれば、増えるほど、 断片化によるオーバヘッドが増えます。

Page 27: Sql serverインデックスの断片化と再構築の必要性について

インデックスの再構築は

• 断片化率が高いほど、再構築に時間が かかります。

• データ量が多いほど、再構築に時間が かかります。

Page 28: Sql serverインデックスの断片化と再構築の必要性について

ご利用は計画的に。

DB性能に問題が無い段階でも、 定期的に、 断片化率の高いテーブルのインデックスを

再構築しておくことで、

トータルでのメンテ時間は短縮できます。

Page 29: Sql serverインデックスの断片化と再構築の必要性について

IndexView

ツールの準備中。

再構築が必要なインデックスの選定、 再構築時の進捗確認

などが、

しやすいようにツールを作り始めてます。

http://sqlazure.jp/r/sql-server/260/