Oracle

數據庫上的讀、寫和讀寫事務數

  • September 12, 2022

我們正在使用 Oracle 19c 數據庫。我想知道下面的事情。請幫助我獲取以下詳細資訊。

1)每天在我的數據庫中執行多少事務?

2)在特定表上執行了多少事務?

3)在一張表上執行了多少個讀/寫/讀寫事務?

4)是否呼叫了特定的包?

  1. 表是直接訪問還是查看還是通過封裝過程或函式訪問?

1)每天在我的數據庫中執行多少事務?

  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)是否呼叫了特定的包?

  1. 聽起來有點奇怪。不知道你到底想得到什麼以及為什麼……你可以從 (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'
/

但是我仍然不確定您到底需要什麼以及為什麼…

  1. 表是直接訪問還是查看還是通過封裝過程或函式訪問?

同樣,您沒有提供足夠的詳細資訊…可能您需要對象依賴項(dba/all/user_dependencies)或 PL/SCOPE:https ://docs.oracle.com/database/121/ADFNS/adfns_plscope.htm

  1. 不確定這一點,因為“事務”可能意味著很多事情,具體取決於上下文:應用程序級別、系統級別、送出數或受影響的行數(通常不一樣)、生成的重做日誌量(可以說是 DBA 最實用的措施)等。

2-3。在表級別,這最好通過審核來確定,您必須自己配置。這不是“開箱即用”配置的。

4-5。這最好通過您自己編寫到程式碼中的檢測來確定。預設情況下,Oracle 不會跟踪包的執行,審計只會跟踪包級別的執行,而不是包中的單個過程或函式級別。

引用自:https://dba.stackexchange.com/questions/316768