この特集のトップページへ

9.4 データベースのチューニング

 データベースの設計には論理データベース設計と物理データベース設計がある。

 論理データベース設計とは,システム内のデータ構造とそれらの関係を明確にし,最終的にテーブルおよび属性として定義することである。論理データベース設計における課題は正規化と非正規化であり,これらはリレーショナルデータベースの設計を最適化するうえで最も重要な課題といえる。システム性能のチューニングに先だって,論理設計が不適切あるいは間違っていると,チューニングの効果が低下してしまうことになるので注意したい。

 これに対して物理データベース設計とは,データベースシステムの性能を最大限に引き出すためにディスクサブシステムの構成とテーブル配置とを決定することである。物理設計はシステムの性能に大きな影響を与える。

 性能問題を解決するために論理データベース設計をチューニングする場合は,テーブルが正規化されているのか,または非正規化されているのかを検証する。テーブルが正規化されているか否かを検証する場合は,次のような点に着目してテーブルの設計を見直せばよい。

  • 列のくり返し定義をしていないか
  • 複数の要素をまとめた列を定義していないか
  • 導出列*1を定義していないか
  • テーブル間で重複して列を定義していないか
 テーブルは正規化されているのに性能問題を抱えている場合には,データベースの物理設計もふまえ,次のような点について見直す必要がある。
  • テーブルの列数が多すぎないか
  • テーブルにNULL値を多数定義していないか
  • テーブルに可変長列を多数定義していないか
  • 行長はネットワーク転送ブロック長以下か
  • データの整合性を確保するために,適切に制約が設定されているか
  • テーブルを分割(水平分割または垂直分割)して複数のディスクドライブに分散させることができないか

 リレーショナルデータベースでは正規化は理想的なテーブル構造を作成するために必須である。しかし,ユーザーの利用環境によっては,利用可能なリソースの制限や利用するアプリケーションの処理形態などが異なり,必ずしも最適な結果が常に得られるとは限らない。すなわち,ここにはトレードオフが存在する。

 しかし,だからといって,最初から非正規化を進めるような設計を行うべきではない。性能問題を引き起こしているシステムを検証すると,正規化のしすぎというよりも,正規化していないことが要因となっていることのほうがはるかに多いからである。データベースの論理設計にあたっては,まず正規化のみを実施するのが鉄則である。そのうえで,性能を評価し,その結果,性能目標を達成できない,あるいは性能問題が正規化のしすぎに起因して発生していると判断された場合にのみ,問題の箇所の非正規化を検討する。具体的には,アプリケーションの処理形態や処理条件に沿ったテーブル構造へと変更するのである。なお,実際に非正規化を実施するまえに,必ずデータベースの設計を検証してほしい。


  1. 計算して算出できる列のこと。たとえば,売上げ金額は「単価×数量」として容易に求められる。この売り上げ金額を格納する列を,導出列という。正規化する場合は,導出列を削除する。単価列と数量列があれば算出できるので,わざわざ列を用意する必要はない。

前へ Chapter 9 6/46 次へ