Skip to content

MariaDB: Konverze na Barracudu a třešnička navíc ;-)

Tento miniblog je spíše rychlé how-to jak změnit původní formát MySQL/MariaDB tabulek na Barracudu. Antelope a Barracuda jsou dva InnoDB formáty tabulek z nichž Antelope je původní, řekněmě tedy starý, formát. Tyto formáty podporují různé ROW formáty, v případě Antelope jsou to pouze dva: Compact a Redundant, v případě Barracudy jsou to kromě již zmíněných ještě Dynamic a Compressed. Právě formát Compressed je ta třešnička navíc, která umožňuje, jak je z názvu patrné, navíc ještě kompresi tabulky.

Před samotnou konverzí je třeba upravit my.cnf:

innodb_file_format = Barracuda
innodb_file_per_table = 1

Je nutné nastavit hlavně druhou volbu innodb_file_per_table – každá InnoDB tabulka musí mít vlastní tablespace tzn. že jednotlivé tabulky mají vlastní soubory na disku. Pokud máte InnoDB databázi a neměli jste v konfiguraci tuto volbu, bude potřeba databázi vydumpovat, dropnout a znovu naimportovat.

Pokud jsou tedy již tabulky rozděleny po souborech, je možné provést konverzi online. Konverze je jednoduchá a spočívá pouze v provedení ALTER TABLE na každou InnoDB tabulku v dané databázi. Před samotnou konverzí doporučuji zkontrolovat, zda je dostatek místa na disku, kvůli pomocným datům, která při konverzi vznikají a to ideálně alespoň o velikosti db x 2.

 

Konverze na COMPRESSED:

#!/bin/bash
tabulky=`echo "show tables"|mysql mojedb -N -px`
for i in $tabulky;do
echo "ALTER TABLE $i ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=4;"| mysql -px mojedb
done

Čas konverze je závislý na velikosti db, rychlosti disku a výkonu cpu.

V mém případě se podařilo bez problémů přejít na Barracudu a jako bonus se z 6.5GB velké db stala 2GB db při KEY_BLOCK_SIZE=4 (při 8 to místo 2G bylo 2.5G, pro příklad).

Ještě malá poznámka ke KEY_BLOCK_SIZE. Při použití komprese (1, 2, 4, 8K) je potřeba počítat s navýšením paměti pro innodb_buffer_pool_size, pokud není pool již dostatečně naddimenzován. Je to z toho důvodu, že do poolu jsou ukládány komprimované i nekomprimované stránky. Komprese na 16K nebude příliš účinná, protože 16K je výchozí velikost stránky.

Příklad výpočtu:

Máme 24G pool a KEY_BLOCK_SIZE=4.
4 je 25% ze 16
25% z 24G je 6G

Velikost poolu se tedy zvedne z 24G na 30G (24G+6G)

Pokud používáte například Galeru a jako inicializační metodu synchronizace máte rsync, jistě oceníte menší fyzickou velikost databáze a tím pádem i mnohem kratší čas nutný pro její zreplikování.

To je tedy vše 🙂

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Time limit is exhausted. Please reload the CAPTCHA.