mysql的數(shù)據(jù)壓縮性能對(duì)比詳情
數(shù)據(jù)魔方需要的數(shù)據(jù),一旦寫入就很少或者根本不會(huì)更新。這種數(shù)據(jù)非常適合壓縮以降低磁盤占用。MySQL本身提供了兩種壓縮方式――archive
引擎以及針對(duì)MyISAM
引擎的myisampack
方式。今天對(duì)這兩種方式分別進(jìn)行了測(cè)試,對(duì)比了二者在磁盤占用以及查詢性能方面各自的優(yōu)劣。至于為什么做這個(gè),你們應(yīng)該懂的,我后文還會(huì)介紹。且看正文:
1. 測(cè)試環(huán)境
1.1 軟硬件
一臺(tái) 64位 2.6.18-92
內(nèi)核Linux
開(kāi)發(fā)機(jī),4G內(nèi)存,4個(gè)2800Mhz Dual-Core AMD Opteron
(tm) Processor
2220 CPU。
MySQL放在一塊7200轉(zhuǎn)SAT硬盤,未做raid
;
MySQL未做任何優(yōu)化, 關(guān)閉了query cache
,目的在于避免query cache
對(duì)測(cè)試結(jié)果造成干擾。
1.2 表結(jié)構(gòu)
2424753條記錄,生產(chǎn)環(huán)境某一個(gè)分片的實(shí)際數(shù)據(jù);
分別建立了(partition_by1,idx_rank
) 和 (partition_by1,chg_idx
)的聯(lián)合索引,其中 partition_by1為32長(zhǎng)度的varchar類型 ,用于檢索;其余兩個(gè)字段均為浮點(diǎn)數(shù),多用于排序;
autokid
作為子增列,充當(dāng)PRIMARY KEY
,僅作為數(shù)據(jù)裝載時(shí)原子性保證用,無(wú)實(shí)際意義。
2. 測(cè)試目的
2.1 壓縮空間對(duì)比
壓縮率越大,占用的磁盤空間越小,直接降低數(shù)據(jù)的存儲(chǔ)成本;
2.2 查詢性能對(duì)比
壓縮后查詢性能不應(yīng)該有顯著降低。Archive
是不支持索引的,因此性能降低是必然的,那么我們也應(yīng)該心里有個(gè)譜,到底降低了多少,能不能接受。
3. 測(cè)試工具
3.1 mysqlslap
官方的工具當(dāng)然是不二之選。關(guān)于mysqlslap
的介紹請(qǐng)參考 官方文檔 。
3.2 測(cè)試query
截取生產(chǎn)環(huán)境訪問(wèn)topranks_v3
表的實(shí)際SQL共9973條,從中抽取訪問(wèn)量較大的7條,并發(fā)50,重復(fù)執(zhí)行10次。命令如下:
./mysqlslap --defaults-file=../etc/my.cnf -u**** -p**** -c50 -i10 -q ../t.sql --debug-info
4.測(cè)試結(jié)論
比較項(xiàng) | 磁盤空間 | 耗時(shí)(秒) | CPU Idle | LOAD | 并發(fā) |
基準(zhǔn)表(MyISAM) | 403956004 | 2.308 | 30 | 15 | 50 |
ARCHIVE | 75630745 | >300 | 75 | 4 | 1 |
PACK | 99302109 | 2.596 | 30 | 22 | 50 |
根據(jù)上面的表格給出的測(cè)試數(shù)據(jù),我們簡(jiǎn)單得出以下結(jié)論:
- 針對(duì)測(cè)試表,
Archive
表占用空間約為之前的18.7%
,myisampack
后空間占用約為之前的24.6%;二者相差不多,單純從空間利用情況來(lái)看,我們似乎需要選擇archive
表; - 我們?cè)倏床樵冃阅?,與基準(zhǔn)表進(jìn)行對(duì)比。無(wú)論在總耗時(shí)還是系統(tǒng)負(fù)載方面,50并發(fā)下的
pack
表查詢性能與基準(zhǔn)表相當(dāng); 而archive
表在單并發(fā)情況下耗時(shí)超過(guò)了5分鐘 (實(shí)在等不了了,kill之)!
那么,我們似乎可以得出結(jié)論,針對(duì)需要在線查詢的表,ARCHIVE
引擎基本上可以不考慮了。
為什么這個(gè)測(cè)試過(guò)程中ARCHIVE
引擎如此地慢呢?
我們知道,mysql
提供archive
這種存儲(chǔ)引擎是為了降低磁盤開(kāi)銷,但還有一個(gè)前提,那就是被歸檔的數(shù)據(jù)不需要或者很少被在線查詢,偶爾的查詢慢一些也是沒(méi)關(guān)系的。鑒于上述原因,archive
表是不允許建立自增列之外的索引的。
有了這個(gè)共識(shí),我們拿一條測(cè)試SQL來(lái)分析一下不用索引前后的查詢性能差別為什么這么大。
在我們的測(cè)試SQL中有這么一條:
SELECT c1,c2,...,cn FROM mysqlslap.rpt_topranks_v3 WHERE ... AND partition_by1 = '50008090' ORDER BY added_quantity3 DESC LIMIT 500
我們前邊說(shuō)過(guò),測(cè)試的這個(gè)表在partition_by1
這個(gè)字段上建立了索引,那么,我們初步判斷在基準(zhǔn)表和myisampack
表上,這個(gè)查詢應(yīng)該用到了partition_by1
的索引; EXPLAIN 一下:
mysql> EXPLAIN -> SELECT ... FROM mysqlslap.rpt_topranks_v3 -> WHERE ... AND partition_by1 = '50008090' -> ORDER BY added_quantity3 DESC -> LIMIT 500\G *************************** 1. row *************************** id: 1 select_type: SIMPLE TABLE: rpt_topranks_v3 type: ref possible_keys: idx_toprank_pid,idx_toprank_chg KEY: idx_toprank_pid key_len: 99 ref: const rows: 2477 Extra: USING WHERE; USING filesort 1 row IN SET (0.00 sec)
正如我們所料,這個(gè)查詢用到了建立在partition_by1
這個(gè)字段上的索引,匹配的目標(biāo)行數(shù)為2477,然后還有一個(gè)在added_quantity3
字段上的排序。由于added_quantity3
沒(méi)有索引,所以用到了filesort
。
我們?cè)倏匆幌逻@條SQL在歸檔表上的 EXPLAIN 結(jié)果:
mysql> EXPLAIN -> SELECT ... FROM mysqlslap.rpt_topranks_v3_<strong>archive</strong> -> WHERE ... AND partition_by1 = '50008090' -> ORDER BY added_quantity3 DESC -> LIMIT 500\G *************************** 1. row *************************** id: 1 select_type: SIMPLE TABLE: rpt_topranks_v3_archive type: ALL possible_keys: NULL KEY: NULL key_len: NULL ref: NULL rows: 2424753 Extra: USING WHERE; USING filesort 1 row IN SET (0.00 sec)
EXPLAIN 說(shuō):“我沒(méi)有索引可用,所以只能全表掃描2424753行記錄,然后再來(lái)個(gè)filesort
?!蹦阋非笮阅?,那顯然是委屈MySQL
了。
到此這篇關(guān)于mysql的數(shù)據(jù)壓縮性能對(duì)比詳情的文章就介紹到這了,更多相關(guān)mysql的數(shù)據(jù)壓縮性能對(duì)比內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。