优化MySQL Server相关参数学习笔记

优化MySQL Server相关参数

mysql数据页大小一般是16K,操作系统IO数据页大小一般是4KB。

innodb内存优化:

1、原则:将尽量多的内存分配做缓存,但要给操作系统和其他程序运行预留足够的内存

2、排序区、连接区等缓存是分配给每个数据库会话专用的,其默认值的设置要根据最大连接数合理分配。太大不但浪费资源,而且在并发连接较高时导致物理内存耗尽。

 

3、innodb_buffer_pool_size:决定innodb存储引擎表数据和索引数据的最大缓存区大小。同时为数据块和索引块提供数据缓存。值越大缓存命中率越高。通过show variables like '%innodb_buffer_pool%';查看相关参数

+-------------------------------------+----------------+

| Variable_name | Value |

+-------------------------------------+----------------+

| innodb_buffer_pool_chunk_size | 134217728 |

| innodb_buffer_pool_dump_at_shutdown | ON |

| innodb_buffer_pool_dump_now | OFF |

| innodb_buffer_pool_dump_pct | 25 |

| innodb_buffer_pool_filename | ib_buffer_pool |

| innodb_buffer_pool_instances | 1 |

| innodb_buffer_pool_load_abort | OFF |

| innodb_buffer_pool_load_at_startup | ON |

| innodb_buffer_pool_load_now | OFF |

| innodb_buffer_pool_size | 134217728 |

+-------------------------------------+----------------+

4、在LRU sublist中,innodb_old_blocks_pct决定old sublist的比列,默认是37,在没有大表扫描或是索引扫描的情况下,如果young/s值很低,就需要增大innodb_old_blocks_pct或是减小innodb_old_blocks_time

 

5、调整缓存池数量:innodb_buffer_pool_instances,对于较大的缓存池,可以适当增大此值。

 

6、innodb_max_dirty_pages_pct:控制缓存中脏页(即内存数据页和磁盘数据页不一致时,称这个内存页为脏页)的比例,默认是75%,如果脏页数量达到或是超过这个值时,innodb后台线程开始将内存中的数据刷到磁盘(顺序存储)空间。当脏页比例小于此值时,如果innodb_adaptive_flushing的设置为true,innodb将根据函数buf_flush_get_desired_flush_rate返回的重做日志产生速度来确定刷脏页数量,在合并插入缓存时,innodb每次合并的页数是0.05*innodb_io_capacity。如innodb_buffer_pool_wait_free的值增长较快,则说明innodb经常等待空闲缓存页,如果无法增大缓存池,那么应该将innodb_max_dirty_pages_pct调小,或将innodb_io_capacity调高,以加快脏页的刷新。 innodb_flush_neighbors表示在刷脏页时,是否将左右相邻的脏页一起写入磁盘,并且可以蔓延也就是对于每个邻居的数据页和字相邻的数据页也是脏页的话也会被一起刷,默认0

 

7、Innodb_log_buffer_size减少日志写磁盘操作,从而提高事务处理性能。就是redo log buffer的大小(内存)参见redo log部分。

 

8、Innodb_io_capacity磁盘系统的io能力,一定程度代表磁盘每秒io次数,默认200,决定一批刷新脏页的数量。固态硬盘和阵列可适当增大此值。

 

9、thread_cache_size:控制mysql缓存客户服务线程的数量可以通过threads_created/connections来衡量设置是否合适,值越接近1,则说明线程命中率低,考虑适当增加thread_cache_size值

 

10、max_conections:控制允许连接到mysql数据库的了最大数量。默认200(5.6),151(5.7)

 

11、back_log:此参数控制监听TCP端口时设置的积压请求栈大小,5.6.6以前默认是50,以后默认值是50+(max_connections/5),但最大不能超过900,如果数据在较短时间内处理大量请求,可以适当增加此值

 

12、innodb_file_per_table=on, mysql innodb的独立表空间和共享表空间,独立表空间是把每个表的数据和表文件放在一起。共享表空间是所有库的数据都放在ibdate1文件中,网上说这个文件你删除数据,不会收缩,也就是说如果你这个文件有40G,你删了表数据,这个文件还是40G,这就很恐怖了,所以我们换成独立表空间。还有就是虽然说独立,但个人觉得还真不是很彻底,我把那些文件复制到另一个库里面,只有表,没有数据,所以不彻底啊!

 

定期分析表analyze table ,optimize table,analyze check optimize alter table 执行期都会锁表。 通过设置innodb_file_per_table=1,每个表都会生成一个独立的ibd文件,用于存储表的数据和索引,在删除大量数据后,可以通过alter table tablename engine=innodb回收不用的空间。

 

13、read_buffer_size和read_rnd_buffer_size:这两个都是按session独占的,增大read_rnd_buffer_size和max_length_for_sort_data可以改善order by sql性能。

Max_length_for_sort_data大小决哪种(共两种)排序算法,超过此值会使用磁盘临时文件排序

Max_sort_length变量可以指定当用blob或text前缀排序时,这个前缀有多大

Sort_buffer_size默认是全局的,一旦排序mysql会立刻分配指定大小内存不管是否需要这么大,可以查询前增加,如下所示

set @@session.sort_buffer_size :=409600

#执行语句

Set @@session.sort_buffer_size :=default,

14、Join优化:适当增大Join_buffer_size可改善连接查询性能

Sort buffer都是面向客户服务线程分配的,如果设置过大可能造成内存浪费。甚至导致内存交换,尤其是join buffer 多表关联的查询还可能会分配多个join buffer,因此最好的策略是设置较小的全局join_buffer_size,而对需要做复杂连接操作的session单独设置较大的join_buffer_size

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章