我的问题很笼统,但我也有特别的例子来解释我的问题。我基于 Openjpa 开发了一个带有持久层的 webapp,并使用了两个数据库对其进行了测试。一个是 Postgres 8.1,另一个是 Postgres 9.2。它们具有相同的内容,相同的数据!当我部署我的 web 应用程序时一切正常,但是当我使用 PostgreSql 8.1 时,我遇到了一个非常奇怪的问题:类型的选择查询SELECT * FROM MEDICINE_CASE
在 Postgres 9.2 上最多需要 10 秒,而在 Postgres 上则需要超过 40-50 秒。这可能会在我的 webapp 上浪费很多好工作。MEDICINE_CASE 表是一个巨大的表,有 20 列和超过 5000 个条目,它与其他表有 7-8 个外键关系。你能帮我找出这个问题发生的原因以及如何在 Postgres 8.1 上解决它吗?
问问题
130 次
1 回答
1
通常,您会对查询进行 EXPLAIN ANALYZE,但简单SELECT * FROM tablename
来说,它不会透露太多信息。8.1 中的 EXPLAIN 也没有 BUFFERS 选项。
您说这是一个包含 5000 个条目的巨大表,但按照今天的标准,就行数而言,它通常被认为非常小。然而,表扫描的 40 秒很长,表明它有很多内容。
因此,要么该表包含巨大的内容,例如具有兆字节文本或 bytea 内容的列,要么由于缺乏维护而变得臃肿。或两者。
如果您可以转储并重新加载 8.1 数据库(pg_dump 到 sql 文件/dropdb/createdb/重新加载 sql 文件),您将很容易知道性能差异是否真的取决于版本(可疑)或膨胀和碎片.
此外,无论如何,您真正应该做的是放弃 8.1 并改用受支持的版本。
于 2013-11-14T16:18:54.133 回答