MySQL调参

1、innodb_sync_spin_loops和innodb_spin_wait_delay

这两个参数与自旋锁相关:自旋锁是为保护共享资源而提出的一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用的。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就是说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看该自旋锁的保持者是否已经释放了锁,“自旋”一词就是因此而得名。(转载出处

innodb_sync_spin_loops是在放弃CPU时间片之前进行多少次等待,innodb_spin_wait_delay是一次等待的时间。

实验:innodb_spin_wait_delay默认值是6,设置过大可能会降低性能。

(1)将该值设为180和1对应的吞吐量分别为:726tps和1017tps(前提是其他参数设置合理,只对比这一个)

(2)另一组实验:将该值设为359和1对应的吞吐量为:648tps和986tps

2、innodb_lru_scan_depth

这个参数与checkpoint+刷盘、内存置换相关(参考)。mysql使用LRU内存置换算法。

InnoDB要保证LRU列表中有100左右空闲页可使用。在InnoDB1.1.X版本前,要检查LRU中是否有足够的页用于用户查询操作线程,如果没有,会将LRU列表尾端的页淘汰,如果被淘汰的页中有脏页,会强制执行Checkpoint刷回脏页数据到磁盘,显然这会阻塞用户查询线程。从InnoDB1.2.X版本开始,这个检查放到单独的Page Cleaner Thread中进行,并且用户可以通过innodb_lru_scan_depth控制LRU列表中可用页的数量,默认值为1024。

 innodb需要保证LRU列表有innodb_lru_scan_depth个空闲页可以使用,如果没有,就会从lru列表末尾移除,如果移除的有脏页,就进行checkpoint。

实验:该值设置过大会降低性能。(设置过大会导致一直没有这么多的空闲页可用,那就一直在做checkpoint刷盘,导致性能降低)

将该值设为95000和默认值1024得到的吞吐量为:569tps和925tps

3、innodb_flush_neighbors

与刷写脏页和异步io相关。

异步IO: 

用户可以在发出一个IO请求后立即再发出另一个IO请求,当全部IO请求发送完毕后,等待所有IO操作的完成,这就是AIO。

AIO另一个优势可以将多个IO,合并为1个IO,以提高IO效率。例如:用户需要访问3页内容,但这3页时连续的。同步IO需要进行3次IO,而AIO只需要一次 就可以了。使用AIO的恢复速度 提高了75%

当刷新一个脏页时,innodb会检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新。这样做,通过AIO将多个IO写入操作合并为一个IO操作。在传统机械磁盘下有着显著优势。

innodb_flush_neighbors 参数来控制是否开启。(来源

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值