MySQL My.cnf参数梳理与延伸 (MYSQL 8 INNODB 类)

2023年 11月 20日 62.7k 0

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,(共1720人左右 1 + 2 + 3 + 4) 3群突破 490已关闭自由申请如需加入请提前说明,新人会进4群(210+)准备开5群,另欢迎 OpenGauss 的技术人员加入。

在MySQL8 innodb 参数中有一些需要在在重新梳理,发现一些新版本的添加的参数,更新知识,也将老的知识在重新唤醒。

mysql> show variables like 'innodb_buffer%';
+-------------------------------------+----------------+
| 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_in_core_file     | ON             |
| innodb_buffer_pool_instances        | 2              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | ON             |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 2147483648     |
+-------------------------------------+--------------

1 innodb_adaptive_flushing
这个参数的主要功能是,调整在数据脏页产生后的刷新的频率,在数据库中产生脏页后,使用什么方式进行数据写入到磁盘在打开这个参数的时候,系统会在整体系统负载低的时候,更积极的刷新脏页到磁盘,而在高负载情况下,则会尽量延迟进行脏页的刷新。

2 innodb_adaptive_flushing_lwm

这个值是配合上面的参数,当REDO LOG 容量达到水位线超过这个参数设置的阀值,则innodb_adaptive_flushing 的参数的功能就会被临时禁止。

3 innodb_adaptive_hash_index 

innodb_adaptive_hash_index 是MySQL InnoDB中控制是否启动自适应HASH 索引的函数,innodb存储引擎在使用B+树来加速数据访问的同时,可以使用自适应hash索引在内存中维护一个hash的索引结构,加速特定查询的性能。通过这样的方案,可以减少磁盘I/O,提高查询性能。

4  innodb_adaptive_hash_index_parts

这个参数是用来控制自适应HASH的分区格式,提高查询的并行性和性能,默认这个数值是8 ,提高这个值会提高内存分配。

5  innodb_autoextend_increment

在使用INNODB数据库引擎的时候底层的数据文件是需要随着数据的增长而进行扩展的,这个参数是针对每次扩展中可以扩展的空间的大小进行设置的参数,默认值为64MB,对于大量写入的数据表,可以针对表本身通过参数alter table 中针对表进行特殊表的控制来完成大量输入表的扩展参数设置,autoextend_size 可以针对这部分来进行工作。

6  innodb_autoinc_lock_mode

在MySQL中是提供自增主键的机制,其中与其他数据库不同的是,提供自增主键的步长和分配机制是数据库整体提供的,3种不同的分配的方式分别为

2 interleaved 在分配时会使用自增锁定和共享锁定,8.0默认的方式,性能在高并发时可以接受,但不能保证行分配时的需要的顺序性

1 conseutive  自增锁定和排他锁定,在保证分配的ID的顺序性的基础上,会在高并发时严重阻塞事务处理,默认禁止使用

7  innodb_buffer_pool_chunk_size 这个参数定义了innodb存储引擎使用的内存缓存区域,用于缓存数据和索引页面,他定义了innodb缓冲池内部数据的结构大小以MB为单位,这个参数是在5.7.5版本中引入的默认值为128MB,增加数值可以提高innodb buffer pool 的性能,此参数与内存的大小有关,大部分情况不需要改变此参数大小。 8 innodb_buffer_pool_dump_at_shutdown    参数是源于数据库关闭时将innodb 缓冲区的内容转储到磁盘文件中的开关,当这个参数为ON,则重启数据库等工作后,缓冲区会加载数据,默认为OFF

9  innodb_buffer_pool_dump_now    参数是即时参数,主要的作用是将当前的 innodb_buffer_pool 中的数据刷新并变成文件通过

set global innodb_buffer_pool_dump_now = ON; 在数据库内部进行相关的工作,权限必须为super 和 sys .

 

10 innodb_buffer_pool_dump_pct     参数为每个POOL 每次刷新到磁盘的数据占总需要刷新数据的百分比,默认为25% 

11  innodb_buffer_pool_filename  参数为刷新内存的数据到磁盘上文件的文件名,默认为ib_buffer_pool

