myisampack工具(MyISAM表壓縮工具)

lhrbest發表於2017-12-14

myisampack工具(MyISAM表壓縮工具)




適用範圍

如果表在建立並匯入資料以後,不會再進行修改操作,這樣的表適合採用MyISAM壓縮表2

好處

極大減少磁碟空間佔用,因此減少磁碟的I/O,從而提升查詢效能。

注意事項

壓縮後的表是不能進行修改的(除非先將表解除壓縮,修改資料,然後再次壓縮)。壓縮表支援索引,但索引也是隻讀的。2

壓縮方法

使用myisampack對MyISAM表進行壓縮(也叫打包)。

myisampack工具可以壓縮MyISAM.MYIsampack分別壓縮表中的每一列。通常,myisampack可以將資料檔案壓縮到40%-70%

當以後使用表時,解壓縮列需要的資訊被讀入記憶體。當訪問具體的記錄時效能會更好,因為你只需要解壓縮一個記錄。

MySQL使用mmap()對壓縮的表進行記憶體對映。如果mmap()不工作,MySQL返回到普通讀/寫檔案操作。

請注意:

  • 如果用--skip-external-locking選項呼叫mysqld伺服器,如果在壓縮過程中表可能被更新,呼叫myisampack不是一個好注意。
  • 表壓縮後,它變為只讀。這是故意的(例如當訪問CD上的壓縮的表時)。允許寫入到壓縮的表位於我們的TODO列表中,但優先順序較低。

     Myisampack的使用方式:

     /opt/mysql/bin/myisampack /opt/mysql/data/test/test

    

    執行myisampack後,必須執行myisamchk以重新建立索引。此時,你也可以排序索引塊並建立MySQL優化器需要的統計資訊以更有效地工作: 

 

    myisamchk的使用方法:

 

    myisamchk [OPTIONS] tables[.MYI]

 

    只能對MyISAM 儲存引擎的索引檔案有效




一、 簡介

myisampack是一個壓縮使用MyISAM引擎表的工具,一般會壓縮40%~70%,當需要訪問資料,伺服器會將所需要的資訊讀入到記憶體中,所以當訪問具體記錄時,效能會更好,因為只需要解壓一條記錄

MySQL使用mmap()對變哦進行壓縮對映,如果mmap()不工作,MySQL會返回到普通的讀寫檔案操作

壓縮後的表將會成為只讀的,並且myisampack不支援分割槽表。

二、 命令格式

myisampack 選項 檔名

三、 常用參

--backup-b --backup 使用tbl_name .OLD備份資料檔案

--force -f 產生一個壓縮的表,即使它比原始表大,或如果以前呼叫myisampack的中間檔案存在。(myisampack壓縮表時在資料庫目錄中建立一個名為tbl_name.TMD的中間檔案。如果殺掉myisampack,.TMD檔案會被刪除)。通常情況,如果myisampack發現tbl_name.TMD存在則退出並提示錯誤。用--force,myisampack則一定壓縮表。

--join=big_tbl_name -j big_tbl_name 將命令列中的所有表聯接為一個表big_tbl_name。將要連線的所有表必須有相等的結構(相同的列名和型別,相同的索引等等)。

--packlength=len,-p len 指定記錄長度儲存大小,以位元組計。值應為1、2或者3。myisampack儲存所有長度指標為1、2或者3位元組的行。在大多數正常情況下,myisampack在開始壓縮檔案前可以確定準確的長度值,但在壓縮過程中它可以提示它可能已經使用了一個短的長度。在這種情況下,myisampack輸出一條提示,下次你壓縮同一檔案時,你可以使用更短的記錄長度。

--silent,-s 沉默模式。只有發生錯誤時才寫輸出。

--test,-t 沒有實際地壓縮表,只是測試壓縮。

--tmpdir=path,-T path 使用myisamchk建立臨時檔案的目錄。

--verbose,-v 冗長模式。寫壓縮操作過程相關資訊和其結果。

--version,-V 顯示版本資訊並退出。

--wait,-w 如果表正使用則等待並重試。如果用--skip-external-locking選項呼叫了mysqld伺服器,如果在壓縮過程中表可能被更新,呼叫myisampack不是一個好主意。

執行myisampack後,必須執行myisamchk以重新建立索引。此時,你也可以排序索引塊並建立MySQL優化器需要的統計資訊以更有效地工作: shell> myisamchk -rq --sort-index--analyze tbl_name.MYI 將壓縮的表安裝到MySQL資料庫目錄中後,應執行mysqladmin flush-tables以強制mysqld使用新的表。 要想解壓縮一個壓縮的表,使用myisamchk或isamchk的--unpack選項。

 

