我的 mariadb max_connections = 1000。应用程序堆栈打开了 450 个到数据库的连接,并且它被设计为高度并发。工作负载主要是 INSERT/UPDATE。通过 show processlist 进行监控时,我注意到数据库中同时执行的事件查询不超过 11 个。我认为某些 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的并发性?
最佳答案
关于线程并发:
This variable is deprecated and is removed in MySQL 5.7. You should remove this from MySQL configuration files whenever you see it unless they are for Solaris 8 or earlier.
所以,不用费心去改变它。
同时,我想说你的观察结果是“正常的”。也就是说,您的 450 个连接正在执行非常快的查询,因此当您查看时,您碰巧只看到中间有 11 个连接。
您是否发现应用程序出现任何意外延迟?我怀疑不是。
您是否比其他查询更频繁地看到某些特定查询?是否有任何显示的 Time
超过“2”?如果有的话,让我们看看查询,加上 SHOW CREATE TABLE
。
是否有任何PROCESSLIST
条目显示Locked
。如果是这样,请查找具有最大Time
且未Locked
的查询,并调查其运行时间如此之长的原因。
关于mysql - MySQL中如何控制 session 并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244182/