資料庫應用優化(二)伺服器和配置優化

最閒的碼農發表於2019-02-26
用途:       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.需要定期歸檔的資料
     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 進行碎片整理。

相關文章