2015-12-11 46 views
0

使用InnoDB,如果有一個進程從表中讀取數據,而另一個進程寫入同一個表,那麼是否存在爭用問題?有多個讀寫器的MySql InnoDB爭用問題

+0

'adaptive hash index' has contention issues - https://dev.mysql.com/doc/refman/5.5/en/innodb-adaptive-hash.html。我遇到了這個問題,不能完全記住這個場景,但是如果你有一個巨大的索引大小,並且啓用了這個選項,那麼你可能會面臨這個問題。 – Tapos

回答

1

是的,有爭用。但InnoDB非常努力地(1)儘量減少對用戶的影響,並且(2)解決導致「衝突」的爭用。

讀者掛在他們正在查看的行上,但僅足以防止寫入在完成之前更改值。 (這是一個漫長而複雜的話題,涉及「事務隔離模式」等)

寫入程序阻止行以防止其他寫入腳踩到腳趾上。

如果兩個線程嘗試觸摸同一行,其中一個線程可能會被迫等待,直到另一個線程完成其「事務」。

在更極端的情況下,每個線程都會等待另一個線程,發現「死鎖」。這導致一個事務被「回滾」。

底線:爭用很少成爲問題。但是,您應該在每個SQL語句後檢查錯誤,以防發生死鎖。