mysql-HandlerSocket的性能测试

本文详细分析了MySQL执行SQL语句的过程,指出SQL解析和优化阶段消耗大量资源,而InnoDB存储层相对较少。通过对比Memcached/NoSQL,强调MySQL在数据操作外还需完成解析SQL、打开并锁定表、生成执行计划等额外步骤。在完全内存操作情况下,考虑SSD盘响应时间时,需关注SQL带来的消耗。对于热点数据缓存在内存中的场景,解析SQL层消耗显著。通过HandlerSocket性能测试报告,展示在特定测试场景下MySQL的性能表现。

参考网站:http://www.mysqlops.com/2011/10/20/handlersocket-perf.html

 

HandlerSocket Oprofile测试报告

(MySQL通过SQL执行K/V查询的Oprofile信息)

MySQL执行SQL语句,首先要经过SQL解析阶段,调用MYSQLparse() 和MYSQLlex() 进行语法和词法解析;然后进入查询优化阶段,调用make_join_statistics() 和JOIN::optimize() 获得统计信息和生成执行计划,可以清洗第发现,主要耗资源的是SQL解析和优化层,而不是InnoDB存储层,row_search_for_mysql只消耗了很少的时间。

因此我们对比Memcached/NoSQL,知道MySQL除了数据操作,还要很多额外的步骤需要完成:
1  Parsing SQL statements【解析SQL】
2  Opening, locking tables【打开并锁定表】
3  Making SQL execution plans SQL【解析SQL并生成执行计划】
4  Unlocking, closing tables【解锁并关闭表】
另外,MySQL 还必须要做大量的并发控制,比如在发送/接收网络数据包的时候,fcntl() 就要被调用很多次;Global mutexes比如LOCK_open,LOCK_thread_count也被频繁地取得/释放。所以在Oprofile的输出中,排在第二位的是my_pthread_fastmutex_lock()。并且Mutex的竞争带来的上下文切换,导致%system占用CPU使用比例相当高(>20%)。

其实, MySQL 开发团队和外围的开发团体早已意识到大量并发控制对性能的影响,MySQL 5.5中已经解决了一些问题,Percona也对Mutex做了一些拆分处理,未来的MySQL版本中,也应该会越来越好。

在完全内存操作的情况时,CPU的效率非常重要。如果只有一小部分数据进入内存,那么SQL语句带来的消耗可以忽略不计。很简单,因为机械磁盘IO操作的时间消耗远比CPU解析SQL语句的时间消耗多,这种情况下,就不需要过分考虑SQL语句所带来的消耗。但是对于SSD盘,尤其是PCI-E SSD盘,响应时间在微秒级(Fusion I/O为30us左右),就必须考虑SQL带来的消耗了。
在大多数的MySQL 服务器中,大部分的热点数据都缓存在内存中,因而访问变得只受CPU的限制。Profiling 的结果就类似上所述的情况:SQL 层消耗了大量的资源。假设需要做大量的PK查询(例如:SELECT x FROM t WHERE id=?)或者是做LIMIT的范围查询,即使有70-80%都是在同一张表中做PK查询(仅仅只是查询条件中给定的值不同,即value不同而已), MySQL 还是每次需要去做 parse/open/lock/unlock/close, 这对我们来说是非常影响效率的事情。

 (MySQL通过HandlerSocket执行K/V查询的Oprofile信息)

HandlerSocket性能测试报告:

【测试主机】
机型:R510
CPU:Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
内存:4G*6
磁盘:146G*2(OS) + 300G*12 RAID10(data)
1)         完全随机测试

测试场景描述:

²  单实例MySQL 5.1.48 InnoDB Plugin

²  测试SQL:INSERT INTO table (key, value) VALUES(#key#, #value#) / SELECT value FROM table WHERE key=#key#

²  HS API:execute_single

2)         重复获取同一条数据

测试场景描述:
1 单实例Percona 5.1.57-12.8 XtraDB
2  测试SQL:SELECT value FROM table WHERE key=#key#
3  HS API:execute_single
4  MC API:get

编者注

为方便读者更加全面掌握HandlerSocket的知识点,我们分三篇文章介绍:HandlerSocket的原理、HandlerSocket的性能测试报告、HandlerSocket的优势和缺陷阐述,同时帮助读者朋友做到心中有数,什么业务场景适合使用HandlerSocket存取数据,如何让HandlerSocket的优势发挥到极致。

备注

[1] Oprofile信息和HandlerSocket原理摘自HandlerSocket作者Yoshinori Matsunobu的博客

[2] 测试数据是在我们实际的DELL R510主机上测试

原创文章,转载请注明: 文章地址HandlerSocket的性能测试

 

提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值