首页 > 其他分享 >参数调优 -- 并发参数innodb_thread_concurrency

参数调优 -- 并发参数innodb_thread_concurrency

时间:2024-02-01 18:00:27浏览次数:27  
标签:事务 thread -- innodb concurrency 参数 CPU select

innodb_thread_concurrency

innodb_thread_concurrency是动态参数可以随时修改
64个活跃连接以内直接配0
高压场景需要从高到低测试,找到最优值
高压场景下较低的值可以明显提高写入QPS的占比(高频率的读被限制了)
innodb_thread_sleep_delay(微秒)

定义在开始排队前,等多久加入队列
innodb_adaptive_max_sleep_delay(微秒)

配置innodb_thread_sleep_delay允许的最大值,配了之后innodb会自动调整innodb_thread_sleep_delay的值到一个合适的范围内(自适应算法)
innodb_concurrency_tickets(默认5000)

使用小的值时小事务可以和大事务竞争,缺点是大事务要多次才能跑完

使用大的值时大事务有优势,缺点是可能让小事务一直得不到运行

调整这个值可以参考队列长度,长度从SHOW ENGINE INNODB STATUS来看( ROW OPERATIONS section of SHOW ENGINE INNODB STATUS output),也可以从INFORMATION_SCHEMA.INNODB_TRX的TRX_CONCURRENCY_TICKETS来看。

innodb_thread_concurrency限制后活跃连接状态不会变,从innodb_trx能看出来事务是不是在排队,show engine innodb status的row部分也能看出来

对于长短事务的场景应该非常有帮助,适当减少ticket可以让短事务更容易被执行,按下面测试场景来说,一个5读SQL的事务,一个5读3写SQL的事务,两个事务长度基本相同,如果用系统线程调度的话,执行快的事务执行的频率会更高。如果打开排队,每个事务拿着相同的ticket进入innodb,执行次数会更公平。所以可以看到写的次数明显升高了。

sysbench的测试场景来说,读影响不是很大

  

1.官方使用建议
在官方文档上,对于innodb_thread_concurrency的使用,也给出了一些建议,如下:

如果一个工作负载中,并发用户线程的数量小于64,建议设置innodb_thread_concurrency=0;

如果工作负载一直较为严重甚至偶尔达到顶峰,建议先设置innodb_thread_concurrency=128,并通过不断的降低这个参数,96, 80, 64等等,直到发现能够提供最佳性能的线程数,例如,假设系统通常有40到50个用户,但定期的数量增加至60,70,甚至200。你会发现,性能在80个并发用户设置时表现稳定,如果高于这个数,性能反而下降。在这种情况下,建议设置innodb_thread_concurrency参数为80,以避免影响性能。

如果你不希望InnoDB使用的虚拟CPU数量比用户线程使用的虚拟CPU更多(比如20个虚拟CPU),建议通过设置innodb_thread_concurrency参数为这个值(也可能更低,这取决于性能体现),如果你的目标是将MySQL与其他应用隔离,你可以考虑绑定mysqld进程到专有的虚拟CPU。但是需要注意的是,这种绑定,在myslqd进程一直不是很忙的情况下,可能会导致非最优的硬件使用率。在这种情况下,你可能会设置mysqld进程绑定的虚拟CPU,允许其他应用程序使用虚拟CPU的一部分或全部。

在某些情况下,最佳的innodb_thread_concurrency参数设置可以比虚拟CPU的数量小。定期检测和分析系统,负载量、用户数或者工作环境的改变可能都需要对innodb_thread_concurrency参数的设置进行调整。

2.笔记

tickets可以理解为MySQL层和Innodb层交互的次数,比如一个select一条数据就是需要Innodb层返回一条数据然后MySQL层进行where条件的过滤然后返回给客户端,抛开where条件过滤的情况,如果我们一条语句需要查询100条数据,那么实际上需要进入Innodb层100次,那么实际上消耗的tickets就是100。当然对于insert select这种操作,需要的tickets是普通select的两倍,因为查询需要进入Innodb层一次,insert需要再次进入Innodb层一次。

