我目前正在审查复杂的PostgreSQL数据库中索引的使用情况。其中一个看起来很有用的查询是
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捕获(备份)数据的最简单方法是什么,以便可以恢复和分析索引使用的实际客户数据?
答案 0 :(得分:2)
提供客户端可以使用psql -f report_on_live_db.sql live_db_name
运行的SQL脚本。拥有SELECT
所需的数据。
或者,您可以从客户端获取客户端数据库的原始文件系统级副本,然后在本地计算机上将其激活。只有在同一操作系统和体系结构上运行PostgreSQL时,这才有效;您不能使用64位PostgreSQL访问32位数据库,也不能使用Linux PostgreSQL访问Windows或BSD数据库。必须使用相同的PostgreSQL主要版本;您不能使用9.1访问9.0数据库,反之亦然。