我需要一個數據庫級別的同步。爲此,我使用GET_LOCK('prefix.some_id',0)。 在某些時候,GET_LOCK在不同主機上的不同腳本中爲同一個鍵返回1。可能是什麼問題呢?我需要大量的鎖,約5-7k。MySQL:GET_LOCK限制和問題
任何想法?
我需要一個數據庫級別的同步。爲此,我使用GET_LOCK('prefix.some_id',0)。 在某些時候,GET_LOCK在不同主機上的不同腳本中爲同一個鍵返回1。可能是什麼問題呢?我需要大量的鎖,約5-7k。MySQL:GET_LOCK限制和問題
任何想法?
按照documentation,你無法通過GET_LOCK()
持有每個連接多個鎖(強調):
如果你有GET_LOCK()獲得的鎖,它被釋放當你執行RELEASE_LOCK(),執行一個新的GET_LOCK(),或者連接終止(正常或非正常)
由於丹尼爾張貼,有這個功能feature request,但它是在2003年沒有任何活動提交。
根據您的使用情況,您可能能夠使用MySQL的表或行級鎖定來實現您想要的。
更新「在5.7.5之前,只能獲得一個同時發生的鎖,並且GET_LOCK()會釋放任何現有的鎖。」 「在MySQL 5.7.5中,....可以獲取多個同時鎖。」 –
MySQL 5.7.5和MariaDB 10.0.2現在都支持您的用例。
對於MySQL看到:http://dev.mysql.com/doc/refman/5.7/en/miscellaneous-functions.html#function_get-lock
對於MariaDB的看到:https://mariadb.com/kb/en/mariadb/documentation/functions-and-operators/miscellaneous-functions/get_lock/
雖然這在理論上可以回答的問題,[這將是優選的](http://meta.stackexchange.com/q/8259)在此包括答案的重要部分,並提供供參考的鏈接。 – Kev