1

私は現在、複雑な 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 からデータを取得 (バックアップ) する最も簡単な方法は何ですか?

4

1 に答える 1

2

クライアントが実行できる SQL スクリプトを提供しますpsql -f report_on_live_db.sql live_db_nameSELECT必要なデータを用意してください。

または、クライアント データベースの生のファイル システム レベルのコピーをクライアントから取得し、それをローカル マシンで起動することもできます。これは、同じオペレーティング システムとアーキテクチャで PostgreSQL を実行できる場合にのみ機能します。64 ビット PostgreSQL を使用して 32 ビット データベースにアクセスすることも、Linux PostgreSQL を使用して Windows または BSD データベースにアクセスすることもできません。同じ PostgreSQL メジャー バージョンを使用する必要があります。9.1 を使用して 9.0 データベースにアクセスすることはできません。

于 2013-01-23T03:49:05.010 に答える