1. 程式人生 > >MySQL性能優化-內存參數配置

MySQL性能優化-內存參數配置

性能問題 體系 .net 協議 配置 sort odbc image 分配內存

  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性能優化-內存參數配置