我的问题很笼统,但我也有一个例子来解释我的问题。我开发了一个基于Openjpa的持久层webapp,并使用两个数据库来测试它。一个是Postgres 8.1,另一个是Postgres 9.2。它们具有相同的内容,相同的数据!
当我部署我的webapp时,一切运行良好,但是当我使用PostgreSql 8.1时,我遇到了一个非常奇怪的问题:类型SELECT * FROM MEDICINE_CASE
的选择查询在Postgres 9.2上最多需要10秒,在40-50秒之后Postgres的。这可能会浪费我的webapp上的很多好工作。 MEDICINE_CASE表是一个包含20列和超过5000个条目的巨大表,它与其他表有7-8个外键关系。你能帮助我发现为什么会出现这个问题以及如何在Postgres 8.1上解决它?
答案 0 :(得分:1)
通常你会对查询进行EXPLAIN ANALYZE,但对于一个简单的SELECT * FROM tablename
,它不会显示太多。另外,8.1中的EXPLAIN没有BUFFERS选项。
你说它是一个包含5000个条目的巨大表格,但就行数而言,它通常被认为是今天的标准。然而,表扫描的40秒很长,并且表明它有很多内容。
因此,表中包含大量内容,例如包含兆字节文本或bytea内容的列,或者由于缺少维护而导致其膨胀。或两者兼而有之。
如果您可以直接转储并重新加载8.1数据库(pg_dump到sql文件/ dropdb / createdb / reload sql文件),您会很容易地知道性能差异是否真的取决于版本(可疑)或者臃肿和破碎。
此外,你真正应该做的是放弃8.1并使用受支持的版本。