2017-09-15 137 views
0

我有max_connections = 1000的mariadb。应用程序堆栈打开450个连接到数据库,它被设计为高度并发。工作量主要是INSERT/UPDATEs。当通过show processlist进行监控时,我注意到同时在数据库中执行的活动查​​询不超过11​​个。我认为在我的情况下,一些mysql设置阻止了更多的并发性,但我无法弄清楚它们是什么。控制并发性的mysql参数集是完全混淆的,很难看到其中的清晰度。我有这个:在MySQL中如何控制会话并发性?

MariaDB [(none)]> show variables like '%concurr%'; 
+----------------------------+--------+ 
| Variable_name    | Value | 
+----------------------------+--------+ 
| concurrent_insert   | ALWAYS | 
| innodb_commit_concurrency | 0  | 
| innodb_concurrency_tickets | 5000 | 
| innodb_thread_concurrency | 32  | 
| thread_concurrency   | 10  | 
+----------------------------+--------+ 

24个缓冲池实例,每个实例2GB和慢速GCP SSD永久磁盘。

最后一个参数折旧(基于我的研究)。应该改变什么来提高mysql的并发性?

回答

1

重新thread_concurrency:

此变量已被弃用,在MySQL 5.7被去除。除非它们适用于Solaris 8或更早版本,否则只要您看到它,就应该从MySQL配置文件中删除它。

所以,不要打扰改变它。

同时,我会说你的观察结果是'正常的'。也就是说,你的450个连接的查询速度非常快,所以当你看时,你碰巧看到的只有11个。

您是否在应用程序中看到任何意外的延迟?我怀疑不是。

你是否比别人更频繁地看到一些特定的查询?是否有任何一个出现在Time以上,比如说“2”?如果两者之一出现,我们来看看查询,再加上SHOW CREATE TABLE

是否有任何PROCESSLIST条目说Locked。如果是这样,请查找最大的Time而不是Locked,并调查为什么它运行这么久。

+0

有意想不到的延迟(我有单独的问题在这里:https://stackoverflow.com/questions/45764963/table-update-on-pk-and-otherother-field-in-mysql-is-sporadically-slow) 。但我很少看到时间> 0。它大多数很快。没有状态显示锁定,只有初始化或NULL –

+0

你经常看到超过11个非睡眠状态吗? –