查询Oracle的执行计数

时间:2017-05-31 21:34:08

标签: database oracle rdbms

在我们的基于Oracle的Prod数据库中,我希望看到被解雇的查询数量。

背后的原因是我们希望看到我们制作的网络电话的数量以及防火墙在我们将其移至云系统时可能产生的影响。

select sum(EXECUTIONS)
from v$sql
where last_active_time >= trunc(sysdate)-2 
and (parsing_schema_name like '%\_RW%' escape '\' or parsing_schema_name = 'TEMP_USER')   
and module not in ('DBMS_SCHEDULER') 
and sql_text not like '%v$sql%';

上面的查询看起来并不可靠,因为SQL被推出了内存,这就是上面的内容。

有没有办法从数据库本身获取我们在Oracle DB上进行的调用次数?目前,从所有应用程序中记录并不是一个可行的选择。

谢谢!

2 个答案:

答案 0 :(得分:1)

  

“我们希望看到我们制作的网络电话的数量以及防火墙在我们将其移至云系统时可能产生的影响”

执行的SQL语句数量仅与网络流量量相关。比较select * from dualselect * from humongous_table的影响。

更好的方法可能是与您的网络管理员交谈,看看他们可以告诉您应用程序产生的流量。或者下载Wireshark并自己查看(提供您的安全团队很酷)。

答案 1 :(得分:0)

只是添加一些关于V $ SQL视图的信息:

V $ SQLAREA 具有最低的保留期,并在内存中显示当前的SQL,已解析并准备好执行。

V $ SQL 具有更好的保留期,并在查询执行后每5秒更新一次。

V $ SQLSTATS 具有最佳保留期,即使游标已从共享池中老化,也会保留SQL。

您不希望在繁忙的生产数据库上经常运行这些查询,因为它们可能会添加到共享池碎片。