【问题标题】:Feasible way to do automated performance testing on various database technologies?对各种数据库技术进行自动化性能测试的可行方法?
【发布时间】: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


【解决方案1】:

Apache JMeter 可用于负载测试和监控 SQL 查询的性能(使用 JDBC)。但它不会修改您的 SQL。

实际上,我认为没有任何 工具可以简化并重新运行您的 SQL。这种“简化”应该如何工作?

【讨论】:

  • 我还没有弄清楚简化的细节,但一种方法可能是减少选定列的数量。另一种方法是用一个虚拟值替换任何用户构建的函数(如果从函数返回,则为 varchar,如果返回,则为整数)。也许可以通过删除左连接来简化它。聪明的人需要仔细考虑这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 2019-10-26
  • 2010-09-23
相关资源
最近更新 更多