我是靠谱客的博主 精明冰棍,最近开发中收集的这篇文章主要介绍mysql 线程池测试_MySQL线程池测试,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

MySQL线程池(THREAD POOL)的处理

在默认的MySQL的连接模型中,一个连接对应一个MySQL服务器的线程来处理连接请求(

很类似于oracle的专用服务器连接),在某些情况这种配置可能会导致一些问题,比如以下情形:

1,服务器同时太多活动连接线程,而cpu个数有限,会导致CONTEXT SWITCH十分严重,

同时太多的进程在可运行队列中等待,主机负载超高.对系统是一个很大压力;

2,当太多的活动线程执行innodb代码时,innodb本身又会为引发扩展性的

问题,比如mutex争用等.虽然用innodb_thread_concurrency虽然也可以

限制innodb活动的线程数,但也是有自己的争用部分,而且不能限制同时

并发的事务数,在测试中发现即使用innodb_thread_concurrency来限制,主机的

CONTEXT SWITCH也会超高.

3,在某些时些我们想通过在服务器上做一定的限制,让MySQL服务器只处理一定的

请求,而让其他的请求在等待而不至于同时在服务器产生大量活动进程,而使服务器

被拖死,实现类似限速的效果.

目前实现的线程池的主要有MySQL企业版(以plugin方式实现),Maridb和Percona的版本.

通过定义thread_handling参数来实现连接方式的更改,默认的值为one-thread-per-connection,

表示一个连接一个线程,而值pool-of-threads(以PERCONA的版本为例),表示使用线程池的方式.

当使用连接池的方式以后,服务器创建由参数thread_pool_size定义的线程组个数,每个线程

组正常情况下对应一个或零个活动的线程.默认该参数等于逻辑CPU数量.当客户端连接请求到达时,

会以简单随机分配的方式分配给一个线程组.

正常的情况下在一个线程组中存在的线程叫个listener thread.当连接的语句请求到达时,这个时

候如果队列没有其他语句在等待时,这个listener thread会立即执行这个语句,然后返回.在一些情

况下,比如当前活动的线程在等待IO或是锁时,超过一定的阀值这个线程就会被定义成STALLED,而当

另一个连接请求到达线程组时,线程组会启动另一个线程来服务,从而避免单个线程执行太长时间

而使其他的连接请求在持续等待,这个参数是由thread_pool_max_threads来控制,默认是500ms.

在服务器是4个逻辑cpu的配置中,使用sysbecn测试发起的线程为128时,发现CONTEXT SWITCH十分频繁,

达到了35k-40k左右.而当使用了thread pool后,thread_pool_size设置为4,CONTEXT SWITCH的数量

仅在2k-3k左右,CONTEXT SWITCH下降非常明显.使用了thread pool的综合性能大约提高有5%左右.

默认的thread_pool_size等于逻辑cpu个数尽量不要去更改,对于加大这个参数没有太多的意义,当在

4的服务器上测试,设置为8,16等值时,带来的只有QPS下降和CONTEXT SWITCH增加.

线程池配置

http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_thread_handling

http://get.jobdeer.com/907.get

show variables like '%handling%';

+-----------------+---------------------------+

| Variable_name   | Value                     |

+-----------------+---------------------------+

| thread_handling | one-thread-per-connection |

mariadb线程池配置方法:

[mysqld]

thread_handling=pool-of-threads

oracle企业版线程池配置方法:

thread pool的组件和安装:

查看mysql己安装的插件

select * from INFORMATION_SCHEMA.PLUGINS;

SHOW PLUGINS

插件安装目录:

/usr/local/mysql/lib/plugin

安装插件

[mysqld]

plugin-load=thread_pool=thread_pool.so

[mysqld]

plugin-load=thread_pool.so

plugin-load=thread_pool=thread_pool.so;tp_thread_state=thread_pool.so;tp_thread_group_state=thread_pool.so;tp_thread_group_stats=thread_pool.so

查看确认:

SHOW PLUGINS;

show variables like '%handling%';

show variables like '%thread%';

最后

以上就是精明冰棍为你收集整理的mysql 线程池测试_MySQL线程池测试的全部内容,希望文章能够帮你解决mysql 线程池测试_MySQL线程池测试所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部