mysql连接池问题

http://mikaelronstrom.blogspot.com/2011/10/mysql-thread-pool-summary.html

Mysql 插件thead pool plugin的作者博客;描述了thead pool的详细设计理念




mysql pool:多个连接复用一个thread。

看了半天,accept是由一个单独的mysql主线程来完成,epollcntrl/epollwait + read + processs + write是在pool中完成的。初步看起来,accept不会被epoll + read + process + write给hang住。因为使用了epoll复用多个连接,线程切换/创建/销毁的代价减少了。


MariaDB线程池源码分析
http://ourmysql.com/archives/1303
mariadb 5.5 threadpool 源码分析 
http://blog.chinaunix.net/uid-28364803-id-3431242.html
http://blog.chinaunix.net/uid-28364803-id-3427833.html
Oracle Mysql Thread pool的安装和原理
http://get.jobdeer.com/907.get

8.11.6 The Thread Pool Plugin

http://dev.mysql.com/doc/refman/5.6/en/thread-pool-plugin.html


与pool对立的是one-thread-per-connection,是指针对每个连接创建一个线程来处理这个连接的所有请求,直到连接断开,线程结束.这也是thread_handling的默认值。
由此可见,默认情况下,多少连接就会产生多少个线程,并发越大,线程越多,线程之间的资源竞争越激烈,性能越低。


server的主监听线程监听到有客户端的connect时,会调用tp_add_connection函数进行处理。
首先根据thread_id对group_count取模,找到其所属的group,然后调用queue_put将此connection
放入到group中的queue中。



0  小结

MariaDB的thread pool的实现相对比较简单,总体上就是将group中所有的connection的socket挂在
group的epoll_fd上进行事件监听,监听到的事件或被当前线程执行,或者被push到group的queue上
被其他线程执行。

监控线程timer_thread定期的根据需要去唤醒等待线程或创建新的线程,来达到动态增加的thread的
目的。而thread的收缩则是通过线程等待事件超时来完成的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值