Adatbázis-tömörítés és töredezettségmentesítés a MySQL-ben és a MariaDB-ben

Ebben a cikkben megvizsgáljuk a táblák és adatbázisok tömörítésének és töredezettségmentesítésének módszereit a MySQL / MariaDB-ben, amely lehetővé teszi lemezterület megtakarítását az adatbázisból.

A nagy projektekben az idő múlásával az adatbázisok hatalmas méretűvé válnak, és mindig felmerül a kérdés, hogyan lehet ezt kezelni. Számos lehetőség létezik ennek a problémának a megoldására. Csökkentheti magában az adatbázisban az adatmennyiséget a régi információk törlésével, az adatbázis felosztására többre, a kiszolgáló lemezterületének növelésére vagy a táblák tömörítésére.

Az adatbázis működésének másik fontos szempontja a táblák és adatbázisok időszakos töredezettségmentesítésének szükségessége, ami jelentősen felgyorsíthatja azok munkáját.

Tartalom:

  • Adatbázis-tömörítés és -optimalizálás az InnoDB táblázat típusával
  • Tömörítse a MyISAM táblákat a MySQL-ben
  • Táblázat és adatbázis optimalizálás a MySQL / MariaDB-ben

Adatbázis-tömörítés és -optimalizálás az InnoDB táblázat típusával

Ibdata1 és ib_log fájlok

Sok projekt táblázatokkal InnoDB probléma van a hatalmas fájlméretekkel ibdata1 és ib_log. Ennek oka a legtöbb esetben a MySQL / MariaDB kiszolgáló helytelen beállításainak vagy az adatbázis architektúrájának. Minden információ a táblázatokból InnoDB fájlban tárolva ibdata1, akinek a helyét önmagában nem szabadítja fel. Inkább a táblázati adatokat külön fájlokban tárolom ibd *. Ehhez a konfigurációs fájlban my.cnf sor hozzáadása:

innodb_file_per_table

vagy

innodb_file_per_table = 1

Ha a kiszolgáló már konfigurálva van, és több működő adatbázisa van táblákkal InnoDB, a következőket kell tennie:

  1. Készítsen biztonsági másolatot a kiszolgálón lévő összes adatbázisról (a mysql és a performance_schema kivételével). A kihagyott alapok a következő paranccsal távolíthatók el: # mysqldump -u [felhasználónév] -p [jelszó] [adatbázis_neve]> [dump_file.sql]
  2. Az adatbázis biztonsági mentése után állítsa le a mysql / mariadb szervert;
  3. Módosítsa a my.cfg fájl beállításait;
  4. Fájlok törlése ibdata1 és ib_log fájlokat;
  5. Indítsa el a mysql / mariadb szervert;
  6. Minden adatbázis visszaállítása a biztonsági mentésből:# mysql -u [felhasználónév] -p [jelszó] [adatbázis_neve] < [dump_file.sql]

Az eljárás elvégzése után az összes táblázat InnoDB külön fájlokban és fájlban tárolódnak ibdata1 nem növekszik exponenciálisan.

InnoDB tábla-tömörítés

A táblákat tömörítheti szöveges / BLOB típusú adatokkal. Ha hasonló táblázatok vannak, akkor nagyon sok helyet spórolhat meg.

Van egy innodb_test adatbázisom olyan táblázatokkal, amelyeket potenciálisan lehet tömöríteni és felszabadítani a lemezterületről. Minden munka megkezdése előtt nagyon ajánlom, hogy készítsen biztonsági másolatot minden adatbázisáról. Csatlakozás a mysql szerverhez:

# mysql -u root -p

Jelentkezzen be a mysql konzolon a kívánt adatbázisba:

# innodb_test használata;

A táblák és méretük felsorolásához használja a következő lekérdezést:

SELECT table_name AS "Table",
KERET (((adat_hossz + index_hossz) / 1024/1024), 2) AS "Méret (MB)"
FROM information_schema.TABLES
WHERE table_schema = "innodb_test"
RENDELÉS (adat_hossz + index_hossz) DESC;

Ahol az innodb_test az adatbázis neve.

Valószínű, hogy néhány táblázat tömöríthető. Vegyük példa a b_crm_event_relations táblát. Futtassa a kérelmet:

mysql> ALTER TABLE b_crm_event_relations ROW_FORMAT = COMPRESSED;

Lekérdezés rendben, 0 sor érintett (3,27 mp) Rekordok: 0 Másolatok: 0 Figyelmeztetések: 0

A végrehajtás után láthatja, hogy a tömörítés miatt az asztal mérete 26-ről 11 MB-ra csökkent.

Az asztali tömörítésnek köszönhetően sok lemezterületet takaríthat meg a szerveren. Ha tömörített táblákkal dolgozik, akkor a processzor terhelése növekszik. Táblázat-tömörítést kell használni, ha nincs probléma a processzor erőforrásaival, de van egy probléma a lemezterülettel.

Tömörítse a MyISAM táblákat a MySQL-ben

A formátumtáblák tömörítése MyISAM, a kiszolgálókonzol speciális kérését kell használnia, nem pedig a mysql konzolban. A kívánt táblázat tömörítéséhez tegye a következőket:

# myisampack -b / var / lib / mysql / test / modx_session

