Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana menemukan sejarah waitevent dari sesi Oracle

Dalam posting ini, kita akan melihat kueri yang berbeda untuk mengambil riwayat acara tunggu dari sesi Oracle.

Riwayat acara menunggu di sesi tertentu dari awal dapat ditemukan menggunakan kueri di bawah

atur baris 120 trimspool pada
col event head format “Waited for” a30
col total_waits head “Total|Menunggu” format 999,999
col tw_ms head format “Waited|for (ms)” 999,999,99
col aw_ms head “Rata-rata|Wait (ms)” format 999,999,99
col mw_ms head “Max|Wait (ms)” format 999,999,99
pilih event, total_waits, time_waited10 tw_ms,
tunggu_rata-rata
10 aw_ms, max_wait*10 mw_ms
dari v$session_event
di mana sid =&1
/

Misalkan kita ingin melihat riwayat acara tunggu dari sesi dalam periode tertentu untuk mendapatkan acara tunggu di periode itu saja

Kemudian kita dapat menggunakan query ASH di bawah ini untuk mengekstrak data

SQL> PILIH acara,hitung()
FROM dba_hist_active_sess_history a
WHERE a.sample_time BETWEEN to_date('12-OCT-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') dan session_id=1853 dan SESSION_SERIAL#=19 grup menurut acara;
JUMLAH ACARA(
)

sinkronisasi file log 88

SQL> SELECT modul,hitung()
2 DARI dba_hist_active_sess_history a
3 WHERE a.sample_time ANTARA to_date('12-OCT-2016 11:49:00′,'DD-MON-YYYY HH24:MI:SS') AND
4 to_date('12-OCT-2016 15:04:00′,'DD-MON-YYYY HH24:MI:SS') dan session_id=1853 dan SESSION_SERIAL#=19 dan acara ='log file sync' grup demi modul;
MODULE COUNT(
)

e:FND:cp:FNDICM 88

Misalkan kita ingin mengetahui riwayat acara tunggu dari satu jam terakhir, maka kueri di bawah ini dapat digunakan

kolom sample_time format a30
pilih sample_time, session_state, event, sql_id
dari v$active_session_history
di mana session_id =&1 dan sample_time> SYSDATE – 30/(24*60)
urutkan berdasarkan 1;

Kasus penggunaan penting untuk teknik ini.

Misalkan kita ingin tahu apa yang menunggu sesi tertentu selama periode tertentu dan apa yang memblokirnya

Kita dapat menggunakan query di bawah ini untuk mendapatkan acara tunggu dan hal-hal penting lainnya

col format acara a30
col format sample_time a25
pilih session_id, sample_time, session_state, event, wait_time, time_waited, sql_id, sql_child_number CH#
dari v$active_session_history
di mana session_id =19
dan sample_time antara
to_date('9-DEC-16 01.25.00 PM','dd-MON-yy jj:mi:ss PM')
dan
to_date( '9-DEC-16 02.25.00 PM','dd-MON-yy hh:mi:ss PM')
pesan berdasarkan sample_time;

Sekarang jika acaranya adalah enq:TX – row lock contention, Kami tahu bahwa sesi tertentu akan memblokirnya.

pilih sample_time, session_state, blocking_session, current_obj#, current_file#, current_block#, current_row#
dari v$active_session_history
di mana sample_time antara
to_date('9-DEC-16 01.25.00 PM' ,'dd-SEN-yy jj:mi:ss PM')
dan
to_date('9-DEC-16 02.25.00 PM','dd-SEN-yy jj:mi:ss PM ')
and session_id =19
and event ='enq:TX – row lock contention'
urutkan berdasarkan sample_time;

Blocking_session akan menunjukkan id sesi yang sesi diblokir. Kita dapat mengekstrak pernyataan sql juga menggunakan sql_id yang diperoleh di atas untuk sesi yang diblokir.

Kueri serupa dapat digunakan untuk mengidentifikasi informasi untuk sesi pemblokiran dan kemudian mengambil tindakan korektif yang sesuai

Informasi penting

Anda pasti telah melihat bahwa kami sering menggunakan riwayat sesi aktif dan arsip riwayat sesi aktif untuk kueri ini

Apa itu Riwayat Sesi Aktif

Riwayat Sesi Aktif melakukan polling database untuk mengidentifikasi sesi aktif dan membuang informasi yang relevan tentang masing-masing sesi—seperti ID pengguna, status, mesin yang terhubung dengannya, dan SQL yang dijalankannya—ke dalam area khusus di sistem global area (SGA) dari instance database yang disebut buffer ASH

Arsip Riwayat Sesi Aktif

Riwayat Sesi Aktif mengumpulkan informasi tentang sesi aktif dari instans database setiap detik. Bergantung pada aktivitas basis data, itu akan menghasilkan banyak data yang dikumpulkan di dalam buffer ASH, tetapi karena buffer ASH adalah struktur memori-residen, ia hanya memiliki jumlah ruang yang terbatas. Selain itu, saat instance turun, memori instance ikut hilang. Oleh karena itu, Oracle Database mengarsipkan informasi dari buffer ASH ke tabel database untuk membuatnya persisten. Data tabel yang diarsipkan ini terlihat dalam tampilan yang disebut DBA_HIST_ACTIVE_SESS_HISTORY

Artikel Terkait

Oracle ASH(Active Session History) Kueri yang berguna

Bagaimana menemukan pihak mana yang melakukan pemindaian tabel penuh

Cara menemukan detail sesi di database Oracle

Apa itu waktu DB dan sesi Aktif Rata-rata, Sesi aktif di oracle

cara menemukan sesi yang menghasilkan banyak pengulangan


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pisahkan varchar menjadi kolom terpisah di Oracle

  2. Bagaimana cara menghasilkan seluruh DDL dari skema Oracle (skrip)?

  3. Fungsi JSON_ARRAY() di Oracle

  4. Oracle:Permintaan SQL yang mengembalikan baris hanya dengan nilai numerik

  5. Contoh Klausa Pemicu Oracle WHEN