欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql的數(shù)據(jù)壓縮性能對比詳情

 更新時間:2021年11月06日 15:19:11   作者:IT技術博客  
這篇文章主要介紹了mysql的數(shù)據(jù)壓縮性能對比,今天對這兩種方式分別進行了測試,對比了二者在磁盤占用以及查詢性能方面各自的優(yōu)劣,下面我們大家一起進入文章了解詳細內(nèi)容,需要的朋友也可以參考一下

數(shù)據(jù)魔方需要的數(shù)據(jù),一旦寫入就很少或者根本不會更新。這種數(shù)據(jù)非常適合壓縮以降低磁盤占用。MySQL本身提供了兩種壓縮方式――archive引擎以及針對MyISAM引擎的myisampack方式。今天對這兩種方式分別進行了測試,對比了二者在磁盤占用以及查詢性能方面各自的優(yōu)劣。至于為什么做這個,你們應該懂的,我后文還會介紹。且看正文:

1. 測試環(huán)境

1.1 軟硬件

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

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

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

1.2 表結構

2424753條記錄,生產(chǎn)環(huán)境某一個分片的實際數(shù)據(jù);

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

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

2. 測試目的

2.1 壓縮空間對比

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

2.2 查詢性能對比

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

3. 測試工具

3.1 mysqlslap

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

3.2 測試query

截取生產(chǎn)環(huán)境訪問topranks_v3表的實際SQL共9973條,從中抽取訪問量較大的7條,并發(fā)50,重復執(zhí)行10次。命令如下:

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

4.測試結論

比較項 磁盤空間 耗時(秒) CPU Idle LOAD 并發(fā)
基準表(MyISAM) 403956004 2.308 30 15 50
ARCHIVE 75630745 >300 75 4 1
PACK 99302109 2.596 30 22 50

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

  • 針對測試表,Archive表占用空間約為之前的18.7%,myisampack后空間占用約為之前的24.6%;二者相差不多,單純從空間利用情況來看,我們似乎需要選擇archive表;
  • 我們再看查詢性能,與基準表進行對比。無論在總耗時還是系統(tǒng)負載方面,50并發(fā)下的pack表查詢性能與基準表相當; 而archive表在單并發(fā)情況下耗時超過了5分鐘 (實在等不了了,kill之)!

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

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

我們知道,mysql提供archive這種存儲引擎是為了降低磁盤開銷,但還有一個前提,那就是被歸檔的數(shù)據(jù)不需要或者很少被在線查詢,偶爾的查詢慢一些也是沒關系的。鑒于上述原因,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這個字段上的索引,匹配的目標行數(shù)為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的數(shù)據(jù)壓縮性能對比詳情的文章就介紹到這了,更多相關mysql的數(shù)據(jù)壓縮性能對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在centos7下安裝和部署java8和mysql

    在centos7下安裝和部署java8和mysql

    一般學習java和部署項目都是在本地部署,但是生產(chǎn)環(huán)境一般都是在linux環(huán)境下,部署和安裝環(huán)境都是在控制臺下進行操作的,沒有windows的可視化的操作界面,對與linux的命令掌握和操作對小白來說都是一個個挑戰(zhàn),記錄下自己的安裝配置過程
    2017-04-04
  • MySQL觸發(fā)器的使用詳解

    MySQL觸發(fā)器的使用詳解

    觸發(fā)器trigger是一種特殊的存儲過程,他在插入(inset)、刪除(delete)或修改(update)特定表中的數(shù)據(jù)時觸發(fā)執(zhí)行,下面這篇文章主要給大家介紹了關于MySQL觸發(fā)器使用的相關資料,需要的朋友可以參考下
    2022-06-06
  • MySql 存儲引擎和索引相關知識總結

    MySql 存儲引擎和索引相關知識總結

    這篇文章主要介紹了MySql 存儲引擎和索引相關知識總結,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • 一文帶你了解MySQL中的子查詢

    一文帶你了解MySQL中的子查詢

    子查詢指一個查詢語句嵌套在另一個查詢語句內(nèi)部的查詢,這個特性從MySQL 4.1開始引入,SQL中子查詢的使用大大增強了SELECT 查詢的能力,本文帶大家詳細了解MySQL中的子查詢,需要的朋友可以參考下
    2023-06-06
  • PHP mysqli 增強 批量執(zhí)行sql 語句的實現(xiàn)代碼

    PHP mysqli 增強 批量執(zhí)行sql 語句的實現(xiàn)代碼

    本篇文章介紹了,在PHP中 mysqli 增強 批量執(zhí)行sql 語句的實現(xiàn)代碼。需要的朋友參考下
    2013-05-05
  • MySQL連接異常:Communications link failure問題及解決

    MySQL連接異常:Communications link failure問題及解決

    這篇文章主要介紹了MySQL連接異常:Communications link failure問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Mysql樹形遞歸查詢的實現(xiàn)方法

    Mysql樹形遞歸查詢的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Mysql樹形遞歸查詢的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • The MySQL server is running with the --read-only option so it cannot execute this statement

    The MySQL server is running with the --read-only option so i

    1209 - The MySQL server is running with the --read-only option so it cannot execute this statement
    2020-08-08
  • MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    MySQL數(shù)據(jù)庫忽略大小寫的配置方法

    這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫忽略大小寫的配置方法,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • MySQL for update鎖表還是鎖行校驗(過程詳解)

    MySQL for update鎖表還是鎖行校驗(過程詳解)

    在MySQL中,使用for update子句可以對查詢結果集進行行級鎖定,以便在事務中對這些行進行更新或者防止其他事務對這些行進行修改,這篇文章主要介紹了MySQL for update鎖表還是鎖行校驗,需要的朋友可以參考下
    2024-02-02

最新評論