这样我们也就理解为什么innodb_concurrency_tickets可以避免(长时间处理线程)长时间堵塞(短时间处理线程)的原因了。假设innodb_concurrency_tickets为5000(默认值),有一个需要查询100W行数据的大select操作和一个需要查询100行数据的小select操作,大select操作先进行,但是当查询了5000行数据后将丢失CPU使用权,小select操作将会进行并且一次性完成。

 

标签:事务,thread,--,innodb,concurrency,参数,CPU,select
From: https://www.cnblogs.com/chengyunblogs/p/17855144.html

相关文章

  • srs(state thread)如何实现协程切换
    417行的宏执行协程A上下文的保存419行_st_vp_schedule在RUNQ中找到一个待执行协程B,恢复协程B的上下文,切换到该协程B执行.协程B执行到io阻塞或者sleep事件,就会重新把协程B缓存起来,并寻找一个待执行协程(假设这里就AB两个协程),恢复协程A的上下文继续执行.完成协程切......
  • [BJDCTF2020]The mystery of ip
    [BJDCTF2020]Themysteryofiphint页面的源代码里发现提示应该是和IP相关,有可能用到XFF请求头,遂用BP抓包修改了XFF之后,被成功执行,XFF可控,代码是php代码,推测:PHP可能存在Twig模版注入漏洞Smarty模板的SSTI漏洞(主要为Flask存在Jinjia2模版注入漏洞)添加模板算式,{{7*7}}成......
  • ajax与action,WordPress主题开发之wp_ajax_{$action}和wp_ajax_nopriv_{$action}的区
    wp_ajax_{$action}和wp_ajax_nopriv_{$action}是WordPress主题开发常用的函数,这两个函数经常用在ajax交互功能上。例如ajax表单登录,ajax提交表单等。本篇文章主要讲述了wp_ajax_{$action}和wp_ajax_nopriv_{$action}之间的区别。WordPress中AJAX请求方式在说wp_ajax_{$action}......
  • sqli-bypass
    提示说明:—————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————......
  • 轴调控大揭秘:Matplotlib轴设置全攻略+顺口溜,一文掌握!
    在数据可视化的世界里,Matplotlib是那把魔法棒,让枯燥的数据跃然纸上,而掌控这把魔法棒的核心,就是对坐标轴的精妙操作。今天,就让我们一起揭开Matplotlib坐标轴设置的神秘面纱,配上易记的顺口溜,让你的数据可视化之路畅通无阻!一、轴标签和标题:基础篇xlabel&ylabel:设定X轴和Y轴的标......
  • 从yank put看vim寄存器
    寄存器在软件开发过程中,Ctrl-C和Ctrl-V是程序员的核心技能,这就不可避免的涉及到复制,粘贴,删除。在windows环境下,大家习惯了只有一个系统剪切板,复制之后直接粘贴还是比较方便。在vim环境下,有更多的寄存器可以选择:26个字母(大小写分别对应不同用途),还有0——9共10个数字对应的寄存器......
  • 云打印怎么收费?云打印需要付费吗?
    随着云打印概念的火热发展,很多有打印需求的App或者个人用户都想使用易绘创云打印服务。那么易绘创云打印怎么收费?云打印需要付费吗?今天就带大家来了解一下。 云打印怎么收费?云打印需要付费吗?很多有打印需求的小伙伴都想要使用易绘创云打印服务,但是对易绘创云打印服务的......
  • 《系统科学》第四章读后感
    在阅读了《系统科学》第四章之后,我对系统科学的研究方法和应用有了更深入的了解。这一张主要介绍了系统科学中的建模方法和实际应用案例。首先,作者在这一章中详细介绍了系统科学中的建模方法。建模方法主要包括数学建模、计算机模拟、系统动力学等。这些方法可以理解系统内部......
  • 获取同一个表中的 年龄相同的的人员
    SELECTS1.Sname,S1.sexFROMstudentASS1,studentASS2WHERES1.age=S2.ageANDS1.Sname<>S2.SnameGROUPBYS1.SnameORDERBYS1.age  学生表中求出年龄相同的同学列出同学的名称和年龄--学生表CREATETABLEstudent(Snovarchar(20)NOTNUL......
  • 设计奖励,奖励函数
        1  1  1 1 1  1  11  111  1  1 1  1 1 1  1 1 1    1 11  1  1 1  11 1 1  11  111  ppo1 1 1 11 1......