Ahol a / var / lib / mysql / test / modx_session az asztalhoz vezető út. Sajnos nem volt feltöltött adatbázisom, és kis táblákon kellett tömörítést végeznem, de az eredmény továbbra is látható (a fájlt 25 és 18 MB között tömörítették):

# du -sh modx_session.MYD

25M modx_session.MYD

# myisampack -b / var / lib / mysql / test / modx_session

/Var/lib/mysql/test/modx_session.MYD tömörítése: (4933 rekord) - Statisztikai adatok kiszámítása - Fájl tömörítése 29,84% Ne felejtse el a myisamchk -rq fájlt tömörített táblákon futtatni. 

# du -sh modx_session.MYD

18M modx_session.MYD

A kérésben meghatároztuk a -b kapcsolót, amikor hozzáadódik, a tömörítés előtt létrejön egy asztali biztonsági mentés, és öregként van megjelölve:

# ls -la modx_session.OLD

-rw-r ----- 1 mysql mysql 25550000 december 17 15:20 modx_session.OLD

# du -sh modx_session.OLD

25M modx_session.OLD

Táblázat és adatbázis optimalizálás a MySQL / MariaDB-ben

A táblák és az adatbázisok optimalizálása érdekében javasolt a töredezettségmentesítés. Ellenőrizze, hogy vannak-e az adatbázisban olyan táblák, amelyek töredezettségmentesítést igényelnek.

Lépjünk be a MySQL konzolba, válasszuk ki a szükséges adatbázist, és hajtsuk végre a lekérdezést:

válassza a table_name, round (data_length / 1024/1024) mint data_length_mb, round (data_free / 1024/1024) data_free_mb forrást az information_schema.table táblázatokból, ahol a round (data_free / 1024/1024)> 50 sorrendben van a data_free_mb segítségével;

Így minden olyan táblát megjelenítünk, amelyek legalább 50 MB fel nem használt területtel rendelkeznek:

+-------------------------------+----------------+--------------+ | TABLE_NAME | adat_hossz_mb | data_free_mb | + ------------------------------- + ---------------- + -------------- + | b_disk_deleted_log_v2 | 402 | 64 | | b_crm_timeline_bind | 827 | 150 | | b_disk_object_path | 980 | 72. |

data_length_mb - a táblázat teljes mérete

data_free_mb - fel nem használt táblaterület

Lebonthatjuk ezeket a táblákat. Ellenőrizze a lemezterületet, mielőtt:

# ls -lh / var / lib / mysql / innodb_test / | grep b_

-rw-r ----- 1 mysql mysql 402M december 17 15:43 b_disk_deleted_log_v2.MYD -rw-r ----- 1 mysql mysql 828M december 17 14:52 b_crm_timeline_bind.MYD -rw-r ----- 1 mysql mysql 981M december 17, 15:45 b_disk_object_path.MYD

A táblák optimalizálásához használja a következő parancsot a mysql konzolban:

# TÁBLÁZAT optimalizálása b_disk_deleted_log_v2, b_disk_object_path, b_crm_timeline_bind;

A sikeres töredezettségmentesítés után rendelkeznie kell valamivel ilyen kimeneten:

+-------------------------------+----------------+--------------+ | TABLE_NAME | adat_hossz_mb | data_free_mb | + ------------------------------- + ---------------- + -------------- + | b_disk_deleted_log_v2 | 74 | 0 | | b_crm_timeline_bind | 115 | 0 | | b_disk_object_path | 201 | 0 |

Mint láthatja, az data_free_mb értéke 0, és a táblázat mérete összességében jelentősen (3-4-szer) csökkent..

A mysqlcheck segédprogram segítségével a kiszolgálókonzolból is defragmentálhatja:

# mysqlcheck -o innodb_test b_workflow_file -u root -p innodb_test.b_workflow_file

Ahol az innodb_test az adatbázis

És a b_workflow_file a kívánt tábla neve

A szükséges adatbázis összes táblájának optimalizálásához futtassa a parancsot a kiszolgálókonzolon:

# mysqlcheck -o innodb_test -u root -p

Ahol az innodb_test a kívánt adatbázis neve.

Vagy végezze el a kiszolgálón lévő összes adatbázis optimalizálását:

# mysqlcheck -o - minden-adatbázis -u root -p

Ha az optimalizálás előtt és után ellenőrzi az adatbázis méretét, akkor az egész mérete csökkent:

# du -sh

2.5G

# mysqlcheck -o innodb_test -u root -p

Írja be a jelszót: innodb_test.b_admin_notify megjegyzés: A táblázat nem támogatja az optimalizálást, újjáépítés + elemzés helyett állapot: OK innodb_test.b_admin_notify_lang megjegyzés: A táblázat nem támogatja az optimalizálást, újjáépítés + elemzés helyett állapot: OK innodb_test.b_adv_banner Megjegyzés: A táblázat nem támogatja optimalizálás, újjáépítés + elemzés helyett állapot: OK ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~~~~~~~~~~~~~~ 

# du -sh

1.7G

Így helyet takaríthat meg a szerveren, rendszeresen optimalizálhatja és tömörítheti a táblázatokat és az adatbázisokat. Mielőtt bármilyen optimalizálási munkát elvégeznék, megismétlem az adatbázis biztonsági másolatát.