【发布时间】:2011-07-08 20:05:32
【问题描述】:
这个网站上的很多人说:“优化性能是万恶之源”。我现在的问题是我有很多复杂的 SQL 查询,其中许多使用用户在 PL/pgSQL 或 PL/python 中创建的函数。我的问题是我没有任何性能分析工具可以向我展示,哪些功能实际上会使查询变慢。我目前的方法是排除各种功能并花时间查询每个功能。我知道我也可以使用解释分析,但我认为它不会为我提供有关用户创建的函数的信息。
我目前的方法相当乏味,特别是因为 PostgreSQL 中没有查询进度,所以如果我选择在太多数据上运行查询,有时我必须等待查询运行 60 秒。
因此,我正在考虑创建一个工具是否是个好主意,该工具将通过修改 SQL 查询来自动对 SQL 查询进行性能分析,并在各种版本上占用实际处理时间。每个版本都是一个简化版本,可能只包含一个用户创建的功能。我知道我没有清楚地描述如何做到这一点,并且我可以想到很多复杂的因素,但我也可以看到其中许多因素都有解决方法。我基本上需要您对这种方法是否可行的直觉。
另一个类似的想法是将查询设置服务器设置 work_mem 运行为各种值,并显示这将如何影响性能。
可以使用 JDBC 编写这样的工具,因此可以对其进行修改以适用于所有主要数据库。在这种情况下,它可能是一个可行的商业产品。
【问题讨论】:
-
实际上,我们引用 Don Knuth 的话:“过早的优化是万恶之源。”基本思想: 1)在加快速度之前先做好。 2)让它更快时保持正确。 3)知道什么时候停止让它更快。我不确定我是从哪里学到这三个的——也许是 Kernighan 和 Plauger 的编程风格元素。
标签: database performance postgresql relational-database