私は検索しましたが、これに対する単純で直接的な答えを見つけることができませんでした。によって使用されている現在の統計ターゲットを確認するにはどうすればよいANALYZE
ですか?
2 に答える
統計ターゲットの設定は、列ごとにカタログテーブルに保存されますpg_attribute
。次のように設定できます。
ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;
そして、次のように確認してください。
SELECT attstattarget
FROM pg_attribute
WHERE attrelid = 'myschama.mytable'::regclass
AND attname = 'mycolumn';
または、pgAdminのオブジェクトブラウザで作成スクリプトを確認します。値がのデフォルトと異なる場合は、スクリプトが追加されますdefault_statistics_target
。
私はマニュアルを引用しますattstattarget
:
attstattargetは、この列に対して累積された統計の詳細レベルを。によって制御します
ANALYZE
。ゼロ値は、統計を収集する必要がないことを示します。負の値は、システムのデフォルトの統計ターゲットを使用することを示します。正の値の正確な意味は、データ型によって異なります。スカラーデータ型の場合、attstattargetは、収集する「最も一般的な値」のターゲット数と、作成するヒストグラムビンのターゲット数の両方です。
大胆な強調鉱山。
プレーンインデックス列の統計は列統計と同じであり、統計テーブルに個別のエントリはありません。ただし、Postgresはインデックス式に対して個別の統計を収集します。それらは同様の方法で微調整することができます:
ALTER INDEX myschema.myidx ALTER COLUMN 1 SET STATISTICS 128;
実際の列名がない場合は、以下に対応するインデックス列をアドレス指定するために序数が使用されますpg_attribute.attnum
。
SELECT attstattarget
FROM pg_attribute
WHERE attrelid = 'myschama.myidx'::regclass
AND attnum = 1;
ANALYZE
この設定は、次に手動またはによって実行されるときに列統計にのみ実際に影響しますautovacuum
。
これにより、収集されている現在の統計をより明確に表示できます
SELECT attrelid::regclass, attname, attstattarget FROM pg_attribute WHERE attstattarget >= 0 order by attstattarget desc;