Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Meningkatkan Kinerja MySQL dengan Pengaturan InnoDB Tingkat Lanjut

Kami telah membahas cara mengkonfigurasi InnoDB untuk kinerja tinggi beberapa waktu lalu, namun, kami belum membahas bagaimana kami dapat meningkatkan kinerja MySQL sambil memanfaatkan pengaturan InnoDB tingkat lanjut. Entri blog ini seharusnya memberikan sedikit lebih banyak wawasan tentang topik ini.

Dijelaskan InnoDB

Sebelum kita benar-benar mendalami pengaturan InnoDB, kita mungkin harus memahami dasar-dasarnya:InnoDB adalah mesin penyimpanan untuk MySQL, MariaDB, dan Server Percona. Mesin tersebut dikenal sebagai Plugin InnoDB, yang memerlukan pengaturan dan pemasangan plugin. Hingga rilis MySQL 5.5.5, InnoDB tidak lagi menjadi plugin dan sekarang menjadi bagian dari paket MySQL sebagai salah satu mesin penyimpanan yang didukung untuk MySQL. Sejak rilis MySQL 5.6,  InnoDB telah menjadi mesin penyimpanan default - ini adalah mesin penyimpanan serba guna yang menyeimbangkan keandalan tinggi dan kinerja tinggi. Keuntungan utama InnoDB termasuk mendukung penguncian tingkat baris, kunci asing, dan mengikuti model ACID (Atomicity Consistency Isolation Durability) - ACID adalah seperangkat properti yang dimaksudkan untuk menjamin validitas data meskipun ada kesalahan, kegagalan daya, dan masalah lainnya. InnoDB memiliki daftar variabel yang ekstensif dan beberapa di antaranya membantu meningkatkan kinerja terutama pada jenis perangkat keras dan sumber daya yang tersedia dari server database Anda. Diantaranya adalah:

  • innodb_data_file_path adalah file tempat data dari tabel InnoDB disimpan.
  • innodb_buffer_pool_size adalah buffer memori yang digunakan InnoDB untuk menyimpan data dan indeks tabel di cache.
  • innodb_log_file_size menggambarkan ukuran file log InnoDB. Semakin besar ukuran innodb_log_file_size, semakin lama waktu pemulihan yang Anda perlukan jika terjadi kerusakan.
  • innodb_log_buffer_size digunakan oleh InnoDB untuk menulis ke file log pada disk.
  • innodb_flush_log_at_trx_commit mengontrol keseimbangan antara kinerja dan kepatuhan ACID. Nilai defaultnya adalah 1, yang membantu menjaga InnoDB ACID compliant - mengubah innodb_flush_log_at_trx_commit menjadi 2 mendapatkan kecepatan tulis yang sangat cepat, tetapi transaksi senilai hingga satu detik dapat hilang.

Ada juga pengaturan InnoDB lanjutan yang dapat diatur untuk meningkatkan kinerja MySQL lebih jauh lagi. Kami akan memeriksanya sekarang.

Setelan InnoDB Lanjutan

