Tag: timeout exceeded

Lock wait timeout exceeded; try restarting transaction

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.