12 innodb_buffer_pool_instances 参数是我们经常在安装数据库时进行调节的,这个参数需要根据当前的CPU的数量进行调节,一般是CPU - 2,通过这个参数可以将内存块进行分割,通过CPU 和内存更有效的匹配达到更有效的内存使用效率的提升。

13  innodb_buffer_pool_load_at_startup 这个参数本身主要的目的是在数据库开启时,将关闭或手动操作时的数据,加载到数据库innodb buffer 中。

14  innodb_buffer_pool_load_now  此参数和上面的参数一样都是即时变量,在设置时,会将当前buffer 在磁盘的文件进行读取,一般使用这个变量的情况,较低。

15 innodb_change_buffering  在MYSQL 数据写入中,在表中存在二级索引,在有二级索引的情况下,数据如何写入到二级索引,提高效率是一个需要优化,默认值会将数据顺序化后,在一次性的写入到INDEX文件中,此参数针对数据的 inserts ,  deletes , update  purges , 等都可以进行二级索引处理的优化, 这里可以选择的参数有如下参数,none  inserts  deletes  changes  purges  all,默认值all
16 innodb_commit_concurrency 此参数是作为innodb存储引擎的一个配置参数,用于控制并发提交的行为,参数决定了并发事务提交时是否允许多个线程同时执行提交操作,值的可选范围为 0 1 以及> 1 的配置。这里注意几个问题 1  不能设置为> 1的参数,在设置为大于1 的情况下,无法保证数据的一致性2  设置为1 在高并发多个线程要同时提交需要获取锁,获取锁并和顺序提交相比较并不一定更好。3 默认为0 线程需要按照他们执行事务的顺序来进行提交。
17 innodb_buffer_pool_size  这个参数主要控制数据库使用多少系统提供的主内存,一般MYSQL中的设置的参数值在总体的内存的 65% - 80%之间,具体和数据库承接的业务模式与并发有关,云数据库此参数一般多为75%以下。
18 innodb_commit_concurrency 这个参数提交事务的数量是否被限制,默认值为0 不限制,最大值1000 ,此参数不需要进行改变。19 innodb_concurrency_tickets  这个参数是innodb  存储引擎的一个配置参数,默认值是500,在并发访问中,通过提高这个参数的值提高innodb 并发可以处理的任务的性能,提高值的情况下会消耗更多的内存。

20 innodb_data_file_path 在安装MYSQL时,可以通过此参数来设置innodb的系统的数据文件存放的位置

21 innodb_doublewrite_dir    innodb_doublewrite_files 
MySQL 在保证数据库数据不丢失中对于数据库突然遭受断电中,保证数据库在重启时可以将断电时的损坏的页面进行恢复,可以通过两个参数设置DW数据文件存储的位置和文件的数量。
innodb_doublewrite_dir = path/to/doublewrite

innodb_doublewrite_files = 4


22 innodb_ddl_buffer_size 这个参数是8.027 后的版本提出的,单位bytes,默认大小为1MB,主要应用于创建二级索引中使用,较大的设置有利于建立索引时提高速度

23  innodb_ddl_threads 这个参数是8.027 后版本提出的,主要作用在进行建立索引时,通过多线程来进行工作,提高创建索引的效率。

24 innodb_deadlock_detect ,MySQL 是可以通过自身来发现存在的死锁情况,但通常在设置中这个位置默认是值是NO ,主要是开启发现死锁的设置后,会对系统的性能有影响,所以大部分情况下MySQL对于死锁的处理借助的是 innodb_lock_wait_timeout 来解决。

25  unique_checks 这里在系统导入数据的时候,对于唯一索引的数据导入是要进行检测的,通过unique_checks 来打开或关闭数据导入时对数据的检测,达到加速数据导入,或严格控制数据导入的准确性的工作,可以在导入数据报错时在session级别设置,帮助数据的导入。

26 innodb_write_io_threads ,在写入数据中,一个session可以最大并发使用多少线程来操作IO的写入,默认值4 , 调整数值与IO设备有关,IO设备性能低下,调整次数会导致反向作用

27 innodb_read_io_threads , 在读取数据是,一个 session可以最大并发使用多少线程来操作IO的读取,默认值4, 调整数值与IO设备有关,IO设备性能低下,IO设备繁忙,增大此参数需要谨慎。