Seperti yang telah disebutkan di atas, InnoDB memiliki pengaturan lanjutan yang dapat digunakan untuk lebih meningkatkan kinerjanya (kami tidak akan mencantumkan semuanya secara mutlak, tetapi pengaturan yang tercantum seharusnya memberi Anda gambaran yang cukup bagus gagasan tentang seberapa kuat InnoDB sebenarnya):

  • InnoDB dapat dinonaktifkan - jika Anda ingin menonaktifkan InnoDB, cukup ubah file my.cnf dan tambahkan skip-innodb di bawah bagian [mysqld]. Setelah itu, restart server MySQL Anda - InnoDB sekarang harus dinonaktifkan. Atau, Anda dapat menggunakan opsi --innodb:menyetelnya ke OFF akan menonaktifkan mesin. Meskipun perhatikan bahwa opsi ini tidak digunakan lagi pada MySQL 5.7.5.
  • InnoDB juga menyediakan mekanisme penguncian yang dapat dikonfigurasi yang dapat meningkatkan kinerja pernyataan SQL yang menambahkan baris ke tabel dengan kolom AUTO_INCREMENT:mode peningkatan otomatis dapat dikonfigurasi saat startup dengan menggunakan opsi innodb_autoinc_lock_mode. Opsi ini memiliki tiga pengaturan untuk menentukan mode kunci - mode kunci dapat berupa 0 ("tradisional"), 1 ("berturut-turut") atau 2 ("interleaved"). Nilai menawarkan kinerja tergantung pada jenis penyisipan basis data. Singkatnya, 0 menawarkan kompatibilitas dengan versi MySQL dan Innodb yang lebih lama. Nilai 1 menawarkan pendekatan yang lebih aman dan deterministik untuk replikasi berbasis pernyataan (SBR). Sedangkan nilai 2 memiliki mode penguncian yang lebih terukur dan tercepat namun baris yang disisipkan oleh pernyataan yang diberikan mungkin tidak berurutan. Lihat dokumentasi MySQL untuk informasi lebih lanjut.
  • InnoDB memberi Anda kemampuan untuk membagi kumpulan buffer menjadi beberapa segmen (fitur ini hanya tersedia dari MySQL 5.5) - pengaturan innodb_buffer_pool_instances memungkinkan Anda meningkatkan skalabilitas MySQL pada mesin yang menjalankan banyak inti. Secara default, nilai pengaturan ini adalah 1 jika innodb_buffer_pool_size kurang dari 1 GB dan 8 jika tidak:angka menentukan jumlah wilayah yang dibagi menjadi kumpulan buffer InnoDB. Pengaturan ini dapat digunakan untuk melibatkan lebih banyak inti, kami akan menjelaskan caranya nanti.
  • InnoDB menawarkan empat tingkat isolasi transaksi (tx_isolation di <5.7 tetapi transaction_isolation di versi 5.7 dan seterusnya):READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, dan SERIALIZABLE:tingkat isolasi ini adalah "I" dalam akronim ACID :
    • Saat READ UNCOMMITTED sedang digunakan, satu transaksi mungkin melihat perubahan yang tidak dikomit oleh transaksi lain. Tingkat isolasi ini memungkinkan pembacaan yang kotor.
    • Bila READ COMMITTED sedang digunakan, Anda dapat yakin bahwa semua data yang dibaca telah dilakukan pada saat dibaca.
    • Saat REPEATABLE READ sedang digunakan, tingkat isolasi yang lebih tinggi sedang digunakan. Selain semua yang dijamin oleh level READ COMMITTED, juga menjamin bahwa data yang sudah dibaca tidak dapat diubah.
    • Bila SERIALIZABLE sedang digunakan, tingkat isolasi yang lebih tinggi sedang digunakan. Selain semua yang dijamin oleh tingkat isolasi REPEATABLE READ, ini juga menjamin bahwa tidak ada data baru yang dapat dilihat oleh pembacaan berikutnya.
  • InnoDB juga memungkinkan Anda untuk menentukan keseluruhan kapasitas I/O yang tersedia untuk InnoDB dengan memodifikasi variabel innodb_io_capacity. Nilai variabel ini harus diatur ke kira-kira jumlah IOPS yang dapat dijalankan sistem per detik:saat menyetel nilai parameter ini, perlu diingat bahwa nilai sekitar 100 lebih sesuai untuk HDD, sementara SSD mungkin mendapat manfaat dari nilai yang lebih tinggi . Variabel innodb_io_capacity_max juga dapat membantu:variabel ini memungkinkan InnoDB untuk flush lebih agresif, yang berarti bahwa tingkat operasi I/O mungkin melebihi batas yang ditentukan oleh innodb_io_capacity - dalam situasi seperti itu, operasi tidak akan melebihi nilai yang ditentukan oleh variabel innodb_io_capacity_max .
  • InnoDB juga memungkinkan Anda untuk mengontrol berapa banyak utas latar belakang yang tersedia untuk operasi I/O:jumlah utas I/O yang dialokasikan untuk operasi baca dapat dikontrol oleh variabel innodb_read_io_threads sedangkan jumlah utas I/ O thread yang dialokasikan untuk operasi tulis dapat dikontrol oleh variabel innodb_write_io_threads. Nilai default untuk kedua parameter ini adalah 4 dan nilai maksimum yang diizinkan adalah 64.
  • InnoDB memiliki kemampuan untuk mengubah peringatan InnoDB tertentu menjadi kesalahan:untuk melakukannya, cukup setel variabel innodb_strict_mode ke ON:variabel ini memengaruhi penanganan kesalahan sintaks untuk operasi CREATE TABLE, ALTER TABLE, dan CREATE INDEX :menonaktifkan variabel ini mungkin memecahkan kesalahan "Ukuran baris terlalu besar". Untuk menonaktifkan mode ketat, setel innodb_strict_mode ke OFF.
  • InnoDB dapat agak dilindungi dari pemindaian tabel lengkap yang mengganggu data yang di-cache di kumpulan buffer dengan meningkatkan variabel innodb_old_blocks_time. Nilai minimum untuk pengaturan ini adalah 0, nilai default adalah 1000.
  • Jika Anda menjalankan operasi pemeliharaan pada tabel InnoDB yang berisi indeks FULLTEXT, pertimbangkan untuk mengubah variabel innodb_optimize_fulltext_only ke AKTIF - setelah variabel ini diaktifkan, kueri OPTIMIZE TABLE akan berjalan lebih cepat karena akan melewati reorganisasi data di meja. Perhatikan bahwa setelan ini dimaksudkan hanya untuk diaktifkan sementara sehingga Anda mungkin ingin menonaktifkannya setelah pengoptimalan selesai.
  • Untuk memulai InnoDB dalam mode read-only, aktifkan pengaturan innodb_read_only. Saat setelan ini diaktifkan, Anda dapat membuat kueri tabel InnoDB di mana direktori data MySQL berada di media hanya-baca.

