中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中如何進行數據壓縮性能對比

發布時間:2021-11-06 17:22:19 來源:億速云 閱讀:118 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關mysql中如何進行數據壓縮性能對比的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    1. 測試環境

    1.1 軟硬件

    一臺 64位 2.6.18-92 內核Linux開發機,4G內存,4個2800Mhz Dual-Core AMD Opteron(tm) Processor 2220 CPU。

    MySQL放在一塊7200轉SAT硬盤,未做raid

    MySQL未做任何優化, 關閉了query cache ,目的在于避免query cache對測試結果造成干擾。

    1.2 表結構

    2424753條記錄,生產環境某一個分片的實際數據;

    分別建立了(partition_by1,idx_rank) 和 (partition_by1,chg_idx)的聯合索引,其中 partition_by1為32長度的varchar類型 ,用于檢索;其余兩個字段均為浮點數,多用于排序;

    autokid作為子增列,充當PRIMARY KEY,僅作為數據裝載時原子性保證用,無實際意義。

    2. 測試目的

    2.1 壓縮空間對比

    壓縮率越大,占用的磁盤空間越小,直接降低數據的存儲成本;

    2.2 查詢性能對比

    壓縮后查詢性能不應該有顯著降低。Archive是不支持索引的,因此性能降低是必然的,那么我們也應該心里有個譜,到底降低了多少,能不能接受。

    3. 測試工具

    3.1 mysqlslap

    官方的工具當然是不二之選。關于mysqlslap的介紹請參考 官方文檔 。

    3.2 測試query

    截取生產環境訪問topranks_v3表的實際SQL共9973條,從中抽取訪問量較大的7條,并發50,重復執行10次。命令如下:

    ./mysqlslap --defaults-file=../etc/my.cnf -u**** -p**** -c50 -i10 -q ../t.sql --debug-info

    4.測試結論

    比較項磁盤空間耗時(秒)CPU IdleLOAD并發
    基準表(MyISAM)4039560042.308301550
    ARCHIVE75630745>3007541
    PACK993021092.596302250

    根據上面的表格給出的測試數據,我們簡單得出以下結論:

    • 針對測試表,Archive表占用空間約為之前的18.7%myisampack后空間占用約為之前的24.6%;二者相差不多,單純從空間利用情況來看,我們似乎需要選擇archive表;

    • 我們再看查詢性能,與基準表進行對比。無論在總耗時還是系統負載方面,50并發下的pack表查詢性能與基準表相當; 而archive表在單并發情況下耗時超過了5分鐘 (實在等不了了,kill之)!

    那么,我們似乎可以得出結論,針對需要在線查詢的表,ARCHIVE引擎基本上可以不考慮了。

    為什么這個測試過程中ARCHIVE引擎如此地慢呢?

    我們知道,mysql提供archive這種存儲引擎是為了降低磁盤開銷,但還有一個前提,那就是被歸檔的數據不需要或者很少被在線查詢,偶爾的查詢慢一些也是沒關系的。鑒于上述原因,archive表是不允許建立自增列之外的索引的。

    有了這個共識,我們拿一條測試SQL來分析一下不用索引前后的查詢性能差別為什么這么大。

    在我們的測試SQL中有這么一條:

    SELECT c1,c2,...,cn FROM  mysqlslap.rpt_topranks_v3
    WHERE ... AND partition_by1 = '50008090'
    ORDER BY added_quantity3 DESC
    LIMIT 500

    我們前邊說過,測試的這個表在partition_by1這個字段上建立了索引,那么,我們初步判斷在基準表和myisampack表上,這個查詢應該用到了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)

    正如我們所料,這個查詢用到了建立在partition_by1這個字段上的索引,匹配的目標行數為2477,然后還有一個在added_quantity3字段上的排序。由于added_quantity3沒有索引,所以用到了filesort

    我們再看一下這條SQL在歸檔表上的 EXPLAIN 結果:

    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 說:“我沒有索引可用,所以只能全表掃描2424753行記錄,然后再來個filesort。”你要追求性能,那顯然是委屈MySQL了。

    感謝各位的閱讀!關于“mysql中如何進行數據壓縮性能對比”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    景宁| 溆浦县| 阿图什市| 汾阳市| 漳州市| 津南区| 泾源县| 泸水县| 郴州市| 天津市| 山东省| 武清区| 成武县| 杂多县| 临湘市| 鄂温| 长丰县| 阿瓦提县| 辉南县| 延津县| 原阳县| 兴山县| 宜黄县| 泰和县| 宝丰县| 沂源县| 富顺县| 天等县| 深圳市| 虹口区| 巴林左旗| 廊坊市| 和政县| 仪陇县| 西华县| 遂溪县| 灌云县| 新源县| 郑州市| 桃园县| 仙居县|