我最近想練習做一個預約系統,預約時對資料庫里那行記錄加for update行級鎖,防止多人同時預約時資料的不正確。如果這個時候某行被加鎖中,且有多人在等待著這個鎖的釋放。
那么,當這個鎖釋放后,mysql是怎么從多個等待物件中選擇下一個來對那行資料進行操作,會不會有類似“驚群效應”的發生?
uj5u.com熱心網友回復:
當然不會了,肯定有某種機制或者演算法的,有一個等待物件會先獲得,其他的繼續等待uj5u.com熱心網友回復:
可以做實驗,A加了查詢共享鎖后,在50秒超時時間內,對BCD先后進行update操作都將阻塞。此時在A上查看information_schema.innodb_lock_waits表中,可以清晰的看到一組關系:
BCD都被A阻塞了,CD被B阻塞了,D被C阻塞了。
A提交后,是B最先執行的。
uj5u.com熱心網友回復:
嗯嗯,我大概知道你的意思了。那像我這樣處理預約可能產生的高并發(差不多兩百左右),只是給修改的記錄加行級鎖,在只是對資料庫操作的方面上,這樣可行不?你有什么建議嗎
uj5u.com熱心網友回復:
這個就是類似執行緒阻塞等,應該是相關事務在一個阻塞佇列上,資料庫會選取一個,驚群也可能發生,但是MySQL資料庫發展這么久,肯定已經考慮過這個問題。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/88024.html
標籤:MySQL
