Percona5.6.15线程池压力测试
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
压力测试参数:
ysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --max-requests=10000 --num-threads=10
并发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
本文出自 “贺春旸的技术专栏” 博客,请务必保留此出处http://hcymysql.blog.51cto.com/5223301/1356326
- 必备 .NET - C# 异常处理
- Java Socket获取本机的InetAddress实例
- 机器理解大数据秘密:聚类算法深度剖析
- BZOJ 3668: [Noi2014]起床困难综合症【贪心】
- 用C#实现字符串相似度算法(编辑距离算法 Levenshtein Distance)
- 51 Nod 1007 正整数分组【类01背包】
- 从入门到精通之Boyer-Moore字符串搜索算法详解
- 线性表的顺序存储结构的实现及其应用(C/C++实现)
- IPython使用学习笔记
- 如何用Python调用java程序
- LCT学习笔记
- 队列的存储结构的实现(C/C++实现)
- 栈的存储结构的实现(C/C++实现)
- 【经验分享】Hydra(爆破神器)使用方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法