--help 幫助

 

四、 常用例子

1. myisampack壓縮表

[root@localhosttest2]# ll -tr

總用量 180

-rw-rw---- 1 mysql mysql 65 7月 16 16:40 db.opt

-rw-rw---- 1 mysql mysql 8556 7月 16 16:46 t1.frm

-rw-rw---- 1 mysql mysql 1024 7月 16 17:29 t1.MYI

-rw-rw---- 1 mysql mysql 161742 7月 16 17:29 t1.MYD

[root@localhost test2]# myisampack t1

Compressing t1.MYD: (23106 records)

- Calculating statistics

- Compressing file

85.68%

[root@localhosttest2]# ll -tr

總用量 44

-rw-rw---- 1 mysql mysql 65 7月 16 16:40 db.opt

-rw-rw---- 1 mysql mysql 8556 7月 16 16:46 t1.frm

-rw-rw---- 1 mysql mysql 23167 7月 16 17:29 t1.MYD

-rw-rw---- 1 mysql mysql 1024 7月 16 17:30 t1.MYI

 

在Mysql中查詢

mysql>show table status like 't1'\G;

*************************** 1. row***************************

Name: t1

Engine: MyISAM

Version: 10

Row_format: Fixed

Rows: 22857

Avg_row_length: 7

Data_length: 159999

Max_data_length: 1970324836974591

Index_length: 1024

Data_free: 0

Auto_increment: NULL

Create_time: 2015-07-16 16:46:17

Update_time: 2015-07-16 17:29:40

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.00 sec)

 

ERROR:

No query specified

 

mysql>show table status like 't1'\G;

*************************** 1. row***************************

Name: t1

Engine: MyISAM

Version: 10

Row_format: Fixed

Rows: 23177

Avg_row_length: 7

Data_length: 162239

Max_data_length: 1970324836974591

Index_length: 1024

Data_free: 0

Auto_increment: NULL

Create_time: 2015-07-16 16:46:17

Update_time: 2015-07-16 17:30:48

Check_time: NULL

Collation: latin1_swedish_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.00 sec)

t8 lines: 7 columns: 9

2. myisampack備份資料庫檔案

[root@localhost test2]# ll

-rw-rw---- 1 mysql mysql 65 7月 16 16:40 db.opt

-rw-rw---- 1 mysql mysql 8572 7月 17 09:28 t1.frm

-rw-rw---- 1 mysql mysql 73 7月 17 09:50 t1.MYD

-rw-rw---- 1 mysql mysql 1024 7月 17 10:04 t1.MYI

-rw-rw---- 1 mysql mysql 217月 17 09:50 t1.OLD

-rw-rw---- 1 mysql mysql 8598 7月 17 10:10 t2.frm

-rw-rw---- 1 mysql mysql4344192 7月 17 10:11 t2.MYD

-rw-rw---- 1 mysql mysql 4955136 7月 17 10:11 t2.MYI

-rw-rw---- 1 mysql mysql 8572 7月 17 10:06 t3.frm

-rw-rw---- 1 mysql mysql 147456 7月 17 10:06 t3.ibd

-rw-rw---- 1 mysql mysql 8598 7月 17 10:11 t4.frm

-rw-rw---- 1 mysql mysql 4344192 7月 17 10:11 t4.MYD

-rw-rw---- 1 mysql mysql 1024 7月 17 10:11 t4.MYI

-rw-rw---- 1 mysql mysql 8598 7月 17 10:12 t5.frm

-rw-rw---- 1 mysql mysql 1996157 7月 17 10:12 t5.MYD

-rw-rw---- 1 mysql mysql 1024 7月 17 10:12 t5.MYI

-rw-rw---- 1 mysql mysql4344192 7月 17 10:12 t5.OLD

我們發現備份出來的資料檔案與原來的檔案大小一致,但是壓縮後的資料檔案會小一些

 

3. 向T5中插入資料

 

mysql> insert into t5(str_number)values(1);

ERROR 1036 (HY000): Table 't5' is read only






About Me

.............................................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文部落格園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群號:230161599(滿)、618766405

● 微信群:可加我微信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友646634621,註明新增緣由

● 於 2017-12-01 09:00 ~ 2017-12-31 22:00 在魔都完成

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

.............................................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。

   小麥苗的微信公眾號      小麥苗的DBA寶典QQ群2     《DBA筆試面寶典》讀者群       小麥苗的微店

.............................................................................................................................................

myisampack工具(MyISAM表壓縮工具)
DBA筆試面試講解群
《DBA寶典》讀者群 歡迎與我聯絡



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2148714/,如需轉載,請註明出處,否則將追究法律責任。

相關文章