2010-01-08 95 views
1

我剛剛讀了很多關於MyISAM和InnoDB的內容,因爲我必須決定使用哪種類型。 InnoDB總是提到'行級鎖定'支持。當然,這隻對一定數量的行有意義。InnoDB行級鎖定性能 - 多少行?

(大約)會有多少人?

編輯:顯然我錯誤措辭我的問題。我知道表鎖和行鎖是什麼意思,但是我想知道這個確實很重要。 如果我每天只插入100行,當然表鎖定是足夠的,但對於一個例子,比如我認爲每秒100行,InnoDB將是更好的選擇。

我的問題:對於每秒10行或每秒5行,行也鎖定有意義嗎?這種選擇何時會顯着影響性能?

回答

2

這並不完全清楚你問的是什麼。鎖定確保只有一個用戶在任何給定的時間嘗試修改給定的行。行級鎖定意味着只有他們正在修改的一行被鎖定。通常的選擇是在修改期間鎖定整個表,否則鎖定表的一部分。行級鎖定只是將行的子集減少到仍能確保完整性的最小數量。

這個想法是允許一個用戶修改一件事而不阻止其他用戶修改其他事物。但值得注意的是,在某些情況下,這可能是一種誤報,可​​以這麼說。有幾個數據庫支持行級鎖定,但是使行級鎖更加昂貴,以致鎖定大部分表 - 足夠昂貴而且可能適得其反。

編輯:您對原帖的編輯有幫助,但不是很多。首先,所涉及的行數和硬件級別的大小有很大的影響(將8字節的行插入十幾個15K SAS硬盤驅動器比將1兆字節行插入單個消費級硬盤驅動器要快一點)。

其次,它主要是關於併發用戶的數量,所以插入模式有很大的不同。凌晨3點插入的1000行可能根本不會被察覺。在一天中均勻插入1000行意味着更多(但可能只是一點點)。當100個其他用戶立即需要數據時,1000行作爲批量插入,可能會引發某人(特別是如果其中一個人是公司的所有者)。

+0

請在原帖中看到我的編輯 – Psaniko 2010-01-08 16:07:59

+0

謝謝,我想我會測試這兩種類型,看看哪一個適合我。 – Psaniko 2010-01-09 12:31:04

0

MyISAM表支持併發插入(又稱沒有表鎖定插入)。所以如果你符合標準,就沒有問題了: http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html

所以,就像大多數事情一樣,答案是「取決於」。沒有亮線測試。只有你可以做出決定;我們對你的應用/硬件/使用情況統計數據/等一無所知。並且根據定義,它不可能比你更瞭解它。