innodb_lock_wait_timeout

最近在業務支持中遇到特殊業務對innodb的這個鎖等待超時(innodb_lock_wait_timeout)有比較嚴格的要求,特意查了下資料(主要還是參考的官方文檔) 

 innodb_lock_wait_timeout指的是事務等待獲取資源等待的最長時間,超過這個時間還未分配到資源則會返回應用失敗;參數的時間單位是秒,最小可設置爲1s(此時需要考慮應用端的頻繁異常處理會消耗性能,不能設置過小),最大可設置1073741824秒以上(再大就會被截斷了,不過這樣業務一直死循環等待下去而不能將資源使用來做其他的事情也是很浪費的一件事情)

    一般默認安裝時這個值是50(公司現有的安裝貌似是默認100s的),這個值在InnoDB Plugin 1.0.2版本之前只能通過修改配置文件my.cnf並重啓mysql實例生效;在 InnoDB Plugin 1.0.2版本之後可以做到動態的修改包括線程級別和全局的一個設置:
set innodb_lock_wait_timeout=100;   ---------session
set global innodb_lock_wait_timeout=100;   ---------global
注意global的修改對當前線程是不生效的,只有建立新的連接才生效

PS:如果事務開始前部分有其他操作而中途遇到鎖等待超時則mysql端還需要回滾,如果頻繁出現對DB消耗也不可小覷啊。

    其實在現有場景下多臺機器同時更新某個資源有很多其他的方式,比如令牌環方式等。純屬yy~~~

文章參考:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章