先に掲げた各項目について、もう少し具体的に説明しておきましょう。
- 個々のデータベースの最適化 -
テーブルの最適化も確かに重要です。
業務システムでは、例えば「在庫管理」「人事管理」「財務管理」などなど、各業務ごとにテーブル構成の基本パターンがあります。それに沿ってテーブルを設計すれば、大抵は大きな問題もなく効率的なデータベースが作成できるはずです。
そのため、よほど特殊なデータ構造の業務でない限り、基本的な問題は発生しません。これは、設計時に解決しておくべき問題です。但し、運用の途中で業務形態が変わり、システムの仕様を変更しなければならないような場合には、その段階で見直す必要があるでしょう。
重要なことは、対象としている業務で用いるデータ群がどのように関連し、最終的にどのようなデータを生成すればよいのか――つまり、データの入り口と出口の状態について、設計者が十分理解していることです。
データベースの処理効率は、データベース・エンジンがテーブル内のレコードを走査する速度に大きく左右されます。そのためには、インデックスを最適化する必要があります。
頻繁にアクセスされるテーブルに適切なインデックスを作成すれば、特定のレコードを見つけ出す処理が効率化されます。一般的にはマスターテーブルのIDフィールドを対象としますが、IDをキーにしたレコードの抽出や関連付けに伴う導出が頻繁に行われなければ意味がありません。
そういう意味で、インデックスの設定とテーブルの最適化は関連しています。まず、適切なテーブル設計と合理的な関連付けという前提があった上で、運用状況に適したインデックスの設定が効果を発揮します。
- RDBMSの最適化 -
次の「ハードウェアの最適化」とも関連しますが、SQL Serverの実行環境(SQL Serverの使用するメモリやディスク領域)を最適に設定することで、RDBMSの稼働効率を向上できます。
また、逆にあまり稼働していないのに無駄なメモリやディスクを使用している可能性もあります。そういった資源の無駄を省くことも大切です。
その他、万一の場合に備えて定期的にデータベースのバックアップを行う必要もあります。データベース管理者が随時行うのではなく、これをスケジューリングしておけば効率的な作業ができます。
- ハードウェアの最適化 -
サーバーもクライアントも、コンピュータとしての性能が十分に発揮できなければなりません。特に、多数のクライアントからやってくる処理要求をさばかなければならないデータベース・サーバーは、CPUの性能、メモリ容量、ハードディスクのアクセス速度などを十分検討する必要があります。
意外となおざりにされているのが、ディスクのフラグメンテーションです。常にユーザーが操作するクライアントは、処理速度が遅くなってくるとその原因が気になるものですが、普段単独で動作を確認する機会の少ないサーバーでは、そういった現象に気付かないこともよくあります。
データベースを頻繁に読み書きするのですから、ディスクに対するアクセス頻度は相当なものです。データベース自体は予め確保された領域に作成されるので、OSから見たディスク領域のフラグメンテーションは、思ったより発生しません。しかし、放っておくと虫食い状態が広がるのは間違いありません。定期的なデフラグを実行しましょう。
- ネットワークの最適化 -
RDBMSは、ネットワークを介してクライアントとデータをやり取りするのが大前提です。そのため、ネットワーク環境を適切に管理し調整することで、処理効率を向上できます。
ケーブルやハブ、コンピュータに装着したネットワークカード、カードのドライバなど、各機器やソフトウェアの見直しも重要ですが、意外とおろそかにされているのがネットワーク全体の構成です。
室内のハブとコンピュータの配置、ケーブルの取り回し、部屋やフロアをまたぐ際のケーブルや壁のローゼットなどなど、改めて点検してみましょう。
機器とケーブルの配置は、一度決めてしまうとあまり変更することはありません。が、机の配置やクライアント・コンピュータの移動、入れ替えなどで、実は機器の配置が微妙に変わっていたりします。すると、3m程度のケーブルで済むところに10mのケーブルをつないでいたり、わざわざ遠いところにある壁のローゼットからケーブルが延びていたり、再点検すれば無駄が見つかることは多いものです。
また、小規模なオフィスでは、1台のコンピュータに複数のサーバーソフトをインストールして兼用させることも多いですが、その際、特定のコンピュータだけに負荷がかかっているかもしれません。頻繁にアクセスされるファイルサーバーとデータベース・サーバーを古いコンピュータに担当させ、入れ替えた新しいコンピュータがプリントサーバーやFAXサーバーなどの軽い仕事をしている……といったことは、案外あるものです。
- アプリケーションの最適化 -
個々のアプリケーションが効率的に稼働し、効率的にSQLを発行しているかも、システム全体にとって重要なことです。いくらデータベース・サーバー周りやネットワーク環境が効率的に設計されていても、アプリケーションが、例えば同じようなSQLを断続的に実行していたり、クライアント側で解決できる処理をサーバーのストアドプロシージャに委ねすぎたりしていては、全体の効率が低下します。
また、逆にストアドプロシージャを利用してサーバーで解決すれば済む処理を、わざわざサーバーから大量のデータを受け取ってクライアントで処理していては、ネットワークのトラフィックが増大します。
その他、伝票を発行するだけの処理なのに、印刷がすべて終わるまでレコードをロックするような無駄な設計をされたアプリケーションが1つでもあると、そこがボトルネックとなるでしょう。
これらは「見直す」というよりデータベースとアプリケーションを含めた業務システムの基本設計に関わることなので、最初にしっかり設計しておけば問題はないように思えます。が、後から追加したアプリケーションがやっつけ仕事で適当に設計されていたりすることも、ないとは言えません。「もう稼働しちゃってるんだから」と放置しないで、再点検することも必要です。
- Enterprise Managerのツール -
Enterprise Managerには、RDBMSやデータベースをチューニングするために必要なツールが備わっています。主なものを紹介しておきましょう。
・SQLプロファイラ
SQLの実行を監視してログを記録します。ログを検討することで、時間のかかっている処理や頻繁に呼び出されている処理を見付け出せます。また、ここで記録したログは、次に紹介する「インデックス チューニング ウィザード」で利用されます。
・インデックス チューニング ウィザード
データベースのアクセス状況に基づき、テーブルに最適なインデックスを設定します。インデックスを最適化することで、レコードの検索や抽出の効率が向上します。
・データベース保守計画ウィザード
データベースのバックアップ計画などをウィザードで簡単に設定できます。
・SQL Server環境設定プロパティ
SQL Serverの実行環境を設定できます。
|
|
|