Oracle
數據庫上的讀、寫和讀寫事務數
我們正在使用 Oracle 19c 數據庫。我想知道下面的事情。請幫助我獲取以下詳細資訊。
1)每天在我的數據庫中執行多少事務?
2)在特定表上執行了多少事務?
3)在一張表上執行了多少個讀/寫/讀寫事務?
4)是否呼叫了特定的包?
- 表是直接訪問還是查看還是通過封裝過程或函式訪問?
1)每天在我的數據庫中執行多少事務?
- 如果您有性能調整包,您可以從 AWR 獲得它:例如最近 24 小時:
with awr_stats as ( select snap_id ,sn.begin_interval_time ,sn.end_interval_time ,st.stat_id ,st.stat_name ,st.value-lag(st.value) over(partition by stat_id order by snap_id) as delta from dba_hist_snapshot sn join dba_hist_sysstat st using (snap_id,dbid,instance_number) where st.stat_name in ( 'user commits' ,'transaction rollbacks' ) and end_interval_time >= sysdate - interval '1' day ) select * from awr_stats where delta is not null order by snap_id,stat_name ;
2)在特定表上執行了多少事務?
3)在一張表上執行了多少個讀/寫/讀寫事務?
2-3。預設情況下沒有此類統計資訊。如果你真的需要,你需要學習如何使用logminer。但也許有一些細分統計數據對您來說可能很有趣。您可以像這樣檢查它們:
with segs as ( select sn.begin_interval_time ,sn.end_interval_time ,o.owner ,o.object_type ,o.object_name ,o.data_object_id ,ss.* from dba_hist_snapshot sn join dba_hist_seg_stat ss on sn.snap_id = ss.snap_id and sn.dbid = ss.DBID and sn.instance_number = ss.instance_number join dba_objects o on o.data_object_id=ss.dataobj# -- and o.object_id=ss.obj# where 1=1 -- and end_interval_time > systimestamp - interval '10' day and owner!='SYS' ) select * from segs order by snap_id,obj#,dataobj# /
4)是否呼叫了特定的包?
- 聽起來有點奇怪。不知道你到底想得到什麼以及為什麼……你可以從 (g)v$db_object_cache 中獲得一些關於載入對象的統計資訊,比如’loads’、‘pins’、’executions’:
select * from v$db_object_cache c where 1=1 and namespace = 'TABLE/PROCEDURE' and type = 'PACKAGE' /
但是我仍然不確定您到底需要什麼以及為什麼…
- 表是直接訪問還是查看還是通過封裝過程或函式訪問?
同樣,您沒有提供足夠的詳細資訊…可能您需要對象依賴項(dba/all/user_dependencies)或 PL/SCOPE:https ://docs.oracle.com/database/121/ADFNS/adfns_plscope.htm
- 不確定這一點,因為“事務”可能意味著很多事情,具體取決於上下文:應用程序級別、系統級別、送出數或受影響的行數(通常不一樣)、生成的重做日誌量(可以說是 DBA 最實用的措施)等。
2-3。在表級別,這最好通過審核來確定,您必須自己配置。這不是“開箱即用”配置的。
4-5。這最好通過您自己編寫到程式碼中的檢測來確定。預設情況下,Oracle 不會跟踪包的執行,審計只會跟踪包級別的執行,而不是包中的單個過程或函式級別。