【问题标题】:PostgreSQL index usage, backing up pg_catalog dataPostgreSQL 索引使用,备份 pg_catalog 数据
【发布时间】:2013-01-23 03:38:47
【问题描述】:

我目前正在审查复杂 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 捕获(备份)数据以便恢复和分析有关索引使用的实际客户端数据的最简单方法是什么?

【问题讨论】:

    标签: postgresql indexing database-backups


    【解决方案1】:

    提供客户端可以使用 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 数据库,反之亦然。

    【讨论】:

    • 很好的答案,它“在我的机器上工作”......他们不允许我让现场的人知道 PostgreSQL 密码,甚至编写一个运行 psql 命令的实用程序。我想可行的解决方法存在太多限制。
    • 另外,有没有办法运行 pg_dump 并且只备份然后用所有数据恢复 pg_catalog 表?
    • @Evgeny 不,据我所知没有。如果他们不会运行您提供的脚本或简单的查询,并且不会为您提供数据库的低级副本,那么您可能会陷入困境。
    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2010-10-25
    相关资源
    最近更新 更多