私は現在、複雑な PostgreSQL データベースでのインデックスの使用法を検討しています。便利そうなクエリの 1 つがこれです
SELECT idstat.schemaname AS schema_name, idstat.relname AS table_name,
indexrelname AS index_name,
idstat.idx_scan AS times_used,
pg_size_pretty(pg_relation_size(idstat.relid)) AS table_size, pg_size_pretty(pg_relation_size(indexrelid)) AS index_size,
n_tup_upd + n_tup_ins + n_tup_del as num_writes,
indexdef AS definition
FROM pg_stat_user_indexes AS idstat JOIN pg_indexes ON (indexrelname = indexname AND idstat.schemaname = pg_indexes.schemaname)
JOIN pg_stat_user_tables AS tabstat ON idstat.relid = tabstat.relid
WHERE idstat.idx_scan < 200
AND indexdef !~* 'unique'
ORDER BY idstat.relname, indexrelname;
インデックスが使用される頻度、使用されるスペースの量などがわかります。
でも:
クライアント サイトからデータベースのバックアップを取得します。データベースを復元すると、クエリは times_used に対してゼロを返します。復元時にすべてのインデックスが再構築されていると思われます。
最後に、質問:
インデックスの使用に関する実際のクライアント データを復元して分析できるように、pg_catalog からデータを取得 (バックアップ) する最も簡単な方法は何ですか?