簡體   English   中英

什么時候表格從MyISAM改為InnoDb?

[英]When it is time for a table to change from MyISAM to InnoDb?

這個問題就像我之前的問題的延續: 我是否正確InnoDb比MyISAM更頻繁的並發更新和插入?

但這次我有具體的問題。
我們知道,當我們沒有很多並發更新(插入)時,MyISAM比InnoDb更快。 當我們有許多並發更新時,MyISAM表被鎖定,所有其他客戶端應該等待。

1)但是什么時候從MyISAM改為InnoDb? 每秒更新1次? 每秒10次更新? 每秒100次更新?
2)對於一個具體的例子,最好是在我的網站上的一個表格中更改為InnoDb,我通常每分鍾有幾個更新(來自不同的會話),但有時它可以每秒2-3次更新?

我認為你提到的上一個問題已經回答了你的問題。

1)創建表時。 InnoDB提供的優勢不僅僅是行級鎖定。 當你有多個sql客戶端進行更新時,速度更快,數據丟失/損壞的風險更小,參照完整性等...只需每秒幾個事務(TPS)你就不太可能分辨出性能差異,但是InnoDB更可靠,更好地擴展。

2)只有2-3 TPS你不會看到InnoDB和MyISAM之間有任何顯着差異。 即使是半古代的硬件。

僅供參考,現代磁盤驅動器應該能夠每秒處理至少約200次更新事務。

我建議您閱讀InnoDBMVCCACID

如果可以,您可能不應該一次更改一個表。

更改整個服務器。 這樣,您可以針對僅限innodb的工作負載而不是myisam工作負載調整服務器。 這兩者是互不兼容的(為特定引擎分配內存緩沖區;它們不能共享內存)。

假設您有16G的ram,如果您沒有MyISAM表,您可能希望使用大約12G作為innodb緩沖池。

同樣,如果你只有MyISAM表,你可能想要完全關閉innodb,並給你的myisam密鑰緩存少一半(比如說6G)。

混合的myisam-innodb服務器需要權衡內存調整。

此外,您只想進行一次性能測試,而不是每次更改表時。

在某些情況下,這是一個巨大的過度簡化,而在其他人中說“我們知道MyISAM比InnoDb更快”是完全錯誤的。

如果您已經為服務器正確調整了InnoDB並運行了適當的服務器級硬件,那么InnoDB應該能夠在大多數查詢中與MyISAM競爭(不包括全表掃描,但是你沒有做很多這樣的事情,對吧)。

也就是說,除非你的數據是“瑣碎的笑話”大小。

如果你發現innodb對於插入/更新來說要慢得多,請記住它提供了更好的耐用性 - 如果你調整它與MyISAM大致相同的耐久性,那么你會看到良好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM