Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách tìm Lịch sử chờ đợi của phiên Oracle

Trong bài đăng này, chúng ta sẽ xem xét các truy vấn khác nhau để truy xuất lịch sử chờ của phiên Oracle.

Lịch sử các sự kiện chờ trong một phiên cụ thể từ đầu có thể được tìm thấy bằng cách sử dụng truy vấn bên dưới

đặt dòng 120 trimspool trên
đầu sự kiện col “Đã chờ” định dạng a30
col total_waits head “Total | Waits” định dạng 999.999
col tw_ms head “Waited | for (ms)” định dạng 999.999.99
col aw_ms head định dạng “Average | Wait (ms)” 999.999.99
col mw_ms head “Max | Wait (ms)” format 999.999.99
select event, total_waits, time_waited 10 tw_ms,
average_wait
10 aw_ms, max_wait * 10 mw_ms
từ v $ session_event
trong đó sid =&1
/

Giả sử chúng tôi muốn xem lịch sử sự kiện chờ của phiên trong khoảng thời gian cụ thể để chỉ nhận được sự kiện chờ trong khoảng thời gian đó

Sau đó, chúng tôi có thể sử dụng truy vấn ASH bên dưới để trích xuất dữ liệu

SQL> SELECT sự kiện, đếm ()
FROM dba_hist_active_sess_history a
WHERE a.sample_time GIỮA đến ngày_date ('12-10-2016 11:49:00 ′,' DD-MON-YYYY HH24:MI:SS ') AND
to_date (' 12 -OCT-2016 15:04:00 ′, 'DD-MON-YYYY HH24:MI:SS') và session_id =1853 và SESSION_SERIAL # =19 nhóm theo sự kiện;
ĐẾM SỰ KIỆN (
)

đồng bộ tệp nhật ký 88

SQL> SELECT mô-đun, đếm ()
2 FROM dba_hist_active_sess_history a
3 WHERE a.sample_time GIỮA đến ngày_date ('12-10-2016 11:49:00 ′,' DD-MON-YYYY HH24:MI:SS ') VÀ
4 tới_date (' 12-THÁNG-2016 15:04:00 ′, 'DD-MON-YYYY HH24:MI:SS') và session_id =1853 và SESSION_SERIAL # =19 và event ='log file sync' nhóm theo mô-đun;
MODULE COUNT (
)

e:FND:cp:FNDICM 88

Giả sử chúng tôi muốn biết lịch sử sự kiện chờ từ một giờ qua, thì có thể sử dụng truy vấn bên dưới

định dạng cột sample_time a30
chọn sample_time, session_state, event, sql_id
từ v $ active_session_history
trong đó session_id =&1 và sample_time> SYSDATE - 30 / (24 * 60)
đặt hàng trước 1;

Trường hợp sử dụng quan trọng cho kỹ thuật.

Giả sử chúng ta muốn biết phiên cụ thể đang chờ đợi điều gì trong khoảng thời gian nhất định và điều gì đã chặn nó

Chúng tôi có thể sử dụng truy vấn bên dưới để nhận sự kiện chờ và những thứ quan trọng khác

định dạng sự kiện col a30
định dạng col sample_time a25
chọn session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH #
từ v $ active_session_history
trong đó session_id =19
và sample_time trong khoảng thời gian từ
đến_date ('9-DEC-16 01.25.00 PM', 'dd-MON-yy hh:mi:ss PM')
đến
to_date ( '9-DEC-16 02.25.00 PM', 'dd-MON-yy hh:mi:ss PM')
đặt hàng theo sample_time;

Bây giờ nếu sự kiện là enq:TX - row lock ganh đua, Chúng tôi biết rằng một số phiên nhất định sẽ chặn nó.

chọn sample_time, session_state, blocks_session, current_obj #, current_file #, current_block #, current_row #
từ v $ active_session_history
trong đó sample_time từ
đến_date ('9-DEC-16 01.25.00 CH' , 'dd-MON-yy hh:mi:ss PM')

to_date ('9-DEC-16 02.25.00 PM', 'dd-MON-yy hh:mi:ss PM ')
and session_id =19
and event =' enq:TX - row lock contention '
order by sample_time;

Blocking_session sẽ hiển thị id phiên mà phiên đó đã bị chặn. Chúng tôi cũng có thể trích xuất câu lệnh sql bằng cách sử dụng sql_id có được ở trên cho phiên bị chặn.

Các truy vấn tương tự có thể được sử dụng để xác định thông tin cho phiên chặn và sau đó thực hiện các hành động khắc phục phù hợp

Thông tin quan trọng

Bạn phải thấy rằng chúng tôi đã sử dụng lịch sử phiên hoạt động thường xuyên và lưu trữ lịch sử phiên hoạt động cho các truy vấn này

Lịch sử phiên hoạt động là gì

Lịch sử phiên hoạt động thăm dò cơ sở dữ liệu để xác định các phiên hoạt động và đưa thông tin liên quan về từng phiên hoạt động — chẳng hạn như ID người dùng, trạng thái, máy được kết nối từ đó và SQL mà nó đang thực thi — vào một khu vực đặc biệt trong toàn cầu của hệ thống vùng (SGA) của cá thể cơ sở dữ liệu được gọi là vùng đệm ASH

Lưu trữ lịch sử phiên hoạt động

Lịch sử phiên hoạt động thu thập thông tin về các phiên hoạt động từ phiên bản cơ sở dữ liệu mỗi giây. Tùy thuộc vào hoạt động của cơ sở dữ liệu, điều đó sẽ dẫn đến rất nhiều dữ liệu được thu thập bên trong bộ đệm ASH, nhưng vì bộ đệm ASH là một cấu trúc cư trú bộ nhớ nên nó chỉ có một lượng không gian hữu hạn. Ngoài ra, khi phiên bản gặp sự cố, bộ nhớ của phiên bản đó sẽ biến mất cùng với nó. Do đó, Cơ sở dữ liệu Oracle lưu trữ thông tin từ bộ đệm ASH vào một bảng cơ sở dữ liệu để làm cho nó trở nên bền bỉ. Dữ liệu bảng đã lưu trữ này hiển thị trong chế độ xem có tên DBA_HIST_ACTIVE_SESS_HISTORY

Các bài viết có liên quan

Oracle ASH (Lịch sử phiên hoạt động) Các truy vấn hữu ích

Cách tìm sid nào đang quét toàn bộ bảng

Cách tìm chi tiết phiên trong cơ sở dữ liệu Oracle

Thời gian DB và Phiên hoạt động trung bình, Phiên hoạt động trong oracle là gì

cách tìm phiên tạo nhiều lần làm lại


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để gọi một thủ tục được lưu trữ Oracle từ một tập lệnh VBA trong Excel?

  2. GWFG trong Oracle RAC

  3. Cách tốt nhất để chạy các truy vấn Oracle định kỳ

  4. Làm thế nào để trả về một mảng từ Java sang PL / SQL?

  5. Hàm TAN () trong Oracle