innodb引擎⼏个⽐较重要的配置参数
最近⼀直在学习mysql,以下内容是阅读mysql技术内幕--innodb存储引擎后做的笔记,主要是1-3章的内容
⼀.innodb和myisam的主要区别
innodb
1. ⽀持事务
2.锁粒度==>⾏级别
3.⽀持mvcc多版本并发控制
4.不⽀持地理空间
5.最⼤⽀持64TB存储
6.⽀持哈希索引
7.不⽀持全⽂索引(可以结合sphinx)
8.⽀持聚集索引
技术负责人任命书9.不⽀持压缩数据
10.⽀持外键
11.⽀持缓冲数据
myisam
1.不⽀持事务
2.锁粒度==>表级别
3.不⽀持mvcc多版本并发控制
4.⽀持地理空间
5.没有存储限制
株洲有什么好玩的地方景点推荐6.不⽀持哈希索引
7.⽀持全⽂索引
8.不⽀持聚集索引
9.⽀持压缩数据
10.不⽀持外键
11.不⽀持缓冲数据
⼆.innodb相关重要配置参数
innodb中⼤量使⽤了AIO(Async IO)来处理写IO请求,这样可以极⼤提⾼数据库的性能。⽽IO Thread的⼯作主要是负责这些IO请求的回调(call back)
innodb_read_io_threads
设置read thread(读线程个数,默认是4个)
innodb_write_io_threads
设置write thread(写线程个数,默认是4个)
事务被提交后,其所使⽤的undolog(撤销⽇志)可能不再需要,因此需要Purge Thread(清理线程)来回收已经使⽤并分配的undo页。innodb1.1版本之前,purge操作仅在innodb引擎中的Master Thread中完成。⽽从innodb1.1版本开始。purge操作可以独⽴到单独的线程中进⾏。以此来减轻Master Thread的⼯作。提⾼cpu使⽤率以及提升存储引擎性能。
innodb_purge_thread = 1
注意:在innodb1.1版本中,即使该值设置⼤于1,innodb启动时也会将其设置为1。并在错误⽂件中给出警告。
innodb1.2⽀持多个Pugre Thread线程。
innodb_buffer_pool_instances = 2
设置多个缓冲池实例,每个页根据哈希值平均分配到不同缓冲池实例中。好处在于减少数据库内部资源竞争。增加数据库并发处理能⼒。
innodb_old_blocks_pct
LRU算法,默认值是37,插⼊到LRU列表端的37%,差不多3/8的位置。innodb把midpoint之后的列表称为old列表,之前的列表称为new列表,可以理解为new列表中的页都是最为活跃的热点数据。
innodb_old_blocks_time
当第⼀次读取到的新页,innodb会根据innodb_old_blocks_pct设置的值将读取到的页插⼊LRU列表指定的midpoint(中间点)位置,如果没有修改,默认是37%,3/8的位置。防⽌将真正的new列表中的热点数据刷出。当再次读取到old列表中的页时也就是midpoint之后的页,innodb_old_blocks_time⽤于读取到old列表中的页时需要等待多久才会被加⼊到LRU列表的⾸部。防⽌new列中的热点数据被刷出。innodb_old_blocks_time默认值是0,没有等待。
innodb_log_buffer_size
默认是8M,⽤来缓冲⽇志数据的缓冲区的⼤⼩,当此值快满时, InnoDB将必须刷新数据到磁盘上. 由于基本上每秒都会刷新⼀次,所以没有必要将此值设置的太⼤(甚⾄对于长事务⽽⾔)
innodb_max_dirty_pages_pct = 75
在InnoDB缓冲池中最⼤允许的脏页⾯的⽐例,当缓冲池中脏页的数量占据75%时,强制进⾏checkpoin,刷新⼀部分的脏页到磁盘。意大利台地园
innodb_io_capacity
表⽰磁盘io的吞吐量,默认值是200.对于刷新到磁盘页的数量,会按照inodb_io_capacity的百分⽐来进⾏控制。
规则如下:
在合并插⼊缓冲时,合并插⼊缓冲数量为innodb_io_capacity 值的5%
在从缓冲池刷新脏页时,刷新脏页的数量为innodb_io_capacity的值,也就是默认值200.
如果使⽤了ssd,或者raid磁盘时,磁盘拥有更⾼的io速度,可以适当增加该参数的值。
计算机入门innodb_adaptive_flushing
⾃适应刷新脏页。默认已经开启。
革命红歌innodb_purge_batch_size
在进⾏full purge时,回收Undo页的个数,默认是20,可以适当加⼤。
innodb_fast_shutdown
在关闭时,该参数影响表innodb存储引擎⾏为。参数可取值为0,1,2,默认值是1.
表⽰在mysql数据库关闭时,innodb需要完成所有的full purge,merge inrt buffer,并且将所有脏页刷新回磁盘。如果在innodb进⾏升级时,必须将这个参数设为0.然后在关闭数据库.
1
默认值,表⽰不需要完成full purge和merge inrt buffer,但是在缓冲池中的⼀些数据脏页还是会刷新回磁盘。
2
表⽰不完成full purge和merge inr buffer操作,也不将缓冲池中的数据脏页刷新回磁盘,⽽是将⽇志写⼊⽇志⽂件,这样不会有事务丢失,但是下次数据库启动时,会进⾏恢复操作(recovery)
innodb_force_recovery
该参数影响了整个innodb存储引擎的恢复状况。该参数默认值为0,代表发⽣需要恢复时,进⾏所有的恢复操作,当不能进⾏有效恢复时,如数据页发⽣了损坏,把错误写⼊错误⽇志。
还可以设置为6个⾮零值:1-6,⼤的数字包含了前⾯所有⼩数字的影响。具体如下
1
忽略检查到的corrupt页
2
飞地艺术坊阻⽌master thread线程运⾏。如master thred需要进⾏full purge操作,会导致crash。
3
不进⾏事务的回滚。
4
不进⾏插⼊缓冲的合并操作
5
不查看撤销⽇志(undo log),innodb存储引擎会将未提交的事务视为已提交。
6
不进⾏回滚的操作
注意:
当该参数设置⼤于0以后,⽤户可以对表进⾏lect,create,drop,但是innrt,update,delete这类DML操作却是不允许的。
以下参数影响着⼆进制⽇志记录信息的⾏为:
max_binlog_size
binlog_cache_szie
sync_binlog
binlog-do-db
binlog-ignore-db
log-slave-update
master==>slave==>slave 架构必须开启此参数(slave端开启)
binlog_format
其中⽐较重要的是sync_binlog参数,如果想让replication得到最⼤的可⽤性。最好将该值设置为1.表⽰采⽤同步写磁盘的⽅式来写⼆进制⽇志。不过有⼀点是会给IO带来⼀定压⼒。
当sysnc_binlog设置为1以后,还有⼀个参数需要设置。innodb_support_xa.也需要将该值设置为1.避免事务不能被回滚的问题。
当进⾏replication时,最好将⼆进制格式改为row,避免master使⽤了rand,uuid等函数,或者触发器,导致主从服务器数据不⼀致。通常将binlog_format设置为row格式。
innodb_data_file_path
表空间的设置,默认配置下有⼀个初始⼤⼩为10MB,名为ibdata1的⽂件。⾃动增长。
⽤户可以通过多个⽂件组成⼀个表空间,同时定制⽂件属性,设置如下:
innodb_data_file_path= /db/ibdata1:2000M;/db2/ibdata2:2000M:autoextend
若这两个⽂件位于不同磁盘上,磁盘的负载可能被平均。因此可以提⾼数据库整体性能。
innodb_file_per_table
默认没有开启
将每个基于innodb引擎的表使⽤独⽴的表空间。
选对池塘钓大鱼以下参数影响重做⽇志⽂件属性:
多情郎
innodb_log_file_size
重做⽇志⽂件的⼤⼩。innodb1.2以前,⼤⼩不得超过4G。1.2x以后可以最⼤到512G
innodb_log_files_in_group
指定了⽇志⽂件组中重做⽇志⽂件的数量。默认为2
innodb_mirrored_log_groups
指定了⽇志镜像⽂件组的数量,默认为1.表⽰只有⼀个⽂件组,没有使⽤镜像。若磁盘使⽤了类似磁盘阵列,可以不开启重做⽇志镜像功能。
innodb_log_group_home_dir
指定⽇志⽂件组所在路径。默认为./,表⽰在mysql数据库⽬录下。
注意:
重做⽇志⽂件不能设置的太⼤,否则在恢复时可能需要很长的时间;如果设置的太⼩,可能导致⼀个事务⽇志需要多次切换重做⽇志⽂件。此外,重做⽇志⽂件太⼩会导致频繁的发⽣async checkpoint,导致性能抖动。
innodb_flush_log_at_trx_commit
该参数表⽰在提交操作时(commit),处理重做⽇志的⽅式。有效值有0,1,2。
代表当提交事务时,并不将事务的重做⽇志写⼊磁盘上的⽇志⽂件,⽽是等待主线程(master thread)每秒刷新。
1,2
不同的地⽅在于:
1
表⽰在执⾏commit时将重做⽇志缓冲同步到写到磁盘。既有fsync的调度。
2
表⽰将重做⽇志异步写到磁盘,既写到⽂件系统的缓冲中。因此不能完全保证在执⾏commit时肯定会写⼊重做⽇志⽂件,只是有这个动作发⽣。
所以当为了保证事务的ACID中的持久性,必须将该值设置为1 。也就是每当有事务提交时,就必须确保事务都已经写⼊重做⽇志⽂件。