盡量使用支持行級鎖的存儲引擎,比如InnoDB僅在讀操作明顯多於寫操作的場景下(如數據倉庫類的應用)使用表級鎖的存儲引擎,如MyISAM。
2.降低hot gaint鎖的可能性,盡可能避免全局互斥。
關鍵區域(只有單線程可以訪問的資源)會嚴重降低MySQL系統的並發性;InnoDB緩沖池和數據字典是常見的關鍵區域。幸運的是,新版本的InnoDB已經能夠在多核處理器上很好地運行,並支持使用innodb_buffer_pool_instances服務器變量建立多個緩沖池實例。每個緩沖池實例管理自己的空閑列表、列表刷新、LRU和其他與緩沖池相關的數據結構,並受自己的互斥鎖保護。
3.並行運行多個I/O線程。
通過innodb_io_capacity服務器變量增加磁盤I/O線程的數量,可以提高前端操作(如SELECT)的性能,但磁盤I/O線程的數量不能超過磁盤的IOPS(7200 rpm下單片硬件的IOPS壹般在100左右)。
此外,異步I/O還可以在壹定程度上提高系統的並發性。在Linux系統上,通過將MySQL服務器變量innodb_use_native_aio的值設置為ON,InnoDB可以使用Linux的異步I/O子系統。
4.並行後端任務
默認情況下,MySQL的purge操作(用於刪除標記為刪除的記錄)由InnoDB的主線程完成,可以減少內部資源競爭的概率,從而增強MySQL服務的可擴展性。但是,隨著InnoDB內部競爭的加劇,這種設置帶來的性能優勢幾乎微不足道。因此,在生產環境中,通過將innodb_purge_threads的服務器變量設置為on,主線程應該與清除線程分開運行。
5.單線程復制模型中的SQL線程是壹個熱點。
在從服務器上並行運行多個SQL線程,可以有效提升MySQL從服務器的性能,MySQL 5.6支持多線程復制(每個庫壹個復制線程);