Pengantar Penyetelan Sql
- Pernyataan SQL ditulis untuk mengambil /mengambil data dari database. Kami ingin pernyataan sql kami berjalan cepat (penyetelan sql) dan memberikan hasilnya dalam hitungan detik.
- Sql dengan desain yang buruk dapat memperlambat seluruh operasi database dan menghentikan seluruh operasi. Jauh lebih sulit untuk menulis SQL yang efisien daripada menulis SQL yang benar secara fungsional. penyetelan kinerja sql dapat secara signifikan meningkatkan kesehatan dan kinerja sistem.
- Kunci untuk menyetel SQL adalah meminimalkan data yang diaksesnya untuk memberikan hasil. Kami dapat meminimalkan data yang diaksesnya untuk memberikan hasil melalui jalur pencarian yang optimal.
Contoh sederhananya adalah
select * from dept where emp=10
- Sekarang kueri ini harus mencari seluruh dept tabel untuk mengetahui data di mana emp=10. Jadi harus mengakses tabel lengkap
- Sekarang jika kita membuat indeks ke kolom emp, maka cukup mengakses indeks dan mendapatkan hasilnya. Jadi ini dia mengakses lebih sedikit data
12 Langkah untuk melakukan tuning Sql di Oracle
Berikut tips umum untuk penyetelan kinerja sql
(1) Pertama, Anda harus memiliki semua alat yang diperlukan untuk penyetelan sql. Anda harus memiliki informasi yang baik tentang penelusuran, memformat jejak, menjelaskan rencana, membaca menjelaskan rencana di oracle.
Pengetahuan yang baik tentang berbagai metode bergabung yang tersedia di Oracle dan cara menggunakannya secara efisien
(2) Membaca lebih sedikit data dan menjadi efisien I/O.
Semakin banyak data yang Anda baca untuk pernyataan sql, semakin banyak kait yang perlu diperoleh dan memperlambat kinerja. jadi harus selalu melakukan lebih sedikit pembacaan logis
Tulis pernyataan sql yang masuk akal di mana filter yang tepat . Periksa tentang jumlah baris dalam berbagai tabel yang terlibat dan temukan metode terbaik untuk membuat pernyataan sql
(2) Gunakan indeks Oracle yang baik
indeks B-Tree dan indeks Bitmap dapat digunakan untuk meningkatkan kinerja kueri jika data yang dikembalikan kurang dari 10%. Tetapi kita harus berhati-hati saat membuat indeks karena perlu dipertahankan untuk operasi penyisipan, pembaruan, dan penghapusan juga. Jadi membuat indeks membuat overhead atas banyak hal. Jadi kita harus hati-hati memeriksa efek pembuatan indeks.
(3) Hindari sql yang menonaktifkan penggunaan indeks
SQL yang Menonaktifkan Indeks
(a)Fungsi ( to_char(), to_date(), dll. )
Fix :pindahkan fungsi ke sisi “constant/bind variable”
(b) Type Casting
Dalam SQL
di mana emp_no =10 (emp_no adalah varchar2)
Dalam PL/SQL
di mana emp_no =v_emp_num (v_emp_num adalah angka)
Modifier
dan id + 0 =111
dan tanggal + 1 =sysdate (coba tanggal =sysdate – 1)
Fix :Ubah untuk menghindarinya
(4) Selalu gunakan variabel bind dalam aplikasi. Jika Anda tidak menggunakan variabel bind di Oracle , sql akan diurai setiap saat dan akan memengaruhi kinerja database. Jika berisi variabel bind, sql akan di-cache dan eksekusi lebih lanjut tidak memerlukan penguraian dan dengan demikian kinerja sistem secara keseluruhan ditingkatkan
(5) UNI vs ATAU. Gunakan UNION untuk kueri dengan dua jalur eksekusi yang jelas; masing-masing mengembalikan sejumlah kecil baris. Jangan gunakan gabungan untuk kueri yang cenderung menghasilkan banyak baris karena semua baris harus diurutkan dan sebagian besar akan dibuang. ATAU cenderung menonaktifkan indeks
(6) Gunakan statistik pengoptimal yang akurat di tabel untuk mendapatkan rencana yang optimal.
(7) Jika Anda menggunakan fungsi pada ekspresi pada kondisi tersebut, periksa apakah ada indeks berbasis fungsi pada kolom itu. Jika tidak ada, indeks tidak akan digunakan
(8) Gunakan ada vs dalam dan Tidak ada vs tidak ada untuk subkueri berkorelasi
(9) Hindari praktik pengkodean yang buruk
Beberapa Tips
(a) Hindari bergabung dengan Cartesian . Pastikan semua tabel yang diperlukan dalam kueri diperlukan dan ditautkan satu sama lain
(b) Gunakan Decode untuk menghindari beberapa perjalanan ke database
(c) Cobalah untuk menghindari gabungan luar
(d ) Terkadang menguraikan logika menjadi bagian-bagian kecil membuat pekerjaan lebih cepat
(10) Jika mencoba menggunakan tampilan kompleks, periksa apakah tabel dasar dapat digunakan sebagai gantinya karena tampilan cenderung membuat kinerjanya buruk
(11) Gunakan UNION ALL Vs UNION jika Anda tahu bahwa data yang diambil tidak akan memiliki baris duplikat
(12) Gunakan petunjuk untuk mengoptimalkan rencana eksekusi. Terkadang petunjuk dapat digunakan untuk mengubah rencana eksekusi untuk kueri sehingga mengambil jalur yang paling optimal.
Beberapa kali bind peeking membuat rencana yang buruk , jadi dalam hal ini memberikan petunjuk yang diperlukan untuk memperbaiki rencana membantu dalam mendapatkan performa bagus setiap saat
Petunjuk yang paling umum adalah
/*+ LEADING (tabel alias) */ menentukan tabel untuk memulai bergabung
/*+ FIRST_ROWS */ sangat bagus untuk on-line screens – mendukung NESTED LOOPS
/*+ INDEX ( nama tabel alias.index) */ menentukan indeks yang ingin Anda gunakan. Catatan:jika indeks dihapus dan dibuat ulang dan nama berubah, maka petunjuk tidak lagi valid.
/*+ USE_NL (tabel alias1 alias tabel 2)*/ meminta pengoptimal untuk menggunakan Penggabungan Loop Bersarang untuk dua tabel yang ditentukan
Hindari petunjuk pengoptimal yang tidak perlu dan gunakan dengan hati-hati
Ini adalah beberapa tips untuk menghindari masalah dan melakukan penyetelan sql. Penyetelan sql adalah Samudra besar dan Anda dapat mempelajari berbagai hal hanya dengan berlatih. Semoga Sukses!!
Juga Dibaca
https://docs.Oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm