http://www.mysqlperformanceblog.com/2013/03/16/simcity-outages-traffic-control-and-thread-pool-for-mysql/

这篇文章生动的描述了线程池的妙处,它可以解决高并发数据库性能下降。

试想着如果不设置交通信号灯,没有交警的指挥,让其车辆肆意行驶,那么造成的后果就是交通瘫痪,谁都抢行,结果谁都过不去,堵死了。那么就必须采取一定的措施,先放行一部分车辆,后续的就排队等待,直到交通畅通。——这就是线程池的作用。

每个客户端连接MySQL执行SQL语句会创建一个线程。一旦连接数量的增加超过某特定点性能将会下降。该特性使服务器保持最佳性能,即使大量的客户端连接,通过使用线程池服务器线程的数量将减少,这将减少CPU上下文切换和热锁的竞争。

下面我用虚拟机做了一次压力测试。

虚拟机配置:

root@percona1:~/percona-toolkit-2.2.4# pt-summary
# Percona Toolkit System Summary Report ######################
       Date | 2014-02-04 01:51:35 UTC (local TZ: CST +0800)
   Hostname | percona1
     Uptime |  1:48,  3 users,  load average: 0.62, 9.56, 17.38
     System | VMware, Inc.; VMware Virtual Platform; vNone (Other)
Service Tag | VMware-56 4d 4e ce 5e 61 55 0d-cb 94 85 3f 9e 9a 3e 79
   Platform | Linux
    Release | Debian GNU/Linux 7.3 (wheezy) (wheezy)
     Kernel | 3.2.0-4-amd64
Architecture | CPU = 64-bit, OS = 64-bit
  Threading | NPTL 2.13
    SELinux | No SELinux detected
Virtualized | VMWare
# Processor ##################################################
 Processors | physical = 2, cores = 4, virtual = 4, hyperthreading = no
     Speeds | 4x1895.729
     Models | 4xIntel(R) Core(TM) i3-3227U CPU @ 1.90GHz
     Caches | 4x3072 KB
# Memory #####################################################
      Total | 996.0M
       Free | 69.8M
       Used | physical = 926.2M, swap allocated = 1.3G, swap used = 439.8M, virtual = 1.3G
    Buffers | 2.4M
     Caches | 20.0M
      Dirty | 384 kB
    UsedRSS | 810.2M
 Swappiness | 60
DirtyPolicy | 20, 10
DirtyStatus | 0, 0

压力测试参数:

sysbench  --test=oltp  --mysql-table-engine=innodb --oltp-table-size=1000000 --max-requests=10000 --num-threads=1000 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=root --mysql-db=test --mysql-socket=/tmp/mysql.sock run

并发1000个连接,最大请求数为10000。

结果如图:

很明显开启了线程池TPS要好于未开启的。

注:MySQL5.5和5.6只有在企业版(付费)才支持,社区版是没有这个功能的。

参考:http://www.percona.com/doc/percona-server/5.5/performance/threadpool.html

附Percona官方测试:

http://www.mysqlperformanceblog.com/2014/02/04/16000-active-connections-percona-server-continues-work-others-die/

附MySQL官方测试:

MySQL线程池

(仅适用于商业版)

为满足不断增长的用户、查询和数据通信量对性能和扩展性的持续需求,MySQL企业版提供了MySQL线程池。线程池提供了一种具有高度扩展性的线程处理模型,旨在减少管理客户连接和语句执行线程的开销。服务不断增长的用户连接数量及大通信量的在线应用性能和扩展性持续改善效果如下图所示:

60倍提高扩展性:读/写

与MySQL社区版服务器相比,带MySQL线程池的MySQL企业版可提供60倍的扩展性.

18倍提高扩展性:只读

与MySQL社区版服务器相比,带MySQL线程池的MySQL企业版可提供18倍的扩展性.

配置:

  • MySQL 5.6.11

  • Oracle Linux 6.3, Unbreakable Kernel 2.6.32

  • 4 sockets, 24 cores, 48 Threads

  • Intel(R) Xeon E7540 2GHz CPUs

  • 512GB DDR RAM

http://www.mysql.com/products/enterprise/scalability.html

转载于:https://blog.51cto.com/hcymysql/1356326

