Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベース・パフォーマンスのモニタリングと改善 » データベース・パフォーマンスの改善 » パフォーマンス向上のためのヒント

 

テーブルの断片化削減

テーブルの断片化は、ローが連続して格納されていない場合、またはローが複数のページに分割されている場合に発生します。これらのローには追加のページ・アクセスが必要になるため、データベース・サーバのパフォーマンスを低下させます。

断片化がパフォーマンスに与える影響は、さまざまなものがあります。テーブルが極端に断片化されていても、メモリ内に収まっていて、かつアクセス方法によってページのキャッシュが許可されている場合、影響は最小限に抑えられる可能性があります。これとは反対に、断片化されたテーブルにより、大量の I/O 処理が発生することがあります。その結果、分割されたローが頻繁にアクセスされ、かつ余計な I/O のコストがキャッシュによって削減されない場合は、パフォーマンスが重大な影響を受ける可能性があります。

テーブルの再編成とデータベースの再構築を行うと断片化は削減されますが、行う回数が多すぎても少なすぎても、パフォーマンスに影響を与えることがあります。この項で後述するツールや方法を実際に使ってみて、テーブルの許容可能な断片化レベルを判断してください。

断片化を削減しても依然としてパフォーマンスがよくない場合は、統計が不正確であるなどの別の問題が考えられます。

テーブルの断片化レベルの判断

sa_table_fragmentation システム・プロシージャを使用すると、データベース・テーブルの断片化レベルに関する情報を取得できます。パフォーマンスを改善するためにデフラグを実行するかどうかを判断するうえで、このシステム・プロシージャを 1 回実行するだけでは役立ちません。データベースを再構築してからプロシージャを実行し、ベースラインとなる結果を取得してください。次に、長期間にわたってプロシージャを定期的に実行し、プロシージャの出力における変化とパフォーマンス測定時の変化との相関を調べます。この方法によって、テーブルの断片化がパフォーマンスに影響をきたすまでの状態になる速度を確認でき、それによりテーブルのデフラグを実行する最適な頻度を決定できます。

このプロシージャを実行するには、DBA 権限が必要です。次の文は、sa_table_fragmentation システム・プロシージャを呼び出します。

CALL sa_table_fragmentation( [ 'table-name' [, 'owner-name' ] ] );
断片化を削減する方法

次の方法で、テーブルの断片化を制御できます。

  • PCTFREE の使用   SQL Anywhere では、ローが少し大きくなることを見込んで各ページに余分な領域を確保します。ローが更新されたために、最初に割り付けられていた領域より大きくなると、そのローは分割され、最初のローのロケーションにはロー全体が格納されている別のページへのポインタが入れられます。たとえば、空のローを UPDATE 文で埋めたり、テーブルに新しいカラムを挿入したりすると、ローが分割される可能性があります。別個のページに格納されるローが増えるほど、追加ページへのアクセス所要時間が長くなります。

    テーブル・ページに今後の更新のための予約領域の割合を指定しておくと、テーブルの断片化量を減らすことができます。この PCTFREE 指定は、CREATE TABLE、ALTER TABLE、DECLARE LOCAL TEMPORARY TABLE、または LOAD TABLE で設定できます。

  • テーブルの再編成   REORGANIZE TABLE 文を使用すると、特定のテーブルの断片化を解除できます。テーブルを再編成しても、データベース・アクセスは中断されません。

  • データベースの再構築   データベースを 2 段階で再構築すると、システム・テーブルを含むすべてのテーブルの断片化が解除されます。2 段階で行うには、データをディスクにアンロードして保存してから、再ロードします。この方法で再構築すると、テーブルのローが並べ替えられ、クラスタード・インデックスとプライマリ・キーで指定された順序になります。-ar、-an、-ac などのオプションを使用して一度に再構築を行うと、テーブルの断片化は減りません。

参照