【发布时间】:2011-03-22 06:35:54
【问题描述】:
在一个相当典型的 EclipseLink/JPA 应用程序中解决一些数据库性能问题。
我看到频繁的查询需要 25-100 毫秒。这些是简单的查询,只需从表中选择其主键等于一个值的所有列。他们不应该很慢。
我正在使用 log_min_duration_statement 查看 postgres 日志中的查询时间,因此这应该可以消除任何网络或应用程序开销。
这个查询并不慢,但经常使用。
为什么按主键选择 * 会很慢? 这是 postgres 特有的还是一般的数据库问题? 我怎样才能加快速度?一般来说?对于 postgres?
pg 日志中的示例查询:
2010-07-28 08:19:08 PDT - LOG: duration: 61.405 ms statement: EXECUTE <unnamed> [PREPARE: SELECT coded_ele
ment_key, code_system, code_system_label, description, label, code, concept_key, alternate_code_key FROM coded
_element WHERE (coded_element_key = $1)]
表格有大约 350 万行。
我还对这个查询运行了 EXPLAIN 和 EXPLAIN ANALYZE,它只进行索引扫描。
【问题讨论】:
-
数据集有多大?每行有多大?查询是什么样的?
-
您是否对数据库进行了集群化?您在发布之前是否进行了真空全面分析?什么Pg版本?
-
没有集群,也不是一个真正的选择。我还没有进行真空全面分析(我会),这是 PG 8.1。
-
你应该做全真空。如果你没有定期清理你的数据库,你应该添加一个 cron 作业来做到这一点。
标签: sql database jpa performance eclipselink