28 innodb_doublewrite 在8.030之前 ,只有ON OFF, 在8.030后的版本提供了  DETECT_AND RECOVER,这个设置与ON 类似,同时提供DETECT_ONLY这个设置则只对元数据写入,而对于数据则不进行,目前的情况如果没有fusion-io设备则还是使用默认的ON 即可。

29 innodb_use_fdatasync  这个参数是8.026开始提供的参数,默认是关闭,在现在的LINUX 系统中,如果系统支持fdatasync 支持,则使用fdatafync 替换 fsync 的数据刷新方式

30 innodb_undo_tablespaces 这个参数是在8.014提供的默认值2 , 最大值127, 这个参数会在未来的版本被剔除

31  innodb_undo_directory 在针对高性能的主机中可以将UNDOLOG的文件存储在更高性能的存储设备,通过这个来讲UNDO和数据存储空间分离

32  innodb_sync_spin_loops 默认值30, 这里主要是等待线程被挂起前等待innodb互斥锁的次数。当一个线程要访问互斥中保护的资源,需要等待互斥锁被释放,这里建议如果是并发较多的数据库服务器,可以调整此参数到100.

33 innodb_sort_buffer_size  在8.027 后的MySQL中对于在线DDL操作或重建二级索引提供排序缓冲区大小,同时在innodb 引擎数据操作中有数据查询需要进行排序,也可以提供缓存支持。

34 innodb_rollback_on_timeout   事务在回滚中如果超时将终止回滚,这个不要进行设置默认值 OFF

35  innodb_purge_threads  默认4, 这个是在UNDO LOG中里的数据过时后,有多少线程来回收数据,这里如果是高频的进行UPDATE 则如果有UNDO SPACE 产生不足的情况下,可以增加线程来提高回收的速度,这个参数在早期不能调整 只能 值为1.

36  innodb_print_all_deadlocks 在MYSQL中默认为OFF,如果为OFF则日志中不会出现死锁的记录,只能show engine innodb status 中发现最后一次记录的死锁。

37  innodb_lru_scan_depth  这是影响INNODB 缓冲池算法和启发方式的参数,这里主要涉及在LRU算法中,到底要针对页面清理程序要找到脏页的深度,这里不建议随意调整,默认1024,提高参数值会影响数据库运行的性能,密集型写入的系统可以适当减少值,提高性能。

38 innodb_io_capacity  与 innodb_io_capacity_max 这两者提供了刷新脏页时,数据库系统针对IO能力的判断,一般情况下极差的IO系统在2000 4000, 如果是服务器级别的系统可以调整到更高8000 10000, 一些IO系统甚至可以调整到 10000 20000.但需要知晓如果低级的IO系统使用较高的数值,会导致在页面刷新时,系统出现卡顿。

39  innodb_flush_log_at_trx_commit, 这个值默认为1 ,这里在数据库系统中不建议随意更改此值,1为在事务commit 时会触发日志刷新数据到磁盘的工作,如果调整为0 则不是,刷新日志会每秒刷新一次写入到磁盘,而2 则日志在每个事务提交后被写入,然后1秒刷新一次到磁盘。

这里为保证数据库的ACID ,不建议更改默认值,但为性能,可以考虑修改为2 ,但做好丢失数据库的可能性尤其在系统CRASH 的情况下。

40 innodb_flush_log_at_timout 默认值为1 ,这里1是指秒,和上面的参数值是一个附属关系,这里不建议调整,同时在上面的配置为默认的情况下,此值不起到作用。

41 innodb_flush_method 这里默认值为fsync, 在8.0中这些值改为数据表达,fsync = 0  , o_dsync = 1 , o_direct = 4 ,在 8.026 后刷新根据系统可能会调整为fdatasync()

42 innodb_fill_factor 这里如果是一般的系统建议设置为 80 - 90 ,默认值为100, 调整值后,整体的表的填充因子会变化。

43 innodb_file_per_table = YES ,必须为YES

44  innodb_fast_shutdown = 1 不要修改此值数据库关闭时内存数据处理的方式。

45 innodb_monitor_enable 默认为关闭,这里建议打开此设置,同时打开此值需要调整preformance_schema,将一些不需要获取数据的参数关闭,减少系统的消耗和内存的消耗。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论