データベースと秋の空・RDBMS掌握術!

第1回 RDBMSが、SQLを見てどう思うのか

この記事を読むのに必要な時間:およそ 3 分

一連のサイクルを通して

SQL文の問い合わせ実行というのは,上記の3ステージ式となっています。これによりユーザーから速度チューニング等を見せないようにするなど,非常に意欲的な作りといえるでしょう。しかし一方で,チューニング等を行うときに問題となっている部分を特定することが難しいです。例えば「遅い」というだけでも,前述の内容を頭に浮かべながら考えると,

  • プランを作成するのに時間がかかる
  • 作成されたプランが最適でなく,実行に時間がかかる
  • プランは最適だが,エグゼキュータで時間がかかっている

といったケースが思いつきます。これらは,現象こそ共通していますが,解決のためには異なるアプローチが必要となります。それが分かり難いからこそ「データベースは何を考えているのか分からない」と言いたくなるのです。しかし,この流れを理解していれば,そういう事情を理解する最初のとっかかりになるでしょう。

もちろん次のステージとしては,もっと中を掘り下げて,具体的なSQLに対して,どう具体的な処理がされるのか? というところを追っていくことになります。次回以降では,この一連のサイクルを具体的に掘り下げていくことにします。

  • プランナはどのようなプランを実際に立てるのか?
  • エグゼキュータでの実行時には,どのようなことが起こるのか? またどの程度時間がかかるのか?

という項目を一つ一つ見ていきましょう。そうすれば徐々にデータベースの心に迫れるはずですね。

まとめ

  • SELECT文のような,一般的検索を行うSQLの実行は
    • 「理解する」パーザ
    • 「作戦を立てる」プランナ
    • 「作戦を遂行する」エグゼキュータ
    の3段階で処理が行われます。
  • パーザでは,SQL文をRDBMSが理解できる形にします。
  • プランナでは,構文から実施計画を立て,比較検討します。
  • エグゼキュータでは,実施計画に従ってデータを取り出します。
  • 3段階で処理が分かれるため,一口に「遅い」と言ってもいろんな原因が考えられます。

著者プロフィール

谷田豊盛(たにだゆたか)

国立明石工業高等専門学校卒。いったん公務員になるが,プログラミングが好きでコンピューター業界に転進。 PostgreSQLを触り出したのは6.3のころから。特にCygwinを使ったWindows環境で使っていたが,それが高じて現在ではPostgreSQLで飯を食うことに。