2017-05-31 86 views
0

在我们基于Oracle的产品数据库上,我想查看被触发的查询数量。Oracle的查询执行计数

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

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数据库上进行的调用次数吗?从所有应用程序登录目前不是一个可行的选择。

谢谢!

+0

您是否在使用企业数据库?你有AWR吗? – alexgibbs

+0

我们正在使用企业数据库,我们有AWR。 – instanceOfObject

+2

感谢instanceOfObject。很高兴听到。我想知道AWR视图是否可能达到您的目标 - 例如,'DBA_HIST_SQLSTAT'包含许多关于SQL工作负载的数据(例如'EXECUTIONS_DELTA'),最近和累积的基础上,每个SQL语句每个模式。负载,cpu等在那里,可以'总结'等,并绑定到'parsing_schema_name'。通过选择不同的'DBA_HIST_SNAPSHOT',可以在一天中的不同时间查看工作负载。我想知道这是否是您要查找的数据? – alexgibbs

回答

0

我想补充的V $ SQL视图的一些信息:

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

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

V $ SQLSTATS具有最好的保留,并且即使在游标超出共享池之后仍保留SQL。

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

1

“我们希望看到的网络调用我们做和数量的影响,防火墙可以使,如果我们将其移动到云系统”

执行的SQL语句的数量只是一带而过相关网络流量。比较select * from dualselect * from humongous_table的影响。

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