1

TOAD 或其他一些工具有没有办法监控您的网络应用程序正在执行的查询?

我想检查 Web 应用查询的解释/执行计划。

我正在调试为什么 webapp 查询比从 sqlplus 运行时慢。

4

2 回答 2

2

一般可以从三点进行跟踪分析。首先是 SQL,主要是通过 v$sql 视图。其次通过会话(从 v$session 开始)。最后通过时间(测量,通常在系统或会话级别,一段时间)。

如果执行了特定的 SQL 语句,例如 SELECT * FROM table WHERE type = :val,那么数据库将对其进行快速散列并查看缓存中是否有匹配的语句。该语句不仅要匹配文本,还要匹配某些环境设置(例如解析用户、优化器目标、绑定变量类型、NLS 设置...)。

如果没有匹配的语句,那么数据库会将其提供给优化器以提出查询计划。如果匹配,则将使用已为该语句确定的计划。

所以我建议你的第一步是获取一个已经由 web-app 和 sqlplus 执行的 SQL,看看它是否使用相同的计划。您应该能够在 v$sql 中查找感兴趣的语句并查看它出现了多少次)。

如果您有多次出现,特别是使用不同的 MODULE/ACTION/SERVICE 值,那么您可以查看计划以查看它们是否不同 (DBMS_XPLAN.DISPLAY_CURSOR)。如果您只有一次出现,那么 SQL 正在被共享,您需要采用不同的方法将 web-app 执行与 sqlplus 执行隔离开来。

一种方法是通过 web-app 会话和 sqlplus 会话 (DBMS_MONITOR) 跟踪 SQL 的执行。然后 tkprof 或类似的跟踪文件并寻找差异。

无法通过 TOAD 帮助您完成此操作,但您在了解底层工具和技术方面不会出错。

于 2010-07-21T22:58:30.597 回答
1

是的。有一种方法可以监控 Web 应用程序调用 Oracle TOAD 中的数据库查询。

START -> All Programs -> Quest Software -> TOAD for Oracle -> Tools -> SQL Monitor

使用此工具,您可以选择进程([TOAD, Web_dev (I dont remember the name of debug)]在本例中为“正在运行”,也可以选择“调试”)。此工具显示正在调用应用程序的存储过程或函数。

于 2011-07-20T15:52:02.400 回答