Percona5.6.15线程池压力测试相关推荐

  1. 【Java 并发编程】线程池机制 ( 测试线程开销 | 启动线程分析 | 用户态 | 内核态 | 用户线程 | 内核线程 | 轻量级进程 )

    文章目录 一.测试线程开销 1.正常测试 2.不创建线程 3.只创建不启动线程 4.只启动不等待执行完成 二.分析测试结果 1.启动线程分析 2.用户线程与内核线程 3.轻量级进程 4.验证 Java ...

  2. 自定义线程池拒绝策略缓解高并发下线程池压力

    一. 默认的拒绝策略 ThreadPoolExceutor.AbortPolicy : 丢弃任务并抛出RejectedExecutionException异常.         ThreadPoolE ...

  3. java线程池测试,Java线程池【测试Markdown样式】

    Java 线程池 目录 重点关注几个问题: 线程池中线程的生命周期 线程池启动后,如何初始化工作线程 线程数如何变化 如何管理空闲的线程 提交任务给工作线程.到工作线程完成任务的过程 线程池内异常处理 ...

  4. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(二)

    课程简介: 课程目标:通过本课程学习,深入理解Java线程池,提升自身技术能力与价值. 适用人群:具有Java多线程基础的人群,希望深入理解线程池底层原理的人群. 课程概述:多线程的异步执行方式,虽然 ...

  5. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  6. Linux C++ 实现线程池

    http://blog.csdn.net/qq_25425023/article/details/53914609 线程池中的线程,在任务队列为空的时候,等待任务的到来,任务队列中有任务时,则依次获取 ...

  7. 程序随笔——C++实现的一个线程池

    1.线程池简介 我们知道在线程池是一种多线程处理形式,处理过程中我们将相应的任务提交给线程池,线程池会分配对应的工作线程执行任务或存放在任务队列中,等待执行. 面向对象编程中,创建和销毁对象是需要消耗 ...

  8. Nginx 的线程池与性能剖析【转载】

    正如我们所知,NGINX采用了异步.事件驱动的方法来处理连接.这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求.为此,NGIN ...

  9. 面渣逆袭:线程池夺命连环十八问

    大家好,我是老三,很高兴又和大家见面.线程池是面试必问的知识点,这节我们来对线面试官,搞透线程池. 1. 什么是线程池? 线程池: 简单理解,它就是一个管理线程的池子. 它帮我们管理线程,避免增加创建 ...

  10. 深读源码-java线程系列之自己手写一个线程池

    问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写的线程池如何测试? 简介 线程池是Java并发编程中经常使用到的技术,那么自己如何动手写一个线程池呢?本文将手把手带你写一个可用的线 ...

最新文章

  1. H3C 交换机命名规则
  2. arm linux gnueabi编译,交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
  3. 英伟达收购Mellanox接近尾声,将成英伟达史上最大收购案
  4. vue数组中对象属性变化页面不渲染问题
  5. 求二叉树中以x为根的子树的深度_还在玩耍的你,该总结啦!(本周小结之二叉树)...
  6. postgre 生成数据库html文档_postgresql数据库导入和导出CSV格式
  7. C4D双十一促销海报模板,参考一下!
  8. python画一条曲线有不同的形状_Python+pandas+matplotlib控制不同曲线的属性 !
  9. opboot怎么刷入固件_没有固件可刷的路由器,那就开个 SSH 折腾一下
  10. 机器学习(Machine Learning)
  11. 进入阿里做测试员遥不可及?这里或许有你想要的答案
  12. Storey FDR矫正方法
  13. 清明,我怀念那个回不去的故乡了
  14. Android studio打包apk
  15. windows安装tomcat8
  16. EPLAN电气设计入门学习笔记
  17. static、static inline、entern inline
  18. 计算机网络网络适配器的作用是什么原因,Win10网络适配器在哪里对网络有什么影响 网络适配器出现各种故障的解决方法...
  19. 自然之美--记冬夏黄山
  20. 背景差法目标识别python_运动目标检测(4)—背景差分法

热门文章

  1. PHP 简单的页面跳转提示
  2. PHP安装kafka扩展
  3. 修改JDK的经历:两处字体的粗体代码引起的错误
  4. 导入新工程,提示“Migrate Project to Gradle?”
  5. 面试疑点:几道题答了一个小时,应该是等答案
  6. cc1: all warnings being treated as errors
  7. NV21转YUV420P的代码,测试通过
  8. 使用Freetype发现的问题记录
  9. 质子和中子数量的一点疑问
  10. Eclipse无法DEBUG