Structured Query Language (SQL) adalah bahasa pemrograman tujuan khusus yang digunakan untuk menyimpan, memanipulasi, dan mengambil data dari database. Ia telah menemukan aplikasi di banyak sistem basis data relasional termasuk MySQL, Postgres, Oracle, SQL Server, dan lainnya.
Dengan menggunakan pernyataan SQL, pengembang dengan mudah melakukan berbagai operasi basis data fungsional seperti membuat, memperbarui, dan menghapus data.
Ketika volume data tumbuh, dan teknologi menjadi semakin kompleks, menjadi lebih penting untuk mengoptimalkan database MySQL dengan benar untuk memberikan pengalaman pengguna akhir dan untuk menurunkan biaya infrastruktur. Alat penyetelan kinerja MySQL dapat membantu profesional basis data dengan cepat mengidentifikasi kemacetan, menargetkan operasi yang tidak mencukupi melalui peninjauan rencana eksekusi kueri, dan menghilangkan permainan tebak-tebakan.
Dengan semakin kompleksnya volume data yang terus bertambah dan beban kerja yang selalu berubah, penyetelan kinerja basis data dan pengoptimalan kueri MySQL kini diperlukan untuk memaksimalkan pemanfaatan sumber daya dan kinerja sistem.
Ada beberapa alasan yang membuat penyetelan SQL agak rumit bagi pengembang. Pertama, dibutuhkan keahlian teknis yang luas untuk menulis dan memahami berbagai rencana eksekusi. Saat menulis pernyataan SQL yang bersih dan lengkap adalah tanggung jawab orang yang mengumpulkan pengetahuan menyeluruh tentangnya.
Selain kerumitannya, penyetelan sangat memakan waktu. Karena ketika Anda memiliki sejumlah besar pernyataan SQL untuk disortir, ini membawa sedikit ketidakpastian untuk mengetahui pernyataan mana yang harus Anda sesuaikan dan mana yang harus Anda tinggalkan. Dan meskipun setiap pernyataan berbeda, pendekatan penyetelannya juga bervariasi sesuai dengan fungsinya masing-masing.
Bersiaplah untuk Pembaruan Data Web Inti
Ebook untuk Mempercepat Situs Web Anda Sebelum Anda Mulai Kehilangan Lalu Lintas.
Terima Kasih
Daftar Anda ada di Way to Your Inbox.
Dalam tutorial ini, saya akan membahas bagaimana meningkatkan kinerja MySQL menggunakan beberapa tip penyetelan kinerja yang berguna. Jadi, mari kita lihat detailnya di bawah ini:
Manfaat Penyetelan Kinerja MySQL
Keuntungan utama dari mengidentifikasi faktor pendorong kinerja untuk database memungkinkan Anda menghindari penyediaan yang berlebihan dan mengurangi biaya dengan menyesuaikan ukuran server Anda. Ini juga memberi Anda wawasan tentang apakah memindahkan penyimpanan data atau menambah kapasitas server akan membawa peningkatan kinerja atau tidak, dan jika ya, berapa banyak yang akan terjadi.
Basis data penyetelan untuk pengoptimalan kinerja kueri MySQL tidak datang dengan tantangan kecil. Namun, setelah disetel dengan benar, database memberikan hasil kinerja yang bermanfaat dengan fungsionalitas yang luar biasa. Ini tidak hanya menurunkan beban tugas yang tidak diinginkan tetapi juga mengoptimalkan database MySQL untuk pengambilan data yang lebih cepat.
Anda Mungkin Juga Menyukai: Kiat Kinerja PHP untuk Mengoptimalkan Situs Web Anda
Optimalkan Kueri Dengan Pedoman Pengoptimalan Kueri MySQL
Ikuti praktik terbaik ini untuk menyempurnakan performa MySQL Anda dan mengoptimalkan kecepatan database.
Pertama-tama, pastikan pengindeksan semua predikat dalam klausa WHERE, JOIN, ORDER BY, dan GROUP BY. WebSphere Commerce sangat menekankan pada pengindeksan predikat untuk meningkatkan kinerja SQL. Karena pengindeksan kueri SQL yang tidak tepat dapat menyebabkan pemindaian tabel, yang pada akhirnya menyebabkan masalah penguncian dan masalah lainnya.
Oleh karena itu, saya sangat menyarankan untuk mengindeks semua kolom predikat sehingga database dapat mengalami optimasi query MySQL.
Anda Mungkin Juga Menyukai: Panduan Pengoptimalan Kinerja Laravel
Hindari penggunaan fungsi dalam predikat
Basis data tidak menggunakan indeks jika memiliki beberapa fungsi yang telah ditentukan sebelumnya di kolom.
Misalnya:
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy
Karena fungsi UPPER(), database tidak menggunakan indeks pada COL1. Jika tidak ada cara untuk menghindari fungsi tersebut di SQL, Anda harus membuat indeks berbasis fungsi baru atau harus membuat kolom khusus dalam database untuk meningkatkan kinerja.
Hindari penggunaan wildcard (%) di awal predikat
Predikat LIKE '%abc'
menyebabkan pemindaian tabel penuh. Misalnya:
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy
Dalam kebanyakan kasus, penggunaan karakter pengganti ini membawa batasan kinerja utama.
Hindari kolom yang tidak perlu dalam klausa SELECT
Alih-alih menggunakan 'SELECT *', selalu tentukan kolom dalam klausa SELECT untuk meningkatkan kinerja MySQL. Karena kolom yang tidak perlu menyebabkan beban tambahan pada database, memperlambat kinerjanya serta seluruh proses sistematis.
Gunakan inner join, bukan outer join jika memungkinkan
Gunakan outer join hanya jika diperlukan. Menggunakannya secara tidak perlu tidak hanya membatasi kinerja database tetapi juga membatasi opsi pengoptimalan kueri MySQL, yang mengakibatkan eksekusi pernyataan SQL menjadi lebih lambat.
Gunakan DISTINCT dan UNION hanya jika diperlukan
Menggunakan operator UNION dan DISTINCT tanpa tujuan utama menyebabkan pengurutan yang tidak diinginkan dan memperlambat eksekusi SQL. Alih-alih UNION, menggunakan UNION ALL membawa lebih banyak efisiensi dalam proses dan meningkatkan kinerja MySQL dengan lebih tepat.
Klausa ORDER BY wajib dalam SQL jika Anda berharap mendapatkan hasil yang diurutkan
Kata kunci ORDER BY mengurutkan kumpulan hasil dalam kolom pernyataan yang telah ditentukan sebelumnya. Meskipun pernyataan tersebut memberikan keuntungan bagi admin database untuk mendapatkan data yang diurutkan, pernyataan tersebut juga menghasilkan sedikit dampak kinerja dalam eksekusi SQL. Karena kueri terlebih dahulu perlu mengurutkan data untuk menghasilkan kumpulan hasil akhir, menyebabkan operasi yang agak rumit dalam eksekusi SQL.
Anda Mungkin Juga Menyukai: Cara Menggabungkan Dua Tabel di MySQL
Jangan Gunakan MySQL sebagai Antrian
Antrean dapat memengaruhi kinerja database Anda langsung dari inti dan bisa masuk ke database aplikasi Anda tanpa sepengetahuan Anda. Misalnya, jika Anda menyiapkan status untuk item tertentu sehingga 'proses yang relevan' dapat mengaksesnya, Anda secara tidak sengaja membuat antrian. Apa yang dilakukannya adalah membangun waktu muat ekstra untuk mengakses sumber daya tanpa alasan utama.
Antrian menyebabkan masalah karena dua alasan utama. Mereka membuat serial beban kerja Anda, mencegah penyelesaian tugas secara paralel, dan mereka sering menghasilkan tabel yang berisi pekerjaan dalam proses serta data historis dari pekerjaan yang sudah selesai. Ini tidak hanya menambah latensi ke aplikasi tetapi juga menambah hambatan pada penyetelan kinerja MySQL.
Anda Mungkin Juga Menyukai: Cara Menggunakan Redis untuk Antrian
Pahami Empat Sumber Daya Mendasar
Anda memerlukan empat sumber daya dasar untuk membuat fungsi database. CPU, disk, memori, dan jaringan. Jika salah satu dari ini tidak berfungsi dengan benar, pada akhirnya akan memengaruhi server database dan menghasilkan kinerja yang buruk.
Untuk memahami sumber daya dasar dengan benar, Anda perlu fokus pada dua area tertentu, yaitu memilih perangkat keras yang tepat dan memecahkan masalah dengannya.
Selalu pastikan untuk menggunakan komponen performa menyeluruh saat memilih perangkat keras untuk database MySQL. Tidak hanya memilih yang terbaik di antara tumpukan tetapi juga memastikan bahwa harus ada keseimbangan yang tepat di antara mereka. Kita sering melihat bahwa organisasi cenderung memilih server dengan CPU yang cepat dan disk yang besar, tetapi mereka salah mengartikannya dengan kekurangan memori yang pada akhirnya mematikan kinerja.
Dalam beberapa skenario, menambahkan memori menjadi sangat penting untuk meningkatkan kinerja dalam hal besarnya. Memang terlihat sedikit berlawanan dengan intuisi, tetapi dalam banyak kasus, penggunaan disk yang berlebihan berdampak langsung pada kinerja database. Karena kekurangan memori yang cukup untuk menampung data server terbukti merugikan kinerja basis data.
Dalam hal pemecahan masalah, selalu periksa kinerja keempat sumber daya dasar. Validasi secara kualitatif bahwa mereka melakukan sesuai dengan kebutuhan perbaikan dalam norma. Mempertimbangkan audit ini secara teratur akan dengan cepat memecahkan masalah besar yang terjadi.
Kueri Pagination
Aplikasi yang membuat paginasi cenderung menurunkan server. Dalam menampilkan halaman hasil, dengan tautan untuk membuka halaman berikutnya, aplikasi ini biasanya mengelompokkan dan mengurutkan dengan cara yang tidak dapat menggunakan indeks, dan mereka menggunakan fungsi LIMIT dan offset yang menyebabkan server melakukan banyak hal menghasilkan pekerjaan, lalu membuang baris.
Anda dapat menemukan pengoptimalan di dalam antarmuka pengguna itu sendiri. Alih-alih menampilkan jumlah halaman yang tepat dalam hasil dan tautan ke halaman individual, Anda cukup menampilkan tautan ke halaman berikutnya. Anda juga dapat mencegah orang membuka halaman yang tidak relevan.
Di sisi kueri, alih-alih menggunakan LIMIT dengan offset, Anda dapat memilih satu baris lebih banyak dari yang Anda butuhkan, dan ketika pengguna mengklik tautan "halaman berikutnya", Anda dapat menetapkan baris terakhir itu sebagai titik awal untuk rangkaian hasil berikutnya . Misalnya, jika pengguna telah melihat halaman dengan baris 101 hingga 120, Anda juga harus memilih baris 121; untuk merender halaman berikutnya, Anda akan meminta server untuk baris yang lebih besar dari atau sama dengan 121, batas 21.
Mengoptimalkan Subkueri MySQL
Saran paling penting yang dapat saya berikan kepada Anda tentang subkueri adalah Anda harus memilih bergabung jika memungkinkan, setidaknya dalam versi MySQL saat ini.
Subquery adalah subjek pekerjaan intensif oleh tim pengoptimal, dan versi MySQL yang akan datang mungkin memiliki lebih banyak optimasi subquery. Tetap periksa pengoptimalan mana yang akan berakhir dalam kode yang dirilis, dan seberapa besar perbedaan yang akan mereka buat. Maksud saya di sini adalah bahwa "lebih suka bergabung" bukanlah saran yang terbukti di masa depan. Server semakin pintar setiap saat, dan kasus di mana Anda harus memberitahunya bagaimana melakukan sesuatu alih-alih hasil apa yang akan dikembalikan menjadi lebih sedikit.
Tembolok Kueri MySQL
Salah satu aspek terpenting dalam mengukur kinerja adalah cache konten. MySQL menyediakan caching kueri basis data yang menyimpan teks pernyataan SELECT dan hasil yang diambil. Oleh karena itu, setiap kali Anda membuat database duplikat, Anda memanggil cache kueri MySQL, itu akan merespons Anda dan menampilkan hasil dari cache, dan tidak ada panggilan yang akan diuraikan berulang kali. Dengan cara ini, Anda dapat memaksimalkan proses optimasi cache MySQL.
Untuk mengatur cache kueri MySQL, Anda harus menambahkan beberapa pengaturan ke MySQL. Pertama-tama, Anda harus memeriksa apakah cache kueri tersedia atau tidak dengan perintah berikut:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
Ini akan menunjukkan hasilnya, YA. Ini berarti cache MySQL berfungsi dengan baik.
+------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Sekarang, Anda dapat mengatur ukuran dan jenis cache kueri MySQL. Ingat ukuran default minimum adalah 40KB. Ukuran maksimalnya bisa 32MB. Anda dapat mengatur query_cache_size MySQL dengan menggunakan perintah berikut:
mysql> SET GLOBAL query_cache_size = 40000;
Jenis cache kueri dapat menentukan perilaku semua koneksi. Anda juga dapat menonaktifkan cache Kueri untuk kueri seperti:
mysql> SET SESSION query_cache_type = OFF;
Anda juga dapat mengatur nilai seperti 0,1 dan 2 untuk mengatur status koneksi.
Gunakan Memcached untuk Caching MySQL
Memcached adalah sistem cache memori terdistribusi. Ini mempercepat situs web yang memiliki basis data dinamis besar dengan menyimpan objek basis data dalam Memori Dinamis untuk mengurangi tekanan pada server, setiap kali sumber data eksternal meminta pembacaan. Lapisan Memcached mengurangi berapa kali database membuat permintaan.
Memcached menyimpan nilai (v) dengan kunci (k), dan mengambil nilai (v) dengan kunci (k) bahkan tanpa menguraikan kueri database dan menghindari semua kerumitan ini.
Untuk membaca lebih lanjut tentang Memcached, Anda dapat membaca panduan tentang cara mengatur Memcache di php.
Menutup!
Artikel ini memberikan secara rinci, akun praktik terbaik untuk pengoptimalan basis data dan tip penyetelan kinerja MySQL praktis yang harus diketahui setiap pengembang. Ini adalah panduan lengkap untuk para pengembang backend, yang tidak yakin dengan kinerja database mereka yang buruk dan memerlukan beberapa teknik praktis untuk mengoptimalkan database MySQL dari intinya.
Jika Anda ingin menambahkan pemikiran Anda tentang topik tersebut atau ingin mengajukan beberapa pertanyaan terkait topik tersebut, silakan tulis komentar Anda di bagian komentar.