2017-02-15 23 views
0

我有很多VARCHAR,TINYTEXTTEXT字段的巨型表格。由於我不是MySQL數據庫的專家,我最近遇到了這個頁面InnoDB Table Compression的MySQL數據庫的壓縮功能。在我的實時數據庫上測試MySQL壓縮

我已經搜索並閱讀多個頁面,並遇到了,我需要設置以下參數以及這些變化適用於我my.cnf

innodb_file_per_table=1; (this is already set) 
innodb_file_format=Barracuda; 

和表結構:

... 
ROW_FORMAT=COMPRESSED 
KEY_BLOCK_SIZE=8; (possibly I need to do a trial-and-error to find a 
        better key_block_size that fits better to my case) 

所以,我想首先測試一下,看看這種壓縮會如何讓我在桌面尺寸上受益,並希望更好地管理我的空間。爲了做這個測試,我將生成一個帶有幾百或幾千行原始表格的示例表格,並進行試驗和性能測量。

由於這將是一個測試過程,由於我沒有任何其他服務器來做測試,所以我不想冒任何風險。

這裏是我的問題:

如果我改變我目前的服務器上我my.cnf文件(通過增加innodb_file_format=Barracuda;),並重新啓動服務器將它必須有ROW_FORMAT=COMPACT在我現有的表/數據有什麼影響?

我找不到任何地方回答/提到這一點,所以在此先感謝。

回答

2

innodb_file_format適用於新創建的表格,而不是現有的表格。我認爲你甚至不需要重新啓動。

SET GLOBAL命令需要root權限,但在此之後,您可以作爲普通用戶運行。

SET GLOBAL innodb_file_format=Barracuda; 
SET GLOBAL innodb_file_per_table=1;  -- already done 
SET GLOBAL innodb_large_prefix=1;  -- optional 
logout & login (to get the global values); 
ALTER TABLE tbl ROW_FORMAT=COMPRESSED; -- This assumes table exists 
CREATE TABLE tbl (... 
    ) ROW_FORMAT=COMPRESSED;   -- This assumes creating 
+0

因此,通過這你的意思是會有我現在的表和數據沒有傷害和/或效果,如果我只設置'innodb_file_format =梭子魚;''在my.cnf'(或做'SET GLOBAL innodb_file_format =梭子魚;')?如果是的話,我會很好的開始我的測試:) – SAVAFA

+1

我相信這是真的。但是如果你做了進一步的研究,在一個單獨的系統中測試它等等,我從來沒有冒犯過。 –

+0

謝謝,它按預期工作。在my.cnf中設置'innodb_file_format = Barracuda'後,我現在可以在PMA中使用所有四種文件格式。這意味着使用'ROW_FORMAT = COMPACT'不會對我現有的表產生任何影響 – SAVAFA