Membuat InnoDB Melibatkan Lebih Banyak Core

Anda juga dapat membuat InnoDB melibatkan lebih banyak inti dengan memanfaatkan kemampuan multithreadingnya:yang mengejutkan, ini tidak terlalu sulit untuk dicapai - Anda hanya perlu mengubah beberapa pengaturan. Berikut cara melakukannya:

  1. Biarkan opsi innodb_thread_concurrency pada nilai defaultnya 0. Dengan melakukan itu, Anda membiarkan InnoDB memutuskan jumlah tiket konkurensi terbaik (mereka menentukan jumlah utas yang dapat secara bersamaan masuk ke InnoDB) untuk dibuka untuk MySQL tertentu pengaturan contoh. Untuk MariaDB mulai 10.5, ini ditandai sebagai tidak digunakan lagi sehingga masuk akal jika MySQL menyetelnya ke 0 karena sumber daya komputasi telah canggih dibandingkan dengan masa-masa awal MySQL.
  2. Setelah opsi innodb_thread_concurrency disetel ke 0, setel innodb_read_io_threads dan innodb_write_io_threads ke nilai maksimum 64. Ini akan melibatkan lebih banyak inti.

Ringkasan

Untuk meringkas, InnoDB adalah mesin penyimpanan yang sangat kuat. Performa mesin penyimpanan ini secara langsung dipengaruhi oleh pengaturan yang digunakan mesin ini. Jadi jika Anda ingin meningkatkan kinerja instance MySQL Anda, pastikan untuk mengingat setidaknya beberapa tips yang disebutkan dalam artikel ini. Menyetel setelan terkait mesin dan menggunakannya saat sesuai, melakukannya akan memberi Anda keuntungan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatur koneksi MySQL jarak jauh

  2. Laravel 5.2 - Gunakan String sebagai Kunci Utama Kustom untuk Tabel Eloquent menjadi 0

  3. Apa susunan terbaik untuk digunakan untuk MySQL dengan PHP?

  4. Cara mengkonfigurasi Tomcat untuk terhubung dengan MySQL

  5. Membangun Sistem Newsletter Dengan PHP dan MySQL