如何在oracle中测量查询的性能

时间:2009-08-21 15:29:33

标签: sql oracle sqlperformance

我是Oracle db的新手。我有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 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

在OTN上,Randolf Geist和我写了两篇关于如何衡量绩效的帖子。如果按照这些主题中的说明进行操作,您将收集信息以便能够选择更好的主题。

如果您想要完整版,请访问Randolf's

如果您想要简短版本,请访问mine

两个主题都解释了如何使用解释计划和跟踪来查看花费的时间。然后由你决定你完全符合“更好”的条件。这可以是最短的经过时间,最少的使用资源量,或最小数量的锁存器,或者可能是其他东西。

希望这有帮助。

此致 罗布。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我担心EXPLAIN PLAN是唯一的方法。首先假设成本较低(如果你看一下解释计划中应该有一个名为COST的专栏)是更好的,但你需要阅读它以便你学到越来越多。也许你有一个DBA,你可以通过聊天?没有您的数据和查询,很难进一步建议

对于与开发Oracle有关的任何事情,一个好的起点是Tom Kyte(谷歌他)或搜索the Ask Tom website。如果你真的想参与其中

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

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

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