9.1 性能に影響を与える要因
システムの置かれた状況に合わせて,システム構成にディスクやメモリなどを追加するにせよ,アプリケーションやクエリを変更するにせよ,システムの設定を変更するにせよ,額の多少はあれども費用が発生することは否めない。また,システム管理者の負担も増加する。したがって,必要なチューニングであっても,価格対効果の観点から,できるだけ効率的に実施することが望ましい。
一般的に,システムの置かれている状況は日々刻々と変化しているのであり,システムを稼働させるまえ,あるいは開始させた直後に施したチューニング設定が,その後も永続的に適切であるとは限らない。たとえば,データベースに格納されるデータ量は増えることはあっても減ることはあまりないし,その増分も日々変化する。システムに同時にアクセスするユーザー数も,時間帯によって,あるいは日によって増減するであろう。ユーザー数が増加すれば,システムリソースの消費量もそれに比例して増加するであろう。また,OLTP処理を中心とする昼間のトランザクションと,バッチ処理を中心とする夜間のトランザクションとでは,その数と特性が異なる。
システム管理者は,このように刻々と変化する状況に合わせて,システムの設定を適切に変更してチューニングすることを求められる。チューニングを検討すべき具体的な項目としては,ソフトウェア,ネットワーク,プロセッサ,メモリ,ディスク,データベーススキーマ,アプリケーション,クエリ,負荷,データベースサイズ,などが挙げられるだろう。
SQL Server 7.0では,管理者の運用負担を少なくするために,数々の工夫がなされている。その1つがSQL Serverの自動チューニング機能である。たとえば,データベースファイルのサイズは物理的な限界を超えない範囲で運用中に自動的に拡張されたり,必要がなくなれば縮小されたりする。また,アプリケーションやアクセス対象となるデータベースオブジェクトが増加すれば,サーバーのメモリプールが自動的に拡張され,SQL Server 7.0以外のサーバーアプリケーションの開始に伴って自動的に元に戻される。さらに,ユーザーが明示的に設定しなければならないSQL Serverの構成パラメータもシステムの内部に隠蔽されたため,管理者が気を配らねばならないパラメータは減少している。
とはいえ,管理者が,さまざまな状況下において性能劣化を引き起こしている問題点を識別し,その問題点に焦点を合わせてSQL Serverを効果的に最適化しなければならないことに変わりはない。
SQL Server 7.0の性能は,従来バージョンと比べると大きく改善されている。しかし,すべてのアプリケーションにおいて,その性能を遺憾なく発揮できるとは限らない。当然のことながら,アプリケーションとSQL Serverが互いに最適な設計で構成されていなければ,期待されるだけの性能向上は望めないであろう。また,あるアプリケーションの性能向上に効果があるからといって,その設定がほかのアプリケーションの性能向上にも効果があるとは限らない。むしろ,性能の劣化をもたらす場合もある。たとえば,さまざまな条件で発行された検索アプリケーションのクエリに対する応答を高速化するためには,一般的にインデックスを多くの列に定義したほうがよい。しかし,データの挿入や更新の処理が中心となるアプリケーションであれば,処理に直接関係のない場合でも,定義されているすべてのインデックスを挿入および更新しなければならないため,応答が遅くなるおそれがある。そのため,「どのアプリケーションの性能を優先的に向上させるか」という優先順位を設定することも必要となる。
データベースを利用したアプリケーション環境において,システムやアプリケーションの性能に影響を与えると考えられる要因には,次のようなものがある。
- 論理データベース設計
- 物理データベース設計
- インデックス設計
- クエリ設計
- アプリケーション設計
- ロックとトランザクション設計
- システムリソースと構成パラメータ設定
- 同時アクセスユーザー数
システムの置かれる状況は,日々刻々と変化する。システム管理者は,変化してゆく状況に合わせて,システムにかかわるさまざまなトレードオフを検討し,データベースが最適な性能を発揮できるように調整しなければならない。そのために必要となる作業が,パフォーマンスチューニングである。本章では,SQL Server 7.0のパフォーマンスチューニングにあたって検討すべき事項について解説する。
Chapter 9 2/46 |