Saat kami mengembangkan aplikasi software, kami mendapati error report operasi database innodb yang melibatkan transaction dengan peringatan error sbb, “Lock wait timeout exceeded; try restarting transaction”. Kami cek pada show processlist apakah ada process transaction mysql yang masih berjalan, dan hasilnya tidak ada process transaction yang bekerja.
Selanjutanya mari kita analisa masalahnya, pada pesan tersebut dikatakan wait timeout, kami berpikir apakah time nya kurang panjang. Terpintas ide solusi, apakah mungkin ada yang salah dengan konfigurasi innodb-nya. Ternyata memang benar <code>innodb_lock_wait_timeout</code> -nya kurang lama, setelah kami perbesar menjadi 500 dari nilai defaultnya yaitu 50, software yang kami kembangkan kembali bekerja normal.
Berikut langkah-langkah yang kami lakukan:
- Buka dan edit file my.cnf
Karena ini adalah klien pekerjaan freelance kami maka kami menggunakan OS Linux Slackware, dimana letak konfigurasi my.cnf berada di direktori /etc/my.cnf .
$ cd /etc/ $ vim my.cnf
- Uncomment semua parameter yang terdapat kata-kata innodb.
Hilangkan semua comment dengan keyword innodb, sehingga konfigurasi menjadi seperti ini:
innodb_data_home_dir = /var/lib/mysql innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /var/lib/mysql # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high innodb_buffer_pool_size = 16M innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size innodb_log_file_size = 5M innodb_log_buffer_size = 8M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50
- Perbesar nilai
innodb_lock_wait_timeout
(dengan satuan detik), pada konfigurasi kami sebesar 500.
innodb_lock_wait_timeout = 50
Menjadi
innodb_lock_wait_timeout = 500
- Simpan konfigurasi my.cnf
- Restart mysql daemon.
# /etc/rc.d/rc.mysqld restart
— Selesai —
Walhamdulillah, semoga bermanfaat, aamiin.