加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中的字符函数的压力测试

发布时间:2022-01-20 08:39:49 所属栏目:MySql教程 来源:互联网
导读:本篇内容主要讲解MySQL中的字符函数的压力测试,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习MySQL中的字符函数的压力测试吧! MySQL中的字符串处理函数非常多,以至于我在整理的这部分内容的时候也眼前一亮,
        本篇内容主要讲解“MySQL中的字符函数的压力测试”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的字符函数的压力测试”吧!
 
        MySQL中的字符串处理函数非常多,以至于我在整理的这部分内容的时候也眼前一亮,有一种进了大观园的感觉,哦,原来有这个函数,哦,竟然可以这样实现,以前怎么没想到,等等。
 
        比如字符串查找函数,instr,locate,position三个函数的功能都是很相似的。如果要实现一个功能,从字符串foobarbar里面找到bar这个字符串的起始位置,使用Instr,locate,position都可以实现。
 
SELECT INSTR('foobarbar', 'bar');
 
SELECT LOCATE('bar', 'foobarbar');
 
SELECT POSITION('bar' IN 'foobarbar');
 
主要语法的表现形式不同,当然参数设置上还是有一些差别。
 
对于上面的3个函数,我有些纠结,到底用哪一个呢?推荐是哪一个呢?我觉得可以通过两种测试方式来得到一个初步的结论,第一个是高并发下多线程调用的性能情况,第二个是单线程执行的性能情况。如果在对比测试中高出一筹,还有什么理由不去推荐呢。
 
要实现这两个功能,MySQL缺失提供了这样的工具集,第一个是并发执行的性能情况,可以使用MySQL自带的mysqlslap来测试。
 
而第二个单线程的压测,则可以使用MySQL非常有特色的函数benchmark来实现。
 
如果使用myslap来压测,使用mysqlslap的语句类似下面的形式。
 
mysqlslap --concurrency=50,100 --create-schema="test" --query="SELECT POSITION('bar' in 'foobar');" --number-of-queries=50000
 
当然这里我们加大难度,一个是拼接的字符串要复杂,我们可以使用字符串函数repeat得到一个很长的字符串,比如concat(concat(repeat('abc',500),'foobarbar'),repeat('abc',500)) 就可以得到一个很长的字符串。
  
通过这种方式得到的测试结果相对来说更有意义一些。
 
我们调大调用的频次为100万次,使用并发50和100来做测试。
 
position函数的结果
 
Benchmark
 
Average number of seconds to run all queries: 34.789seconds
 
Minimum number of seconds to run all queries: 34.789 seconds
 
Maximum number of seconds to run all queries: 34.789 seconds
 
Number of clients running queries: 50
 
Average number of queries per client: 20000
 
Benchmark
 
Average number of seconds to run all queries: 35.312 seconds
 
Minimum number of seconds to run all queries: 35.312 seconds
 
Maximum number of seconds to run all queries: 35.312 seconds
 
Number of clients running queries: 100
 
Average number of queries per client: 10000
 
可以看出在并发50和100的情况下,100的调用时间略长。
 
使用locate和Instr得到的结果相仿,都是36秒~37秒之间。
 
从100万次的测试中我们可以得到一个初步udev结论,那就是在这个场景中,position的性能相当要好一些。
 
而单线程的压测情况如何呢,我们使用benchmark来模拟。
 
比如压测md5的函数,就是这样的格式。
 
select benchmark( 500000000, md5( 'test' ) );
 
对于position和locate,instr,只是需要调整一下函数就可以了,我们还是指定为100万次。
 
position,locate,instr的性能结果是
 
1 row in set (8.23 sec)
 
1 row in set (8.21 sec)
 
1 row in set (8.23 sec)
 
可以看出来性能几乎是一样的,locate略微高一点点。
 
从这个测试也可以看出明显的性能差别,单线程压测的时候是8秒多,但是并发的时候就是36秒左右,这个差别其实很大了。
 
到此,相信大家对“MySQL中的字符函数的压力测试”有了更深的了解,不妨来实际操作一番吧! 

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读