mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)
1. innodb_lock_wait_timeout
mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间后回滚。系统默认值是50秒。用户可以根据业务自行设置。生产环境不推荐使用过大的 innodb_lock_wait_timeout 参数值。
-- 查看事务超时时间 SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
也可以对当前会话进行超时设置如: set innodb_lock_wait_timeout=1000。关于产生死锁的原因,如何查看分析死锁问题, 如何优化尽量避免死锁,请查看"mysql 开发进阶篇 锁问题系列"。
2. innodb_support_xa
通过该参数设置,是否支持分布式事务。默认值是ON或者1,表示支持分布式事务。
分布事事务分两类:
(1)是外部xa事务(支持多实例分布式事务)。
(2)是支持内部xa事务(支持binlog和redo_log之间数据一致性)。
如果关闭这个参数,据前辈们说可能会影响到:1是主从复制binlog与redo_log不一致,2是binlog与redo_log事务顺序不一致性。
-- 查看是否支持分布式事务 SHOW VARIABLES LIKE 'innodb_support_xa';
3. innodb _log_buffer_size
这个参数是指日志缓存的大小。默认的设置在中等强度写入负载以及较短事务的情况下,一般都可以满足服务器的性能要求。如果存在更新操作峰值或者负载较大,就应该考虑加大它的值。 如果值设置太高,可能会浪费内存,因为它每秒都会刷新一次,因此无需设置超过1秒所需的内存空间(理解是每1秒刷新后,日志缓存会清空)。通常设置为8~16MB就足够了。系统默认是16M。
-- 查看日志缓存空间大小 SHOW VARIABLES LIKE 'innodb_log_buffer_size';
16777216.0/1024.0/1024.0=16M
4. innodb_log_file_size
这个参数是一个日志组(log group)中每个日志文件的大小,也叫事务日志文件大小。此参数在高写入负载尤其是大数据集的情况下很重要.这个值越大则性能相对越高,但副作用是当系统发生灾难时恢复时间会加大。系统默认是48M。
(1) 小日志文件使写入速度更慢,崩溃恢复速度更快。原因是由于事务日志相当于一个写缓冲,而小日志文件会很快的被写满,这时候就需要频繁地刷新到硬盘,速度就慢了。如果产生大量的写操作,会增加checkpoint写的次数,如果不能足够快地刷新数据,那么写性能将会降低,。相反文件空间大,在刷新操作发生之前给你足够的空间来使用。
(2) 大日志文件使写入更快,崩溃恢复速度更慢。
-- 查看每个日志文件的大小 SHOW VARIABLES LIKE 'innodb_log_file_size';
268435456.0/1024.0/1024.0=256M
5. innodb_log_compressed_pages
这个参数是指:日志文件页存储压缩。系统默认是ON , 将减少redo log的写入量。
6. innodb_log_checksums
这个参数是指:写入redo log到文件之前,redo log的每一个block都需要加上checksum校验位,以防止apply损坏redo log。
7. innodb_log_write_ahead_size
这个参数是指: redo log写前的块大小。系统默认是8192字节。
8. innodb_log_files_in_group
这个参数是指:该变量控制日志文件数。默认值为3。日志是以顺序的方式写入。结合innodb_buffer_pool_size设置其大小。一般不用设置。
9. innodb_log_group_home_dir
这个参数是指:日志组所在的路径。
-- 所有日志参数如下 SHOW VARIABLES LIKE 'innodb_log%';