DBチューニング(1)
DBチューニング
DBチューニングに関するサイトを作っていたのですが順序だてて説明するのが難しくなってきたので一旦学んだことをリリースします。
ディスクI/O性能
''RDBMS''では高速化を行う際に、''索引''となる''インデックス''を最適化する作業を行います。
この''最適化''という言葉の定義を理解する為に、まず''ディスクI/O性能''について考えます。
''ディスクI/O性能''は、分かりやすく言うと外部記憶装置であるHDDへの読み書きの事で、時間が短いほとよいものとします。
次の表をご覧ください。
CPUのアクセス時間 | 0.0000000010 秒 | 10ns | |||
メモリのアクセス時間 | 0.0000000060 秒 | 60ns | |||
HDDのアクセス時間 | 0.0000050000 秒 | 5ms | |||
SSDのアクセス時間 | 0.0000005000 秒 | 0.5ms |
''HDD''への読み書きは''シーク待ち''+''回転待ち''+''データ転送''に時間を要します。この時間はCPUやメモリへの読み書きに比べて時間がかかっています。
B+Treeインデックス
主なRDBMSでは''B+Treeインデックス''を採用していると思います。
参考: http://d.hatena.ne.jp/naoya/20090412/btree B木 - naoyaのはてなダイアリー
この''アルゴリズム''を理解しておいたほうが後々の学習がはかどるとは思いますが、なんとなくわかったような程度でも大丈夫です。
このアルゴリズムは次のような原理です。
森の中に一本の木があります。そのうち1枚の葉っぱに目印をつけたので探して下さい。目的の葉っぱは幹の根元から数えて3番目の枝、その枝から枝先に向かって15番目で分岐している枝にいくつかの葉っぱがあります。その中に目印をつけています。
探し方は次の2つの方法どちらが効率的ですか?
A. 全部の葉っぱを調べる。 B. 幹の根元から3番目、枝先に向かって15番目の葉のグループを探し始める
とりあえず答えはBという事にして下さい。B+Treeの説明としては不十分な例ですが、こうすると次の4段階で目的の情報にたどり着いた事になります。
- ルート(幹)
- ブランチ(枝)
- リーフブロック(枝の終端とたくさんの葉)
- データブロック(1枚の葉)
この4つの手順がイコールディスクの読み取り回数となります。大量のデータをHDDで管理する場合、このB+Tree構造で管理する事によって最小限の手順(ディスクの読み取り回数)で目的のデータを探せるように工夫をしています。