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 の使用法 » データベース・パフォーマンスのモニタリングと改善 » データベース・パフォーマンスの改善 » パフォーマンス向上のためのヒント

 

インデックスの断片化とスキューの削減

インデックスは特定のカラムの検索が高速になるように設計されていますが、インデックス付きテーブルに対して多数の DELETE 操作が実行されると、インデックスが断片化 (密度が下がる) およびスキューする (偏る) ことがあります。

インデックスの密度は、インデックス・ページの平均の満杯度を反映しています。インデックス・スキューは、平均密度からの一般的な偏差を反映しています。オプティマイザが選択性推定を行う場合、このスキュー量は重要です。

データベース内に許容できないレベルの断片化またはスキューを含むインデックスがあるかどうかを判断するには、アプリケーション・プロファイリング・ウィザードを使用します。アプリケーション・プロファイリング・ウィザードを参照してください。

sa_index_fragmentation システム・プロシージャを使用して、インデックスの断片化およびスキューのレベルを確認することもできます。たとえば、次の文は sa_index_density システム・プロシージャを呼び出して、Customers テーブルのインデックスを調べます。

CALL sa_index_density( 'Customers' );
TableName TableId IndexName IndexID IndexType LeafPages Density Skew
Customers 686 CustKey 0 PKEY 1 0.645992 1.002772
Customers 686 IX_cust_name 1 NUI 1 0.789795 1.432239

SQL Anywhere はプライマリ・キーのインデックスを自動的に作成します。sa_index_density システム・プロシージャの結果で、IndexID が 0 のインデックスが存在する点に注意してください。

リーフ・ページ数が少ない場合は、密度とスキューの値を考慮する必要はありません。密度とスキューの値は、リーフ・ページ数が多いときだけ重要です。リーフ・ページ数が多い場合、密度の値が低いと断片化を表し、不均衡値が高いとインデックスが偏っていることを示します。どちらも、パフォーマンス低下の要因になります。REORGANIZE TABLE 文を実行すると、この両方の問題に対処できます。REORGANIZE TABLE 文を参照してください。

参照