DBアタマアカデミー

第1回 記憶装置のトレードオフとバッファの考え方―すべてをとることができないとき (3)

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

システムの特性によるトレードオフ

ところで,前出の表1のデータキャッシュとログバッファを比較してみると,3つのDBMSに共通して,データキャッシュに比べてログバッファのデフォルト設定値が非常に小さいことがわかります。OracleやPostgreSQLなど,ログバッファは1Mバイトにも達しない程度です。こんなに小さくて大丈夫なのでしょうか?

大丈夫か大丈夫じゃないかは,実際のところ使ってみるまではよくわかりません。ただ,データベースがこのように極端に非対称なサイズ割り当てを行っている理由は,データベースというのが基本的には検索をメインの処理と想定しているシステムだからです。

通常のオンライン処理において,検索結果に多くのレコードが含まれることはあっても,更新処理において変更対象とされるデータは,せいぜいトランザクションあたり1~数十件です。そのため,更新のために貴重なメモリを多く割く必要はなく,反対に可能な限り多く検索SQLでヒットしそうなデータをキャッシュに載せておくのが得策だ,というのが多くのデータベースの基本精神になっているのです図5)⁠実際,多くのDBMSが,物理メモリに余裕があれば,データキャッシュになるべく多く割り当てることを推奨しています注4)⁠

図5 一般的にデータキャッシュに比べて,ログバッファは非常に小さい

図5 一般的にデータキャッシュに比べて,ログバッファは非常に小さい

もちろんこれは,DBMS側が(言葉は悪いですが)勝手にそう決めてかかっているだけなので,もしみなさんが作るシステムが,検索に比べて更新負荷の高い業務特性を持っているならば(たとえばバッチ処理がメインの場合)⁠デフォルト設定のままでは更新処理はまったくパフォーマンスが出ないことになります。そのときは,ログバッファにより多くのメモリを割り当てるといったチューニング(最適化)が必要になってきます。

注4)
たとえば,MySQL はマニュアルで「サーバがDB専用ならば,物理メモリの80%をバッファプールに割り当ててもよい」と示唆しています。 参照:MySQL 5.5 Reference Manual: 13.6.3. InnoDB Startup Options and System Variables

検索と更新,大事なのはどっち

つまり,ここで私たちは,検索と更新のどちらを優先すべきかという,3つ目のトレードオフに直面しているのです。メモリという高価で希少な資源は,すべてのデータをカバーするには足りません。したがって,何を優先して何を捨てるかという「あれかこれか」の判断が必要になるのです。

もちろん,システムにかかる負荷が小さくて,メモリが潤沢に余っているならばこういう悩みは生じません。データキャッシュとログバッファの両方に十分なメモリを割り当てればよいでしょう。また最近のDBMSはかなり進歩していて,リソースを自動調整する機能が充実してきています。ただ,それにもやはり限界はあります。厳しいリソース配分の計算が必要な局面では,何も考えずにデフォルト設定に頼ることは危険な行為です。

そうしたとき,適切な判断を下すためにも,そのデータベースがどのような思想に基づいてリソース配分が行われたのかを理解することは,非常に大切なことなのです。もしログバッファが大きく取られていれば,それは高負荷の更新処理を想定した設計を行っているということがわかりますし,反対にデータキャッシュが大きく取られていれば,検索処理のレスポンスを重視しているということがわかるわけです(何も考えずにデフォルト設定,というシステムを見かけることも,けっして少なくないのですが……)⁠

データベースの鉄則 3
トレードオフが顕著に現れるのは,希少な資源の配分においてである。

まとめ

今回は,DBMSが持つ「バッファ」という機能について解説しました。この機能を理解すること自体も重要ですが,筆者としては,その背後に控えている一般原則であるトレードオフについて理解してもらいたいと考えています。これは,データベースの世界だけでなく,常にリソース不足に悩まされるシステムの世界において最重要の概念だからです。

トレードオフが該当するのは,別にハードウェアリソースに限りません。人員や費用の割り振りといったリソース管理においてもそうです。厳しい言い方ですが,トレードオフの重要性を理解しない人は,システム業界に生きてはいけません。

それでは,重要なポイントをまとめましょう。

  • DBMSはユーザとディスクとの間にメモリを使って緩衝材を置いている
  • その緩衝材にはデータキャッシュとログバッファの2種類がある
  • 記憶コストとパフォーマンスはトレードオフの関係にある
  • データ整合性とパフォーマンスもトレードオフの関係にある
  • 検索と更新もトレードオフの関係にある
  • トレードオフを理解しない人は,システム開発の仕事をしてはならない

最後に,今回の演習問題を出しておきます。解答は,筆者の管理するWebサイト上のサポートページへ掲載します。

演習問題
あなたの使うDBMSが,ログバッファからディスク上のファイルへ書き出すタイミングについて調べてまとめなさい。

それでは,次回またお会いしましょう。

参考資料
『Database Management Systems 3rd ed.』
Raghu Ramakrishnan, Johannes Gehrek著,McGraw Hill,2002
DBMSのアーキテクチャについて網羅的かつわかりやすく解説された,定評ある教科書で,世界中の大学で使用されています。アメリカの教科書の例に漏れず分厚いのが玉に瑕きずですが,これ一冊を読むだけでDBMSの内部構造について重要な基礎知識が身につきます。

著者プロフィール

ミック

SI企業に勤務するDBエンジニア。主にデータウェアハウス業務に従事している。自身のサイト「リレーショナル・データベースの世界」でデータベースとSQLについての技術情報を公開している。『Web+DB Press』で「SQLアタマアカデミー」を連載中。

著書:『SQL ゼロからはじめるデータベース操作』(翔泳社,2010)『達人に学ぶ SQL徹底指南書』(翔泳社,2008)訳書:J.セルコ『SQLパズル 第2版』(翔泳社,2007)

DBアタマアカデミー:サポートページ

コメント

コメントの記入