昨天晚上同事回報某些頁面會讀取到Timeout,但開發環境卻沒有這個問題,所以我個人猜測和DB逃不了關係,同一份Code。不是DB有問題,就是資料內容有問題。
遇到DB有問題的時候,習慣先看show processlist
,果不其然在某台Slave機上,出現整片的lock
依照正常判斷,應該是某一個Query卡住無法結束解開lock,造成後面所有Query都在Waiting lock。
再使用select * from information_schema.innodb_trx
去查看TRANSACTION的狀況
看trx_started的時間,一般都是前面的卡住後面,所以用kill process id,讓DB自己rollback
搞定,再來就是要找出一切的源頭。
用show slave status
查看時發現,Slave_SQL_Running
是No
往後查看發現錯誤訊息是表壞了,Last_SQL_Error
顯示Error 'Table is marked as crashed and last (automatic?) repair failed' on querym
用check table檢查出現Table is marked as crashed and last repair failed,的確是表有問題,嘗試repair table
收工