Bagaimana saya bisa menemukan kueri SQL yang berkinerja buruk di Oracle?
Oracle menyimpan statistik pada area SQL bersama dan berisi satu baris per string SQL (v$sqlarea). Tapi bagaimana kita bisa mengidentifikasi mana yang kinerjanya buruk?
Saya menemukan pernyataan SQL ini menjadi tempat yang berguna untuk memulai (maaf saya tidak dapat mengaitkan ini dengan penulis aslinya; saya menemukannya di suatu tempat di internet):
SELECT * FROM
(SELECT
sql_fulltext,
sql_id,
elapsed_time,
child_number,
disk_reads,
executions,
first_load_time,
last_load_time
FROM v$sql
ORDER BY elapsed_time DESC)
WHERE ROWNUM < 10
/
Ini menemukan pernyataan SQL teratas yang saat ini disimpan dalam cache SQL yang diurutkan berdasarkan waktu yang telah berlalu. Pernyataan akan hilang dari cache dari waktu ke waktu, jadi mungkin tidak ada gunanya mencoba mendiagnosis pekerjaan batch semalam ketika Anda masuk kerja pada tengah hari.
Anda juga dapat mencoba mengurutkan berdasarkan disk_reads dan eksekusi. Eksekusi berguna karena beberapa aplikasi yang buruk mengirim pernyataan SQL yang sama terlalu sering. SQL ini mengasumsikan Anda menggunakan variabel bind dengan benar.
Kemudian, Anda dapat mengambil sql_id
dan child_number
dari sebuah pernyataan dan memasukkannya ke dalam bayi ini: -
SELECT * FROM table(DBMS_XPLAN.DISPLAY_CURSOR('&sql_id', &child));
Ini menunjukkan rencana aktual dari cache SQL dan teks lengkap dari SQL.
Ada sejumlah cara yang mungkin untuk melakukan ini, tetapi cari di google untuk tkprof
Tidak ada GUI.... ini sepenuhnya command line dan mungkin sedikit mengintimidasi bagi pemula Oracle; tetapi ini sangat kuat.
Tautan ini sepertinya awal yang baik:
Saat mencari, saya mendapatkan kueri berikut yang melakukan pekerjaan dengan satu asumsi (waktu eksekusi kueri >6 detik)
SELECT nama pengguna, sql_text, sofar, totalkerja, unit
FROM v$sql,v$session_longops
WHERE sql_address = address AND sql_hash_value = hash_value
ORDER BY alamat, nilai_hash, nomor_anak;
Saya pikir query di atas akan mencantumkan detail untuk pengguna saat ini.
Komentar dipersilahkan!!!