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

Mengidentifikasi Pertentangan Urutan ASH di RAC

Dalam Bab 3 Penyetelan Kinerja Oracle RAC, saya menunjukkan bagaimana nilai CACHE yang tidak tepat untuk urutan dapat menyebabkan kinerja yang buruk di Oracle RAC. Saya juga menunjukkan cara menemukan pertentangan urutan saat melihat acara tunggu sesi.

Hari ini, saya bekerja dengan pengembang yang membuat urutan baru. Pengembang memiliki nilai CACHE 100, yang membuat saya awalnya nilainya terlalu rendah. Saya melihat pengaturan rendah ini selama tinjauan kode. Pengembang menganggap nilai CACHE baik-baik saja tetapi saya tidak yakin. Kami akan menguji ini di bawah beban untuk melihat apakah nilai CACHE perlu disesuaikan.

Sementara itu, saya berpikir "bagaimana jika saya melewatkan ini selama tinjauan kode?" Dan pertanyaan lanjutan, "bagaimana jika kami tidak melihat apa pun selama pengujian beban?" Saya ingin dapat kembali dan menentukan urutan mana, jika ada, yang akan menjadi kandidat untuk memiliki pengaturan CACHE yang tidak tepat. Saya pasti bisa melacak sesi dan menganalisis file jejak, tapi itu akan terlalu menyakitkan. Jadi saya merancang skrip yang dapat saya jalankan terhadap Riwayat Sesi Aktif untuk membantu menentukan urutan kandidat.

select sh.sql_id,to_char(st.sql_text),count(*)
from dba_hist_active_sess_history sh
join dba_hist_sqltext st
 on sh.sql_id=st.sql_id
where st.sql_text like '%NEXTVAL%'
 and (event='row cache lock' or event like 'gc current block %-way')
group by sh.sql_id,to_char(st.sql_text)
order by count(*) desc;

Ini bukan ilmu yang sempurna karena sifat pengumpulan ASH. Sesi yang mengalami pertikaian perlu ditangkap pada waktu yang tepat untuk berada di tabel DBA_HIST_ACTIVE_SESSION_HISTORY. Tetapi pernyataan SQL di atas memberi saya beberapa kandidat untuk dipertimbangkan. Tidak setiap urutan yang diakses dalam pernyataan SQL yang dikembalikan harus memiliki nilai CACHE yang disesuaikan. Analisis lebih lanjut akan diperlukan. Namun, ini memberi saya daftar yang perlu dipertimbangkan. Dan itu bisa membantu menjawab pertanyaan awal saya. Jika saya melewatkan pembuatan urutan selama peninjauan kode, semoga saya dapat menemukannya nanti jika urutannya menjadi masalah untuk kinerja aplikasi.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Apex 5.0 - Menampilkan gambar statis

  2. Cara menggunakan Fungsi Penggabungan di Oracle

  3. Menyalin baris dalam tabel yang sama tanpa harus mengetikkan 50+ nama kolom (sambil mengubah 2 kolom)

  4. Oracle PL/SQL Bulk Collect With Save Exceptions Contoh

  5. Format data Tabel SQL sebagai Tabel Teks