絵で見てわかるOracleの仕組み

簡単そうでいて、意外とマニアックな、この「絵で見てわかる」シリーズ。
今回は、データーベースの王道「オラクル」である。
本書、というかオラクルのテーマは、多重処理をいかに早くこなすか、ということである。
そのために、さまざまな工夫がされている。

一般的にコンピュータにおいて、処理を早くする時にぶち当たるのがI/Oの問題である。
メモリに対して、ハーディスクのI/Oは圧倒的に遅い。
そのため、いかにハードディスクにアクセスせずに済ませられるかが肝になる。

ひとつは、キャッシュである。
ハードディスクから読み込んだデータをメモリに保存しておいて、なるべくメモリから読み出して、ハードディスクへのアクセスを減らそうという方法である。
この方法は、DBMSだけでなく、OSも、場合によってはアプリも独自に行っており、結果的に遅くなってしまうこともあるからややこしい。

もうひとつの方法は、メモリだけで処理を完結してしまう方法である。
ただし、この方法では、マシンの電源が落ちようものなら、すべてのデータが失われてしまう。
そのため、定期的にハードディスクのデータを更新して同期する方法もあるが、オラクルではログの書き込みを優先している。
ログとってもSQL文なので、ログさえ残っていれば、データベースの状態を再現できる。
また、データベースを更新するよりも、ログをシリアルに出力する方が処理が早い。
このような涙ぐましい努力で、高速化を図っている。

もうひとつの課題である多重処理は、ロックと待機によって対応している。
できるだけロックを分解、小さくして、競合の可能性を減らしている。

これ以外にも、オラクルのデータ構造、バックアップとリカバリー、バックグランド処理などについて解説している。
理解はしやすかったが、全てを憶えていられる自信はない。

Oracleでは管理の単位として「インスタンス」という用語を使います。インスタンスとは、「バックグラウンドプロセス群+共有メモリ」のことです。インスタンスと言うと、オブジェクト指向の経験から「実体」というイメージを思い浮かべる方もいるかもしれませんが、Oracleではバックグラウンドプロセス群+共有メモリ」になります。

なぜREDOログによって性能が確保されるのかというと、REDOログにデータをまとめて書き込むことでI/O回数が減るためと、シーケンシャルアクセスになるためです。I/Oサイズが大きくなっても頭出しの回数は変わらないため、それほどI/O時間は延びません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です