盡量使用支持行級鎖定的存儲引擎,如InnoDB僅在讀操作明顯多於寫操作的場景中使用表級鎖的存儲引擎(如數據倉庫類的應用),如MyISAM。
2.減少熱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系統上,InnoDB可以通過將MySQL服務器變量innodb_use_native_aio的值設置為ON來使用Linux的異步I/O子系統。
4.並行後端任務
默認情況下,MySQL的清除操作(用於刪除標記為刪除的記錄)由InnoDB的主線程完成,這可以減少內部資源競爭的概率,從而增強MySQL服務的可擴展性。然而,隨著InnoDB內部競爭的加劇,這種設置帶來的性能優勢幾乎微不足道。因此,通過將innodb_purge_threads的服務器變量設置為on,主線程應該與生產環境中的清除線程分開運行。
5.單線程復制模型中的SQL線程是壹個熱點。
在從服務器上並行運行多個SQL線程可以有效提升MySQL從服務器的性能,MySQL 5.6支持多線程復制(每個庫壹個復制線程);