[Script] Tìm ra nguyên nhân khiến hệ thống CSDL oracle switchlog nhiều
19:54ORAPLUS xin chào các bạn!
Trong bài này mình sẽ hướng dẫn các bạn cách "Tìm ra object nào khiến hệ thống switchlog nhiều" trong một khoảng thời gian biết trước.
Trong quá trình chúng ta vận hành database, sẽ không tránh khỏi những câu hỏi của sếp như:
- Tìm cho anh xem thủ phạm khiến switchlog thời điểm đó là gì?
- Câu lệnh nào khiến hệ thống switchlog nhiều?
- V.v..
Để trả lời cho câu hỏi này, chúng ta cần có chút võ (ở đây là script monitor) để biết được thủ phạm là object nào. Chúng ta thực hiện câu lệnh sau (mình đang lấy điệu kiện >= sysdate -1):
SELECT TO_CHAR (begin_interval_time, 'YY-MM-DD HH24') snap_time,
dhso.object_name,
SUM (db_block_changes_delta) BLOCK_CHANGED
FROM dba_hist_seg_stat dhss,
dba_hist_seg_stat_obj dhso,
dba_hist_snapshot dhs
WHERE dhs.snap_id = dhss.snap_id
AND dhs.instance_number = dhss.instance_number
AND dhss.obj# = dhso.obj#
AND dhss.dataobj# = dhso.dataobj#
AND begin_interval_time >= SYSDATE - 1
GROUP BY TO_CHAR (begin_interval_time, 'YY-MM-DD HH24'), dhso.object_name
HAVING SUM (db_block_changes_delta) > 0
ORDER BY SUM (db_block_changes_delta) DESC;
/
SELECT TO_CHAR (begin_interval_time, 'YY-MM-DD HH24') snap_time,
dhso.object_name,
SUM (db_block_changes_delta) BLOCK_CHANGED
FROM dba_hist_seg_stat dhss,
dba_hist_seg_stat_obj dhso,
dba_hist_snapshot dhs
WHERE dhs.snap_id = dhss.snap_id
AND dhs.instance_number = dhss.instance_number
AND dhss.obj# = dhso.obj#
AND dhss.dataobj# = dhso.dataobj#
AND begin_interval_time >= SYSDATE - 1
GROUP BY TO_CHAR (begin_interval_time, 'YY-MM-DD HH24'), dhso.object_name
HAVING SUM (db_block_changes_delta) > 0
ORDER BY SUM (db_block_changes_delta) DESC;
/
Nếu có khoảng thời gian cụ thể các bạn có thể thay bằng đoạn sau (mình lấy từ 08h ngày 12/02/15 đến 11h cùng ngày):
SELECT TO_CHAR (begin_interval_time, 'YY-MM-DD HH24') snap_time,
dhso.object_name,
SUM (db_block_changes_delta) BLOCK_CHANGED
FROM dba_hist_seg_stat dhss,
dba_hist_seg_stat_obj dhso,
dba_hist_snapshot dhs
WHERE dhs.snap_id = dhss.snap_id
AND dhs.instance_number = dhss.instance_number
AND dhss.obj# = dhso.obj#
AND dhss.dataobj# = dhso.dataobj#
AND begin_interval_time BETWEEN TO_DATE ('15-02-12 08:00', 'YY-MM-DD HH24:MI') AND TO_DATE ('15-02-13 11:00', 'YY-MM-DD HH24:MI')
GROUP BY TO_CHAR (begin_interval_time, 'YY-MM-DD HH24'), dhso.object_name
HAVING SUM (db_block_changes_delta) > 0
ORDER BY SUM (db_block_changes_delta) DESC;
/
Để xem thêm nhiều script về monitor cũng như quản trị CSDL Oracle, các bạn có thể nhấn vào ĐÂY.
Trên đó là một vài quan điểm cá nhân của mình, mọi ý kiến đóng góp vui lòng gửi về địa chỉ oraplus.net@gmail.com
SELECT TO_CHAR (begin_interval_time, 'YY-MM-DD HH24') snap_time,
dhso.object_name,
SUM (db_block_changes_delta) BLOCK_CHANGED
FROM dba_hist_seg_stat dhss,
dba_hist_seg_stat_obj dhso,
dba_hist_snapshot dhs
WHERE dhs.snap_id = dhss.snap_id
AND dhs.instance_number = dhss.instance_number
AND dhss.obj# = dhso.obj#
AND dhss.dataobj# = dhso.dataobj#
AND begin_interval_time BETWEEN TO_DATE ('15-02-12 08:00', 'YY-MM-DD HH24:MI') AND TO_DATE ('15-02-13 11:00', 'YY-MM-DD HH24:MI')
GROUP BY TO_CHAR (begin_interval_time, 'YY-MM-DD HH24'), dhso.object_name
HAVING SUM (db_block_changes_delta) > 0
ORDER BY SUM (db_block_changes_delta) DESC;
/
Để xem thêm nhiều script về monitor cũng như quản trị CSDL Oracle, các bạn có thể nhấn vào ĐÂY.
Trên đó là một vài quan điểm cá nhân của mình, mọi ý kiến đóng góp vui lòng gửi về địa chỉ oraplus.net@gmail.com
---ORAPLUS team---
2 nhận xét
Đúng cái mình đang cần. Cam ơn ad nhé, nhưng mà trang ít bài qua :)
Trả lờiXóaSite đang trong quá trình hoàn thiện, rất mong nhận được những ý kiến đóng góp từ bạn :)
XóaThanks!