Akan selalu ada trade off antara ketahanan dan kinerja.
Dengan MySQL pada ext4 hambatan = 1 default memang menyebabkan perlambatan, namun tindakan pertama seharusnya tidak menonaktifkan penjurnalan atau mengaktifkan data = writeback.
Pertama, jika ketahanan sangat penting, RAID yang didukung baterai tentu sangat berharga.
Opsi pemasangan yang telah saya pilih, terutama pada RAID yang didukung baterai adalah:
/dev/mapper/vg-mysql--data /var/lib/mysql/data ext4 defaults,noatime,nodiratime,barrier=1,data=ordered 0 0
Ini sengaja tidak menggunakan data = writeback karena saya tidak ingin mengambil risiko korupsi sistem file yang mengakibatkan "data lama muncul dalam file setelah kerusakan dan pemulihan jurnal" (kutipan berasal dari man mount
).
Konfigurasi ideal di my.cnf untuk ketahanan penuh di sekitar pengaturan terkait I / O adalah:
[mysqld]
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
Saya telah memilih urutan trade-off berikut untuk meningkatkan kinerja:
sync_binlog = 0
: ini adalah konfigurasi MySQL pertama yang saya ubah dari ketahanan penuh. Alasannya adalah ini memberikan peningkatan kinerja yang signifikan, terutama di mana binlog_format=row
(sayangnya diperlukan untuk Jira). Saya menggunakan cukup replika MySQL di cluster bahwa jika binlog menjadi rusak oleh skenario kehilangan daya saya akan melakukan salinan biner dari replika lain.
innodb_flush_log_at_trx_commit = 2
: Sementara nilai 1 diperlukan untuk kepatuhan ACID penuh, dengan nilai 2 "buffer log ditulis ke file di setiap komit, tetapi operasi flush ke disk tidak dilakukan di atasnya. Namun, pembilasan pada file log terjadi sekali per detik juga ketika nilainya 2. Perhatikan bahwa pembilasan sekali per detik tidak 100% dijamin terjadi setiap detik, karena masalah penjadwalan proses. " (kutipan dari MySQL docs)
- Perbarui opsi pemasangan untuk digunakan
data=writeback
. Perhatikan bahwa jika ini adalah sistem file root Anda, Anda juga harus melewati opsi baris perintah kernel. Saya mengumpulkan beberapa langkah di coderwall .
- Uji berbagai nilai
innodb_flush_method
. O_DIRECT ditampilkan untuk meningkatkan kinerja di beberapa beban kerja, tetapi itu tidak diberikan karena ini akan bekerja di lingkungan Anda.
- Upgrade ke SSD, dalam hal ini Anda juga akan ingin meningkatkan
innodb_io_capacity
, dan tune pengaturan seperti innodb_adaptive_flushing
, innodb_read_io_threads
, innodb_write_io_threads
, innodb_purge_threads
, dan pengaturan lain yang mungkin.