在之前的版本里,如果一台高负荷的机器重启后,内存中大量的热数据被清空,此时就会重新从磁盘加载到Buffer_Pool缓冲池里,这样当高峰期间,性能就会变得很差,连接数就会很高。
在MySQL5.6里,一个新特性避免的这种问题的出现。在关闭时把热数据dump到本地磁盘。
查询:
在线配置:
配置文件:innodb_buffer_pool_dump_at_shutdown = 1
在启动时把热数据加载到内存。
查询:
在线配置:
配置文件:innodb_buffer_pool_load_at_startup = 1
可以修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间。
优点: 1.每个表都有自已独立的表空间。 2.每个表的数据和索引都会存在自已的表空间中。 3.可以实现单表在不同的数据库中移动。 4.空间可以回收(除drop table操作处,表空间不能自已回收)
缺点: 1.单表增加过大,如超过100个G。
结论: 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下:innodb_open_files 。
查询:show variables like '%per_table%';
在线配置:
配置文件:innodb_file_per_table=1
设置为1,标志支持分布式事物,主要保证binary log和其他引擎的主事务数据保持一致性,属于同步操作;
如果你设置0,就是异步操作,这样就会一定程度上减少磁盘的刷新次数和磁盘的竞争。
查询:
在线配置:
配置文件:innodb_support_xa = 0
开启后,SHOW INNODB STATUS 的输出每15秒钟写到一个状态文件。这个文件的名字是innodb_status.pid,其中pid是服务器进程ID。这个文件在MySQL数据目录里创建。
正常关机之时,InnoDB删除这个文件。如果发生不正常的关机,这些状态文件的实例可能被展示,而且必须被手动删除。在移除它们之前,你可能想要检查它们来看它们是否包含有关不正常关机的原因的有用信息。仅在配置选项innodb_status_file=1被设置之时,innodb_status.pid文件被创建。
查询:
在线配置:
配置文件:innodb_status_file = 1
全局等待事务锁超时时间,在回滚(rooled back)之前,InnoDB事务将等待超时的时间(单位 秒)
查询:SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';
在线配置:SET GLOBAL innodb_lock_wait_timeout=100;
配置文件:innodb_lock_wait_timeout = 100
此参数指定InnoDB表可用的文件I/O线程数,MySQL开发人员建议在非Windows平台中这个参数设置为4
查询:
在线配置:
配置文件:innodb_file_io_threads = 4
同一时刻能够进入innodb层次并发执行的线程数(注意是并发不是并行),如果超过CPU核数,某些线程可能处于就绪态而没有获得CPU时间轮片。
如果SERVER层的线程大于这个值,那多余的线程将会被放到一个叫做wait queue的队列中,而不能进入INNODB层次,进不到innodb层当然也就不能干活了,谈不上获得CPU。
既然是一个队列那么它必然满足先进入先出的原则。这也是前面说的长痛不如短痛,与其让你不断的进行上文切换还不如把你处于睡眠态放弃CPU使用权,默认这个值是0,代表不限制。
查询:
在线配置:
配置文件:innodb_thread_concurrency = 0
这个百分比是,最大脏页的百分数,当系统中 脏页 所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。
这个脏页百分比的阈值,在操作系统和其它数据库中都有用到。主要是为了提高效率。比如当你的页面中脏页过多的时候,就调用磁盘IO把内存的“脏”数据写回到磁盘。
脏页小的话,无法将几个改变一起flush到磁盘上去了。脏页越大,可以拼凑在一起flush到磁盘上去。从而减少写。
查询:show variables like 'innodb_max_dirty_pages_pct';
在线配置:
配置文件:innodb_max_dirty_pages_pct = 85
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。