1. 程式人生 > >mysql中有多種存儲引擎,每種引擎都有自己的特色

mysql中有多種存儲引擎,每種引擎都有自己的特色

瓶頸 表數 ron s參數 req 100% read 鎖定 服務

mysql中有多種存儲引擎,每種引擎都有自己的特色。

用途: MyISAM:快讀,
Memory:內存數據,
InnoDB:完整的事務支持 鎖: MyISAM:全表鎖定,
Memory:全表鎖定,
InnoDB:多種隔離級別的行鎖 持久性:MyISAM:基於表恢復,
Memory:無磁盤I
/O,無可持久性,
InnoDB:基於日誌恢復 事務類型:MyISAM:不支持,
Memory:不支持,
InnoDB:支持 支持索引類型:MyISAM:B
-tree/FullText/R-tree,
Memory:Hash/B-tree,
InnoDB:Hash/B-tree MyISAM註重性能,InnoDB註重事務,一般使用MyISAM類的表做非事務型的業務,最新的mysql建表默認都 是InnoDB類型的。MyISAM在高並發的性能瓶頸很明顯,主要原因就說鎖定機制導致阻塞。而InnoDB在 鎖定機制采用行行級鎖,不同於MyISAM的表級鎖,行級鎖在鎖定上帶來的消耗大於表級鎖,但是在系統並 發訪問量高時,InnoDB整體性能高於MyISAM。同時,InnoDB的索引不僅緩存索引本身,也緩存數據, 所以InnoDB需要更大的內存。
選擇合適存儲引擎 (
1)采用MyISAM 引擎
1.R/W(讀寫比例)>100:1切update相對較少 2.並發不高,不需要事務 3.表數據量小 4.硬件資源有限 (2)采用InnoDB 1.R/W(讀寫比例) 較小,頻繁更新大字段 2.表數據量超過1000W,並發高 3.安全性和可用性要求高 (3)采用Memory 1.有足夠的內存 2.對數據一致性要求不高 3.需要定期歸檔的數據 mysql服務器調整優化措施
1.關閉不必要的二進制日誌和慢查詢日誌,僅在內存足夠和開發調試時打開他們,使用下面的語句查看是否打 開。 show variables like
‘%slow%‘;
還可以使用下面的語句查看慢查詢的條數,定期打開方便優化
show
global status like ‘%slow%‘;
但是慢查詢也會帶來一些CPU損耗,建議間斷性打開慢查詢日誌來定位性能瓶頸
2.適度使用Query,Cache
3.增加mysql允許的最大連接數,使用下面的語句查看mysql允許的最大連接數 show variables like ‘max_connections‘;
4.對於MyISAM表適當增加key_buffer_size,這需要根據key_cache的命中率進行計算,例如: show global status like ‘key_read%‘; 計算方式 key_cache_miss_rate=Key_reads/Key_read_requests*100%; 當key_cache_miss_rate值大於1%時就需要適當增加key_buffer_size了,對於MySAM,還需要註table_cach e的設置。當table_cache不夠用的時候,mysql會采用LRU【緩存淘汰算法】踢掉最長時間沒有使用的表;如果table_cache設置 過小,MySAM就會反復打開、關閉FRM文件,造成一定的性能損失;如果table_cache 設置過大,mysql將會消耗很多CPU資源 去處理table_cache的算法。因此table_cache值一定要合理,可以參考opened_tables參數的值,如果這個值一直增長,就需要適當增加table_cache值, 對於InnoDB,需要重點註意,innodb_buffer_pool_size參數。
5.從表中刪除大量行後,可運行OPTIMIZE TABLE TableName 進行碎片整理。

mysql中有多種存儲引擎,每種引擎都有自己的特色