MySQL Thread Pool: Problem Definition

lxf2023-05-12 03:22:01

一个新的线程池插件现在是MySQL企业版的一部分。

在这篇博客中,我们将讨论线程池正在解决的问题

以及它如何解决这个问题的一些高级描述。

在传统的MySQL服务器模型中,存在一对一的映射关系

螺纹和连接。甚至MySQL服务器也有很多代码

或者thread的某个缩写其实是代表一个连接。

显然,这种映射多年来一直很好地服务于MySQL,但是

这种模式在某些情况下不太适用。

其中一种情况是有更多的连接执行查询

同时与服务器中可用的CPU数量进行比较。这

MySQL服务器也有可伸缩性瓶颈,性能受到影响

当太多的连接并行执行时。

实际上,有两个原因会影响性能

最初的MySQL服务器模型。

首先,许多连接并行执行意味着

CPU处理的数据量增加了。这将减少

CPU缓存命中率。降低CPU缓存命中率可以产生显著的

对服务器性能的负面影响。实际上在某些情况下

并行执行的连接所分配的内存有时会

甚至取代服务器中可用的内存。在这种情况下,我们输入一个

这种状态称为交换,对性能非常不利。

第二个问题是并行查询和事务的数量

会对通过“关键部分”的吞吐量产生负面影响

MySQL服务器的(关键部分是应用互斥体的地方

确保一次只有一个CPU改变特定的数据结构,当这样

一个关键部分变成了一个可伸缩性问题(我们称之为热点)。

写操作的语句受影响更大,因为它们使用更关键的

章节。

这些问题都不能在操作系统调度程序中解决。

然而,有一些操作系统已经尝试解决这个问题

操作系统中更高级别的通用应用程序的问题。

这两个问题都会影响性能

随着并行执行的语句数量的增加而增加。

此外,还存在一些热点,在这些热点上互斥体被持有的时间更长

当许多并发语句和/或事务在

平行。一个这样的例子是InnoDB中的事务列表,其中每个

事务在链表中列出。因此,当并发的数量

交易时间增加,扫描列表的时间增加

保持锁定增加,因此热点变得更热

随着并发性的增加。

这些问题的当前解决方案存在于InnoDB中,通过使用

配置参数-innodb-thread-并发。当这个参数

被设置为非零值,这指示有多少线程

能够并发运行InnoDB代码。这个解决方案有它的优点

工作良好的用例。然而,它确实有缺点

该解决方案本身包含一个限制MySQL服务器的热点

可扩展性。它也不包含任何限制

并发事务的数量。

在MySQL服务器的早期alpha版本(MySQL 6.0)中

池已开发。这个线程池解决了限制问题

正在执行的并发线程数。这对解决

限制并发事务数量的问题。

这本身也是一个可伸缩性瓶颈。最终它没有

解决所有关于长查询和阻塞查询的问题。

这使得MySQL服务器完全成为可能

受阻。

当开发MySQL中现有的线程池扩展时

企业版我们决定从头开始

以下要求:

1)限制并发执行语句的数量,以确保

每个语句的执行都有足够的CPU和内存资源

来完成它的任务。

2)将线程和连接拆分成线程组

独立管理。这是为了确保线程池

插件本身不会成为可扩展性的瓶颈。这

目标是每个线程组有一个或零个活动线程

在任何时间点。

3)限制并发执行事务的数量

通过根据if区分排队连接的优先级

他们是否已经开始交易。

4)当语句执行变得很长或

当语句由于某种原因被阻塞时

时间。

如果您有兴趣了解新

线程池解决了这些需求

网络研讨会将于2011年10月20日星期四太平洋时间9:00举行。检查这里

了解如何访问它的详细信息。

如果您想尝试线程池,请点击这里。

参考:

http://mikaelronstrom . blogspot . AE/2011/10/MySQL-thread-pool-problem-definition . html

adminjs.cn是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 Adminjs.cn还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 在Adminjs.cn中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!