0
使用InnoDB,如果有一個進程從表中讀取數據,而另一個進程寫入同一個表,那麼是否存在爭用問題?有多個讀寫器的MySql InnoDB爭用問題
使用InnoDB,如果有一個進程從表中讀取數據,而另一個進程寫入同一個表,那麼是否存在爭用問題?有多個讀寫器的MySql InnoDB爭用問題
是的,有爭用。但InnoDB非常努力地(1)儘量減少對用戶的影響,並且(2)解決導致「衝突」的爭用。
讀者掛在他們正在查看的行上,但僅足以防止寫入在完成之前更改值。 (這是一個漫長而複雜的話題,涉及「事務隔離模式」等)
寫入程序阻止行以防止其他寫入腳踩到腳趾上。
如果兩個線程嘗試觸摸同一行,其中一個線程可能會被迫等待,直到另一個線程完成其「事務」。
在更極端的情況下,每個線程都會等待另一個線程,發現「死鎖」。這導致一個事務被「回滾」。
底線:爭用很少成爲問題。但是,您應該在每個SQL語句後檢查錯誤,以防發生死鎖。
'adaptive hash index' has contention issues - https://dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html。我遇到了這個問題,不能完全記住這個場景,但是如果你有一個巨大的索引大小,並且啓用了這個選項,那麼你可能會面臨這個問題。 – Tapos