本篇內容主要講解“中的字符函數的壓力測試”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強。下面就讓小編來(lái)帶大家學(xué)習“MySQL中的字符函數的壓力測試”吧!
MySQL中的字符串處理函數非常多,以至于我在整理的這部分內容的時(shí)候也眼前一亮,有一種進(jìn)了大觀(guān)園的感覺(jué),哦,原來(lái)有這個(gè)函數,哦,竟然可以這樣實(shí)現,以前怎么沒(méi)想到,等等。
比如字符串查找函數,instr,locate,position三個(gè)函數的功能都是很相似的。如果要實(shí)現一個(gè)功能,從字符串foobarbar里面找到bar這個(gè)字符串的起始位置,使用Instr,locate,position都可以實(shí)現。
SELECT INSTR('foobarbar', 'bar');
SELECT LOCATE('bar', 'foobarbar');
SELECT POSITION('bar' IN 'foobarbar');
主要語(yǔ)法的表現形式不同,當然參數設置上還是有一些差別。
對于上面的3個(gè)函數,我有些糾結,到底用哪一個(gè)呢?推薦是哪一個(gè)呢?我覺(jué)得可以通過(guò)兩種測試方式來(lái)得到一個(gè)初步的結論,第一個(gè)是高并發(fā)下多線(xiàn)程調用的性能情況,第二個(gè)是單線(xiàn)程執行的性能情況。如果在對比測試中高出一籌,還有什么理由不去推薦呢。
要實(shí)現這兩個(gè)功能,MySQL缺失提供了這樣的工具集,第一個(gè)是并發(fā)執行的性能情況,可以使用MySQL自帶的mysqlslap來(lái)測試。
而第二個(gè)單線(xiàn)程的壓測,則可以使用MySQL非常有特色的函數benchmark來(lái)實(shí)現。
如果使用myslap來(lái)壓測,使用mysqlslap的語(yǔ)句類(lèi)似下面的形式。
mysqlslap --concurrency=50,100 --create-schema="test" --query="SELECT POSITION('bar' in 'foobar');" --number-of-queries=50000
當然這里我們加大難度,一個(gè)是拼接的字符串要復雜,我們可以使用字符串函數repeat得到一個(gè)很長(cháng)的字符串,比如concat(concat(repeat('abc',500),'foobarbar'),repeat('abc',500)) 就可以得到一個(gè)很長(cháng)的字符串。
通過(guò)這種方式得到的測試結果相對來(lái)說(shuō)更有意義一些。
我們調大調用的頻次為100萬(wàn)次,使用并發(fā)50和100來(lái)做測試。
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
可以看出在并發(fā)50和100的情況下,100的調用時(shí)間略長(cháng)。
使用locate和Instr得到的結果相仿,都是36秒~37秒之間。
從100萬(wàn)次的測試中我們可以得到一個(gè)初步udev結論,那就是在這個(gè)場(chǎng)景中,position的性能相當要好一些。
而單線(xiàn)程的壓測情況如何呢,我們使用benchmark來(lái)模擬。
比如壓測md5的函數,就是這樣的格式。
select benchmark( 500000000, md5( 'test' ) );
對于position和locate,instr,只是需要調整一下函數就可以了,我們還是指定為100萬(wàn)次。
position,locate,instr的性能結果是
1 row in set (8.23 sec)
1 row in set (8.21 sec)
1 row in set (8.23 sec)
可以看出來(lái)性能幾乎是一樣的,locate略微高一點(diǎn)點(diǎn)。
從這個(gè)測試也可以看出明顯的性能差別,單線(xiàn)程壓測的時(shí)候是8秒多,但是并發(fā)的時(shí)候就是36秒左右,這個(gè)差別其實(shí)很大了。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站