Bisakah seseorang menjelaskan sedikit tentang menjelaskan rencana, dan bagaimana seseorang mendapatkan rencana menjelaskan untuk kueri. Juga, jika ada skrip sql yang dapat digunakan sebagai utilitas untuk ini, itu akan bagus.
Bisakah seseorang menjelaskan sedikit tentang menjelaskan rencana, dan bagaimana seseorang mendapatkan rencana menjelaskan untuk kueri. Juga, jika ada skrip sql yang dapat digunakan sebagai utilitas untuk ini, itu akan bagus.
Jawaban:
Anda dapat menggunakan paket DBMS_XPLAN :
SQL> explain plan for select * from dual;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 |
| 1 | TABLE ACCESS FULL | DUAL | 1 | 2 | 2 |
--------------------------------------------------------------------
Note: cpu costing is off
Pernyataan EXPLAIN PLAN menampilkan rencana eksekusi yang dipilih oleh optimizer untuk pernyataan SELECT, UPDATE, INSERT, dan DELETE. Rencana eksekusi pernyataan adalah urutan operasi yang dilakukan database untuk menjalankan pernyataan.
EXPLAIN PLAN FOR ...
Ganti ... dengan Pernyataan SQL Anda. Setelah menjalankan ini jalankan yang berikut untuk melihat paket:
SELECT * FROM table(dbms_xplan.display);
Untuk informasi lebih lanjut, lihat bagian Ikhtisar atau Penggunaan di Oracle 11g Performance Tuning Guide.
Ini adalah pertanyaan yang sangat umum, jadi saya memutuskan untuk mengubah jawaban ini menjadi sebuah artikel .
Perkiraan rencana eksekusi dihasilkan oleh Pengoptimal tanpa menjalankan kueri SQL. Anda dapat membuat estimasi rencana eksekusi dari klien SQL apa pun menggunakan EXPLAIN PLAN FOR FOR atau Anda dapat menggunakan Oracle SQL Developer untuk tugas ini.
Saat menggunakan Oracle, jika Anda menambahkan EXPLAIN PLAN FOR
perintah ke kueri SQL yang diberikan, database akan menyimpan rencana eksekusi yang diperkirakan di terkait PLAN_TABLE
:
EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Untuk melihat perkiraan rencana eksekusi, Anda perlu menggunakan DBMS_XPLAN.DISPLAY
, seperti yang diilustrasikan dalam contoh berikut:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))
Opsi pemformatan ALL + OUTLINE memungkinkan Anda untuk mendapatkan lebih detail tentang perkiraan rencana eksekusi daripada menggunakan opsi pemformatan default.
Jika Anda telah menginstal SQL Developer, Anda dapat dengan mudah mendapatkan estimasi rencana eksekusi untuk setiap query SQL tanpa harus menambahkan terlebih dahulu perintah EXPLAIN PLAN FOR:
Paket eksekusi SQL aktual dihasilkan oleh Pengoptimal saat menjalankan kueri SQL. Jadi, tidak seperti perkiraan Rencana Eksekusi, Anda perlu mengeksekusi query SQL untuk mendapatkan rencana eksekusi yang sebenarnya.
Rencana aktual seharusnya tidak berbeda secara signifikan dari yang diperkirakan, selama statistik tabel telah dikumpulkan dengan benar oleh basis data relasional yang mendasarinya.
Untuk menginstruksikan Oracle untuk menyimpan rencana eksekusi aktual untuk kueri SQL yang diberikan, Anda dapat menggunakan GATHER_PLAN_STATISTICS
petunjuk kueri:
SELECT /*+ GATHER_PLAN_STATISTICS */
p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Untuk memvisualisasikan rencana eksekusi aktual, Anda dapat menggunakan DBMS_XPLAN.DISPLAY_CURSOR
:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))
Jika Anda ingin mendapatkan paket eksekusi untuk semua pertanyaan yang dihasilkan dalam sesi yang diberikan, Anda dapat mengatur STATISTICS_LEVEL
konfigurasi sesi untuk SEMUA:
ALTER SESSION SET STATISTICS_LEVEL='ALL'
Ini akan memiliki efek yang sama dengan mengatur GATHER_PLAN_STATISTICS
petunjuk kueri pada setiap permintaan eksekusi. Jadi, seperti halnya dengan GATHER_PLAN_STATISTICS
petunjuk kueri, Anda dapat menggunakan DBMS_XPLAN.DISPLAY_CURSOR
untuk melihat rencana eksekusi yang sebenarnya.
Anda harus mereset
STATISTICS_LEVEL
pengaturan ke mode default setelah Anda selesai mengumpulkan rencana eksekusi yang Anda minati. Ini sangat penting, terutama jika Anda menggunakan pooling koneksi, dan koneksi database bisa digunakan kembali.ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'