10

我是 Oracle 数据库的新手。我有 2 个查询返回相同的结果集。我想衡量他们每个人的表现并选择更好的。如何使用 Oracle SQL 开发人员做到这一点?我记得读过某些工具提供统计数据。关于如何阅读这些统计数据的任何指示?

更新:正如 Rob Van 所建议的,我使用 tkprof 实用程序来查找查询的性能。一些我能理解的参数(计数、行、经过时间、执行时间),但大多数我不能。任何人都可以帮助我了解这些参数的重要性吗?以下是结果。

Query 1:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.01          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       49      0.26       0.32         45        494          0       23959
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       51      0.28       0.33         45        494          0       23959

Query2:
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch       33      0.25       0.24          0        904          0       15992
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       35      0.25       0.24          0        904          0       15992

我可以确定查询 2 比查询 1 更好。关于磁盘、查询和当前参数的含义有什么帮助吗?

4

4 回答 4

13

SQL 编辑器上方有一个名为“Explain Plan”的按钮。该工具将告诉您每条路由的成本,以及该语句将如何使用索引和分区。请注意,您可能会收到一个错误,您的 DBA 需要为您的用户帐户打开一项功能,我相信它是“跟踪”,但在这一点上可能是错误的。阅读执行语句输出一开始可能具有挑战性,但它是帮助编写良好 SQL 的好工具。

于 2009-08-21T15:40:46.670 回答
4

恐怕解释计划是唯一的方法。首先假设成本较低(如果您查看说明计划,应该有一个名为 COST 的列)更好,但您需要阅读它以便您了解更多信息。也许你有一个 DBA 可以和你聊天?如果没有您的数据和查询,很难进一步提供建议

对于与开发 Oracle 相关的任何事情,Tom Kyte(谷歌他)或通过Ask Tom 网站搜索的任何内容都是一个不错的起点。如果你真的想参与

只运行几次查询是一个非常糟糕的主意——相当于只是接受解释计划的成本告诉你最好的查询。您确实需要考虑您的查询占用了哪些资源,以及它如何影响您的生产系统。

根据查询被调用的频率会影响您跟踪查询性能的程度(很抱歉,纯粹主义者,但确实如此)。如果查询每周只运行一次并且运行一分钟而不影响其他任何内容,那么您是否需要优化该查询?使用逻辑上更容易遵循的查询是否更容易维护?

如果查询每秒被调用多次,那么您需要完全理解解释计划,并进一步了解如何将查询优化到最佳性能

于 2009-08-24T13:34:05.133 回答
3

基本答案 - 执行每个查询几次,看看哪个更快。最好的部分 - 您可以在不了解 Oracle 性能的情况下做到这一点。您唯一需要知道的是,您不能信任第一次尝试,因为大多数情况下它将从磁盘读取数据,而第二次尝试将使用 RAM 中的缓存数据。这就是为什么您要多次尝试每个查询。

于 2009-08-21T18:34:14.060 回答
2

On OTN, Randolf Geist and me have written two posts about how to measure performance. If you do as indicated in those threads, you will have gathered information to be able to choose the better one.

If you want the full version, visit Randolf's.

If you want a short version, visit mine:

Both threads explain how to use explain plan and tracing to see where time is spent. Then it is up to you to decide what you exactly qualify as "better". This can be the shortest elapsed time, the least amount of used resources, or the smallest number of latches, or maybe something else.

Hope this helps.

Regards, Rob.

于 2009-08-23T13:05:28.583 回答