工作遇到一個情況是索引相同的情況下,mysql服務在linux上運行很快,在windows服務器上運行很慢,版本是V5.7以后得版本,同事查找了下說應該設置
SET GLOBAL innodb_buffer_pool_size =n,這個值貌似默認為128M。作用是
表示緩沖池字節大小,InnoDB緩存表和索引數據的內存區域。mysql默認的值是128M。最大值與你的CPU體系結構有關,在32位操作系統,最大值是 4294967295 (2^32-1) ,在64 位操作系統,最大值為18446744073709551615 (2^64-1)。在32位操作系統中,CPU和操作系統實用的最大大小低於設置的最大值。如果設定的緩沖池的大小大於1G,設置innodb_buffer_pool_instances的值大於1
其中n這個值越大性能越好,這個說法是不科學的,
但是查了一下網上的說法,正確的配置方法,應該是根據下面的情況來判斷
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_data';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_buffer_pool_pages_data | 1388 |
+-------------------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_total';
+--------------------------------+--------+
| Variable_name | Value |
+--------------------------------+--------+
| Innodb_buffer_pool_pages_total | 131071 |
+--------------------------------+--------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
'Innodb_buffer_pool_pages_data' X 100 / 'Innodb_buffer_pool_pages_total'
當結果 > 95% 則增加 innodb_buffer_pool_size, 建議使用 ram total 75%
當結果 < 95% 則減少 innodb_buffer_pool_size,
建議 'Innodb_buffer_pool_pages_data' X 'Innodb_page_size' X 1.05 / (1024*1024*1024)
如果不在合理范圍內的話貌似設置的數值再大也不能體現出優化效果,反而可能會造成
操作系統變慢占用更多的內存。