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

SQL Anywhere 12.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 718 CustomersKey 0 PKEY 1 0.127686 1.000000
Customers 718 IX_customer_name 1 NUI 1 0.789795 1.000000

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

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

SQL Anywhere プラグインで [断片化] タブを使用して、ベーステーブルに関連付けられたインデックスのインデックス断片化のレベルを確認することもできます。

 参照