記錄一個簡陋的根據statspack查詢哪段時間事務量最大的指令碼
生產系統上的STATSPACK是15分鐘一次的,但是一天這麼多次都發郵件出來也沒很大必要,因此每天凌晨把前一整天的報告發出來,有時候發現了TOP 5的等待事件中出現了以前沒出現過的異常,也不大好找這個等待集中發生在哪裡。
因此,先從事務量下手,寫個指令碼來統計哪個時間段內的事務量最大,當然,這應該是個系列,回頭碰見問題了再慢慢寫其他統計量最大的指令碼。
[@more@]其實這些指令碼都可以從statspack的spreport的指令碼中稍微整理得到,記錄在次以方便以後使用:
DECLARE
--可以找到輸出的事務量最大的對應的那個statspack的endid,然後
--在找到前一個statspack的id,然後拿這兩個id之間的statspack出來
--進行深入詳細的分析
CURSOR C IS
SELECT SNAP_ID, SNAP_TIME
FROM STATS$SNAPSHOT
WHERE SNAP_TIME >= SYSDATE - 1 --要分析的時間段
AND INSTANCE_NUMBER = (SELECT INSTANCE_NUMBER FROM V$INSTANCE)
ORDER BY SNAP_ID;
V_TRAN NUMBER(20) := 0; --當前的statspack的id
V_TRAN_BEFORE NUMBER(20) := 0; --上一個statspack的id
VT DATE;
VT_BEFORE DATE; --上一次statspack產生的時間
V_OUT NUMBER(5, 2);
V_ID_BEFORE NUMBER(20) := 0; --記錄上一個statspack的id
BEGIN
FOR R IN C LOOP
V_TRAN_BEFORE := V_TRAN;
VT_BEFORE := VT;
--下面計算兩個statspack之間的commit和rollback的總事務量大小
SELECT SUM(VALUE)
INTO V_TRAN
FROM STATS$SYSSTAT
WHERE SNAP_ID = R.SNAP_ID
AND DBID = (SELECT DBID FROM V$DATABASE)
AND INSTANCE_NUMBER = (SELECT INSTANCE_NUMBER FROM V$INSTANCE)
AND (NAME = 'user commits' OR NAME = 'user rollbacks');
VT := R.SNAP_TIME;
--statspack間的事務量差/兩次statspack經過的時間,得到每秒的事務量大小
IF VT_BEFORE IS NOT NULL THEN
--判斷,第一個statspack的id不做計算
V_OUT := (V_TRAN - V_TRAN_BEFORE) / ((VT - VT_BEFORE) * 24 * 60 * 60);
IF V_OUT >= 4 THEN
--只輸出每秒事務量大於4的,返回statspack的endid和它和前一個statspack
--之間的事務量大小
DBMS_OUTPUT.PUT_LINE('sp : ' || V_ID_BEFORE || '-' || R.SNAP_ID || ' (' ||
V_OUT || ')');
END IF;
END IF;
V_ID_BEFORE := R.SNAP_ID;
END LOOP;
END;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25016/viewspace-905524/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個改進後的根據STATSPACK來查詢哪段時間內的事務量最大的指令碼指令碼
- vue+element-ui根據時間查詢VueUI
- sql根據多個欄位查詢重複記錄SQL
- 根據日期來查詢mysql的binlog日誌的指令碼MySql指令碼
- 總結Oracle根據時間查詢的一些常見情況Oracle
- 根據時間範圍呼叫gitLab介面查詢Gitlab
- 指定快照時間內根據等待類查詢消耗較高的sqlSQL
- js根據不同的時間段輸出不同的語句JS
- JPA時間段查詢
- MySQL查詢時間段MySql
- SQL時間段查詢SQL
- mysql like查詢 - 根據多個條件的模糊匹配查詢MySql
- windows根據程式號查詢程式目錄Windows
- 查詢一個事務程式碼所使用的BADI
- 根據事務程式碼找User exit
- 簡單記錄幾個有用的sql查詢SQL
- [MySQL] - 聯表查詢,查詢一個不在另一個表的記錄MySql
- 基於Geomesa服務查詢軌跡資料無法根據空間和時間範圍進行查詢的問題解決辦法
- 根據Alert日誌查詢資料庫啟動、關閉時間資料庫
- 記錄一個防止DDL的指令碼指令碼
- MySQL自定義函式 根據一級部門查詢所有子部門 記錄貼MySql函式
- 查詢某時間段的統計資料
- MapReduce實戰 – 根據文章記錄獲取時段內發帖頻率
- MapReduce實戰 - 根據文章記錄獲取時段內發帖頻率
- python 根據時間戳建立目錄操作Python時間戳
- 根據表查詢索引資訊索引
- 根據父表查詢子表
- 根據PID查詢 sqlSQL
- js根據時間排序JS排序
- List根據時間排序排序
- 超簡單的 Python 根據使用者ip查詢位置Python
- 查詢前100個含有根阻塞程式的Hang Chain程式指令碼AI指令碼
- 查詢一個表插入資料的時間,按BLOCK時間BloC
- 自動記錄MySQL慢查詢快照指令碼MySql指令碼
- 有關Undo表空間與回滾段的一些查詢語句記錄
- 如何實現模糊查詢時間段
- 根據Tcode查詢Menu Path的Tcode
- 微博根據手機號查詢