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:
- 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]
- Az adatbázis biztonsági mentése után állítsa le a mysql / mariadb szervert;
- Módosítsa a my.cfg fájl beállításait;
- Fájlok törlése ibdata1 és ib_log fájlokat;
- Indítsa el a mysql / mariadb szervert;
- 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.