Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

DBMSの仕組みを知る

私がSQLiteを使うようになってからそろそろ2年が経つでしょうか。MySQLOracleなど他のDBMSも経験し、DBMSの概要やSQLの書き方、JDBCの使い方などについては座学・実践共にそこそこ蓄積ができてきたと感じています。
しかしDBMS自体の理解は乏しく、ブラックボックスとして扱い続けていました。この状態では「効率の良いコードやSQLを書いた」という立証が難しく、常に最善の選択肢を選ぶことは難しいでしょう。


そこで少しでもDBMSの仕組みを理解することを期待して、手始めに翔泳社より出版されている「絵で見てわかるOracleの仕組み」を読破しました。

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)


この本はOracle社員の方がサーバープロセスの役割やREDOログ・UNDOログの意味など、Oracleがどのようにシステムを構築することでACIDを満たす高速なDBMSを実現しているかを説明するものです。この本に限らずOracleの社員さんは頻繁にメディアに出ており、自社製品を積極的に伝えようとする姿勢に好感が持てます。

本の内容は簡潔かつ分かりやすく、どのような工夫で性能を高めているのかが手に取るように分かります。UNDOログを使うことで表をロックすることなくSELECT文の読み取り一貫性を保っている点が特に興味深く感じました。
欲を言えばもう1段階掘り下げて「こうした仕組みを前提として、性能を高めるためにはどういったテーブル定義が望ましいのか」といった実践的な情報もあると嬉しかったのですが、本の性格上それは他の本に期待するべきでしょうか。何を持ってSQLやテーブル定義などを「最善」と考えるかは、また別の情報が必要になるようです。


仕組みを学ぶと「結果セットはROWIDの配列と読み取り実行時のSCNで実現されているんじゃないか」というように実装方法も気になってきます。学べることはまだまだありそうです。