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


從事IT行業十五年+,最近有個運行中項目的列表頁面,在本地測試台式機執行效率在三秒以內,布署到服務器(32G內存,16G Cpu)后反而執行20秒+  ,百思不得其解。

 

解決辦法

※以下部分內容來自博主的文章

1.首先查看max_write_lock_count

個人認為這不是報錯的主要原因,因為這是寫入空間,如果報錯則應該會在導入數據時報錯,而不是到運行查詢分類時報錯(純粹個人見解,如若不當請多包涵!)
查詢語句show global variables like 'max_write_lock_count';

 


可以看出這個空間的value值有4G,足夠存儲我的數據,應該不是報錯主因。

2.其次查看innodb_buffer_pool_size

查詢語句show global variables like 'innodb_buffer%';

 


innodb_buffer_pool_size 的默認大小為 8M,
即緩沖區的大小只有8M,完全不足以處理龐大的數據量,
所以我們需要修改這個值的大小(value值大小可根據自己需求修改):
修改語句set global innodb_buffer_pool_size=4294967296;               這句是解決問題的關鍵。優化緩沖區內存。 innodb_buffer_pool_size=12000M

 


修改完畢后再次在Workbench 或 Navicat Premium 12 中運行嘗試:

 可以正常運行啦~

至此,該部分問題解決,希望對大家有所幫助!

 

Mysql對於內存的使用,可以分為兩類,一類是我們無法通過配置參數來配置的,如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倍以上內存的和。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM