Periksa nilai innodb_thread_concurrency.
Untuk sistem saya meningkatkan nilai dari 8 menjadi 32, menurut pedoman dalam dokumentasi MySql , menyebabkan penurunan jumlah utas yang secara bersamaan melaporkan kondisi "item yang dibebaskan". Juga, waktu permintaan rata-rata yang dihabiskan turun dengan urutan besarnya.
Meskipun ini membuat perbedaan besar dalam kinerja server secara keseluruhan, itu bukan peluru perak "membebaskan item". Ekosistem perangkat keras saya membuat saya berhipotesis bahwa keadaan ini sebagian besar terlihat pada sistem dengan disk "lambat" (serangan disk 2x10k 1), dan kurang lazim pada sistem dengan penyimpanan yang lebih cepat (disk drive 12x15k disk serangan 10). Jadi, pemeriksaan kinerja disk juga dapat dilakukan.
Semoga berhasil!
Juga:
Perlu dicatat bahwa nilai default dari innodb_thread_concurrency sangat berbeda tergantung pada rilis 5.0 poin apa yang sedang digunakan.
Nilai default telah berubah beberapa kali: 8 sebelum MySQL 5.0.8, 20 (tak terbatas) dari 5.0.8 hingga 5.0.18, 0 (tak terbatas) dari 5.0.19 hingga 5.0.20, dan 8 (terbatas) dari 5.0.21 di. - sumber
Ini berarti bahwa peningkatan yang tampaknya tidak berbahaya dari 5.0.20 ke 5.0.21 mengubah standar dari tak terbatas ke 8, dan membawa serta konsekuensi kinerja.
Membebaskan item adalah tahap pelaksanaan kueri di mana struktur sementara, buffer, dll dideallocated. Beberapa pekerjaan cache query dilakukan pada tahap ini, tetapi itu bukan satu-satunya hal yang terjadi di sana. Saya akan menyarankan menggunakan PROFIL TAMPILKAN untuk melihat berapa lama tahap ini relatif dibandingkan dengan tahap lainnya, dan jika waktu yang dihabiskan berakhir menjadi masalah, pemecahan masalah dengan alat seperti profiler dan oprofile orang miskin.
sumber
Ada laporan bug tentang masalah ini tentang "membebaskan item" dan cache kueri . Meskipun bug sudah ditutup, tidak disebutkan tentang innodb_thread_concurrency .
Secara kebetulan, saya berbicara dengan Ronald Bradford di Percona Live NYC pada bulan Mei. Saya mengatakan kepadanya tentang situasi di mana saya tweeked innodb_thread_concurrency karena beberapa InnoDB Buffer Pool MySQL 5,5 menghasilkan banyak penguncian utas dan saya menduga bahwa data cache yang saya butuhkan kemungkinan besar telah menyebar di antara beberapa buffer pool.
Dia dengan jelas mengatakan kepada saya bahwa saya tidak boleh menetapkan nilai terhadap innodb_thread_concurrency. Biarkan selalu menjadi nilai default, yang sekarang nol (0). Dengan melakukannya, Anda membiarkan penyimpanan InnoDB memutuskan berapa banyak innodb_concurrency_tickets untuk dihasilkan sendiri. Inilah yang dilakukan konkurensi tak terbatas.
'Membebaskan item' kemungkinan besar terjadi lebih sering ketika kita memberlakukan batasan pada innodb_thread_concurrency. Itu harus selalu nol (0). Saya akan mengambil risiko dan meningkatkan innodb_concurrency_tickets dan melihat apakah itu membantu atau tidak.
sumber
Kami memiliki masalah dengan gejala yang persis sama. Ternyata disk dengan file log InnoDB telah terisi. Layak diperiksa.
sumber
Petunjuk lain: Mungkin innodb fsync (). Coba pengaturan
innodb_flush_log_at_trx_commit = 2
Di my.cnf
Logfile innodb kemudian dibilas ke disk setiap 1-2 detik, alih-alih ob pada setiap commit. Hukuman yang sedikit terhadap integritas data, keuntungan besar dalam kecepatan.
sumber