mysql - MySQL中如何控制 session 并发?

标签 mysql session concurrency mariadb

我的 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。如果是这样,请查找具有最大TimeLocked的查询,并调查其运行时间如此之长的原因。

关于mysql - MySQL中如何控制 session 并发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244182/

相关文章:

c# - 在 WCF 请求中存储数据的位置

multithreading - 条件变量的成本是多少?

java - 获取 Java 中预定的非阻塞操作的结果

php - php mysql 中的日期时间实现

PHP 未将 MySQL 写入 CSV

mysql - 创建一个与 mysql 中的 GROUP BY 一起使用的用户定义函数

ruby-on-rails - Rails 应用程序中特定于路径的 cookie

mysql - 在 MySQL 中是否可以插入 NULL 和 DEFAULT 值?

php - session if else 语句

java - 原子操作与 STM