標籤:cpu 溢出 安全 關聯 宕機 緩衝區 image img 記憶體
Mysql對於記憶體的使用,可以分為兩類,一類是我們無法通過配置參數來配置的,如Mysql伺服器運行、解析、查詢以及內部管理所消耗的記憶體;另一類如緩衝池所用的記憶體等。
Mysql記憶體參數的配置及重要,設定不當很有可能會造成很大的效能問題甚至是伺服器宕機,記憶體相關參數的配置需要考慮以下兩點:
(1)確定可以使用的記憶體上限;
(2)確定Mysql每個串連使用的記憶體;
在Mysql的體系中(如所示),簡單來說可以分為兩層,第一層代表各種可以用過Mysql連線協定串連到Mysql的用戶端,例如PHP、JAVA、C API 、.NET、ODBC、JDBC等等,這一層主要負責串連管理、授權認證、安全等,串連到Mysql的用戶端都會在伺服器的進程中有一個獨立的線程,這個串連的查詢只會單獨的在這個線程中執行,也就是並不支援多CPU的並發運算。第二層可以概括為Mysql的服務層。
在伺服器中每個串連所分配的記憶體主要由下面四個參數控制:
(1)sort_buffer_size 串連進行排序時候分配該配置參數大小的記憶體進行排序操作,比如該大小設定為100M,如果有100個串連同時進行排序將分配10G的記憶體,很容易造成伺服器記憶體溢出;
(2)join_buffer_size 定義mysql的每個線程所使用串連的緩衝區的大小,對於這個參數需要注意的是,如果一個查詢中關聯了多張表,那麼就會為每個關聯分配一個串連緩衝,所以每個查詢可能會有多個串連緩衝;
(3)read_buffer_size 對MyISAM表進行全表掃描時分配的讀緩衝池的大小,mysql只會在有查詢需要時為該緩衝分配記憶體,分配的記憶體為配置參數指定記憶體的大小,大小一般為4K的倍數;
(4)read_rnd_buffer_size 索引緩衝的大小,有查詢需要時才分配記憶體,分配的大小為需要記憶體的大小,而不是配置參數的大小;
上面四個參數全部是為每個線程分配的,如果有一百個串連可能會分配100倍以上記憶體的和。
MySQL效能最佳化-記憶體參數配置