Untuk Database Oracle berikan informasi ini:
Jelaskan gejala masalah
Jelaskan perilaku yang menyebabkan masalah. Apakah perilaku kueri stabil atau masalah hanya terjadi kadang-kadang, dengan parameter tertentu atau acak sederhana. Bisakah Anda mereproduksi perilaku ini dalam IDE (mis. Pengembang SQL)?
Jelaskan lingkungan
Tentukan versi persis dari Oracle
select * from v$version
Jelaskan bagaimana Anda terhubung ke database:driver, ORM, bahasa pemrograman. Berikan nama dan/atau nomor versi.
Jelaskan kueri
Posting teks kueri. Coba sederhanakan - tunjukkan contoh minimal yang dapat direproduksi .
Contoh - kueri Anda yang bermasalah bergabung dengan 10 tabel. Periksa apakah Anda melihat gejala yang sama dalam kueri dengan 9 atau 8 gabungan. Mundur hingga Anda melihat masalah dan hanya tampilkan kueri yang dikurangi.
Ya, ini mahal, tetapi sangat meningkatkan kemungkinan Anda menerima dukungan! Semakin kecil kuerinya, semakin tinggi daya tariknya bagi para pendukung.
Jelaskan rencana eksekusi
Untuk mendapatkan rencana eksekusi, jalankan pernyataan ini (ganti teks kueri Anda)
EXPLAIN PLAN SET STATEMENT_ID = '<some_id>' into plan_table FOR
select * from .... -- your query here
;
Rencana eksekusi disimpan di PLAN_TABLE
, untuk melihatnya jalankan kueri ini
SELECT * FROM table(DBMS_XPLAN.DISPLAY('plan_table', '<some_id>','ALL'));
Tampilkan hasil lengkap (tidak hanya tabel dengan rencana eksekusi). Sangat penting mungkin bagian predikat dan catatan di bawah.
Contoh untuk select * from dual where dummy = :1;
Plan hash value: 272002086
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| DUAL | 1 | 2 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$1 / [email protected]$1
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("DUMMY"=:1)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
1 - "DUMMY"[VARCHAR2,1]
Jangan memotong dan menempelkan hasil grafis dari rencana penjelasan IDE Anda.
Apakah rencana eksekusi ini benar-benar dijalankan?
Sayangnya tidak selalu. Ada beberapa alasan yang dijelaskan rencana eksekusi mungkin berbeda dari yang sebenarnya.
Jika Anda ragu (terutama ketika Anda melihat paket yang bagus, tetapi kuerinya berjalan buruk), Anda dapat mengekstrak paket tersebut dari cache DB dengan memberikan SQL_ID
.
SELECT t.* FROM table(DBMS_XPLAN.DISPLAY_CURSOR('<SQL_ID>',null,'ALL')) t;
SQL_ID untuk kueri yang sedang berjalan (atau sedang berjalan segera dan masih di-cache) dapat ditemukan dengan kecocokan teks dan/atau pengguna database:
select sql_id, sql_fulltext from v$sql a where
lower(sql_text) like lower('%<some identifying part of the query text>%')
and parsing_schema_name = '<user running the query>';
Jika Anda memiliki lisensi AWR, Anda mungkin mendapatkan rencana eksekusi dari sana, bahkan untuk kueri yang berjalan dalam riwayat.
SELECT t.*
FROM table(DBMS_XPLAN.DISPLAY_AWR('10u2rj016s96k' )) t;
SQL_ID dapat ditemukan menggunakan
select sql_id, sql_text
from dba_hist_sqltext a
where lower(sql_text) like lower('%<some identifying part of the query text>%')
Jelaskan datanya
Tunjukkan DDL dari tabel dan indeks pada tabel tersebut.
Sebutkan jika statistik pengoptimal dikumpulkan baru-baru ini dan tunjukkan dbms_stats
yang digunakan mengumpulkan pernyataan.
Untuk tabel kritis, berikan informasi tentang ukuran segmen, nomor baris, partisi,...
Untuk kolom yang digunakan dalam akses atau gabungan memberikan informasi tentang jumlah nilai yang berbeda. Apakah nilai terdistribusi merata atau miring (misalnya sejumlah kecil nilai yang sering muncul dan sejumlah besar nilai langka). Apakah Anda mendefinisikan histogram?
Ada Lagi?
Tentu saja ini hanya dasar-dasarnya dan informasi lain mungkin masih diperlukan, seperti statistik sistem atau parameter pengoptimal. Tetapi sekali lagi coba berikan informasi minimal yang (Anda) dapat mengidentifikasi masalahnya. Kirimkan informasi tambahan berdasarkan permintaan.
Semoga berhasil!