Kami mengalami masalah setelah memindahkan basis data pelanggan kami ke server tambahan. Ini seharusnya memiliki efek positif pada kinerja situs, tetapi ada masalah dengan penguncian tabel di MyISAM. (Saya pernah mendengar menggunakan InnoDB bukan MyISAM, tetapi kami tidak dapat mengganti mesin dalam waktu dekat).
Kami dapat menemukannya pada kueri pembaruan yang dilakukan ketika moderator mengaktifkan komentar pada artikel tersebut. Inilah prosesnya:
- pembaruan-permintaan diproses
SET status = 1 WHERE id = 5
(indeks diatur) - file halaman yang di-cache dihapus
Pada titik ini seluruh halaman menjadi lambat. Basis data sendiri sibuk selama beberapa menit. Saya mengambil daftar proses beberapa kali dan melihat sekitar 60 entri dari kueri pemilihan yang berbeda, yang semuanya dalam keadaan menunggu kunci tingkat tabel .
1. Saya tidak mengerti mengapa pembaruan ini di atas meja article_comments
dapat memengaruhi pernyataan pilih untuk tabel article
untuk menunggu kunci level tabel. Dalam daftar proses, hampir semua permintaan menunggu berasal dari tabel ini. Saya telah membaca tentang fakta bahwa pembaruan / sisipan lebih disukai untuk dipilih dan bahwa ini dapat menyebabkan masalah seperti itu, tetapi tabel artikel itu sendiri tidak diperbarui ketika komentar menjadi aktif, sehingga pilihan tidak harus menunggu. Apakah saya salah mengerti?
2. Apakah ada sesuatu selain beralih ke InnoDB untuk mencegah perilaku ini atau setidaknya untuk mendapatkan keseimbangan yang lebih baik? Saya sangat jengkel tentang kenyataan bahwa masalah ini tidak muncul sebelum memindahkan database ke server baru. Saya kira ada beberapa kesalahan konfigurasi tetapi saya tidak tahu cara mengidentifikasi.
key_buffer_size
diatur untuk 1GB
. Meningkatkan itu untuk 10GB
mengurangi masalah.