A tárolómotorok olyan MySQL komponensek, amelyek a különböző táblatípusok SQL műveleteit kezelik. A InnoDB
az alapértelmezett és legáltalánosabb célú tárolómotor, és az Oracle a speciális felhasználási eseteket kivéve ezt ajánlja a táblákhoz. (A MySQL 8.0-ban a CREATE TABLE
utasítás alapértelmezés szerint InnoDB
táblákat hoz létre.)
A MySQL Server pluggable storage engine architektúrát használ, amely lehetővé teszi a tárolómotorok betöltését és eltávolítását a futó MySQL-kiszolgálóból.
Annak meghatározásához, hogy a kiszolgálója mely tárolómotorokat támogatja, használja a SHOW ENGINES
utasítást. A Support
oszlopban szereplő érték jelzi, hogy használható-e egy motor. A YES
, NO
vagy DEFAULT
érték azt jelzi, hogy egy motor elérhető, nem elérhető, vagy elérhető és jelenleg alapértelmezett tárolómotornak van beállítva.
mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...
Ez a fejezet a MySQL speciális célú tárolómotorjainak használati eseteit tárgyalja. Nem foglalkozik az alapértelmezett InnoDB
tárolómotorral vagy a NDB
tárolómotorral, amelyekkel a 15. fejezet, Az InnoDB tárolómotor és a 23. fejezet, MySQL NDB Cluster 8.0 foglalkozik. Haladó felhasználók számára tartalmazza a bővíthető tárolómotorok architektúrájának leírását is (lásd a 16.11. szakaszt, “A MySQL tárolómotorok architektúrájának áttekintése”).
A kereskedelmi MySQL Server binárisokban kínált funkciókkal kapcsolatos információkért lásd a MySQL Editions című részt a MySQL weboldalán. Az elérhető tárolómotorok attól függhetnek, hogy a MySQL melyik kiadását használja.
A MySQL tárolómotorokkal kapcsolatban gyakran feltett kérdésekre adott válaszokért lásd az A.2. szakasz “MySQL 8.0 GYIK: Tárolómotorok”.
MySQL 8.0 támogatott tárolómotorok
-
InnoDB
: A MySQL 8.0 alapértelmezett tárolómotorja. AInnoDB
egy tranzakcióbiztos (ACID-kompatibilis) tárolómotor a MySQL számára, amely rendelkezik commit, rollback és crash-recovery képességekkel a felhasználói adatok védelme érdekében. AInnoDB
sorszintű zárolás (durvább szemcseméretű zárolásokig történő eszkaláció nélkül) és az Oracle-stílusú konzisztens, nem zárolt olvasás növeli a többfelhasználós párhuzamosságot és a teljesítményt.InnoDB
a felhasználói adatokat fürtözött indexekben tárolja, hogy csökkentse az I/O-t az elsődleges kulcsokon alapuló gyakori lekérdezéseknél. Az adatintegritás fenntartása érdekében aInnoDB
támogatja aFOREIGN KEY
referenciális integritási korlátozásokat is. AInnoDB
-ről további információt a 15. fejezetben, Az InnoDB tárolómotor című fejezetben talál. -
MyISAM
: Ezek a táblák kis alapterületűek. A táblaszintű zárolás korlátozza a teljesítményt az írási/olvasási munkaterhelésekben, ezért gyakran csak olvasási vagy leginkább olvasási munkaterhelésekben használják webes és adattárházi konfigurációkban. -
Memory
: Minden adatot RAM-ban tárol, a gyors hozzáférés érdekében olyan környezetekben, ahol a nem kritikus adatok gyors keresésére van szükség. Ez a motor korábbanHEAP
motor néven volt ismert. Felhasználási esetei csökkennek; aInnoDB
a pufferpool memóriaterületével általános célú és tartós módot biztosít a legtöbb vagy az összes adat memóriában tartására, aNDBCLUSTER
pedig gyors kulcsérték-keresést biztosít hatalmas elosztott adathalmazok számára. -
CSV
: Táblái valójában vesszővel elválasztott értékeket tartalmazó szövegfájlok. A CSV-táblák lehetővé teszik az adatok CSV formátumban történő importálását vagy dumpolását, hogy adatokat cserélhessen olyan szkriptekkel és alkalmazásokkal, amelyek ugyanezt a formátumot olvassák és írják. Mivel a CSV táblák nem indexeltek, a normál működés során az adatokat általábanInnoDB
táblákban tartja, és csak az importálás vagy exportálás során használja a CSV táblákat. -
Archive
: Ezek a kompakt, nem indexált táblák nagy mennyiségű, ritkán hivatkozott történelmi, archivált vagy biztonsági ellenőrzési információk tárolására és lekérdezésére szolgálnak. -
Blackhole
: A Blackhole tárolómotor a Unix/dev/null
eszközéhez hasonlóan fogad, de nem tárol adatokat. A lekérdezések mindig üres halmazt adnak vissza. Ezek a táblák olyan replikációs konfigurációkban használhatók, ahol a DML utasításokat a replikációs kiszolgálóknak küldi a rendszer, de a forráskiszolgáló nem tárolja az adatok saját példányát. -
NDB
(más névenNDBCLUSTER
): Ez a fürtözött adatbázis-motor különösen alkalmas olyan alkalmazásokhoz, amelyek a lehető legmagasabb szintű üzemidőt és rendelkezésre állást igénylik. -
Merge
: Lehetővé teszi a MySQL DBA vagy fejlesztő számára, hogy azonosMyISAM
táblák sorozatát logikailag csoportosítsa és egyetlen objektumként hivatkozzon rájuk. Jól használható VLDB-környezetekben, például adattárházakban. -
Federated
: Különálló MySQL-kiszolgálók összekapcsolásának lehetőségét kínálja, hogy több fizikai kiszolgálóból egyetlen logikai adatbázist hozzon létre. Nagyon jó elosztott vagy data mart környezetekhez. -
Example
: Ez a motor példaként szolgál a MySQL forráskódjában, amely szemlélteti, hogyan kell elkezdeni új tárolómotorok írását. Elsősorban a fejlesztők számára érdekes. A tárolómotor egy “csonk”, amely nem csinál semmit. Ezzel a motorral lehet táblákat létrehozni, de nem lehet adatokat tárolni bennük vagy lekérdezni belőlük.
Nem korlátozódik arra, hogy ugyanazt a tárolómotort használja egy teljes kiszolgálóhoz vagy sémához. Bármelyik táblához megadhatja a tárolómotort. Egy alkalmazás például többnyire InnoDB
táblákat használhat, egy CSV
táblával az adatok táblázatkezelőbe történő exportálásához és néhány MEMORY
táblával az ideiglenes munkaterületekhez.
A tárolómotor kiválasztása
A MySQL-hez biztosított különböző tárolómotorokat különböző felhasználási esetekre tervezték. Az alábbi táblázat áttekintést nyújt néhány, a MySQL-hez mellékelt tárolómotorról, a táblázat után pedig tisztázó megjegyzések következnek.
16. táblázat.1 Tárolómotorok jellemzőinek összefoglalása
Tulajdonság | MyISAM | Memory | InnoDB | Archive | NDB | ||
---|---|---|---|---|---|---|---|
B-faindexek | Igen | Igen | Igen | Nem | Nem | ||
Backup/point-in-időbeli helyreállítás (1. megjegyzés) | Igen | Igen | Igen | Igen | Igen | ||
Klaszter adatbázis támogatás | Nem | Nem | Nem | Nem | Nem | Nem | Igen |
Klaszterezett indexek | Nem | Nem | Igen | Nem | Nem | Nem | |
Tömörített adatok | Igen (2. megjegyzés) | Nem | Igen | Igen | Igen | Nem | |
Adat gyorsítótárak | Nem | N/A | Igen | Nem | Igen | ||
Titkosított adatok | Igen (3. megjegyzés) | Igen (3. megjegyzés) | Igen (3. megjegyzés) | Igen (4. megjegyzés) | Igen (3. megjegyzés) | Igen (3. megjegyzés) | |
Videgen kulcs támogatása | Nem | Nem | Igen | Nem | Igen (5. megjegyzés) | ||
Teljes-szöveges keresési indexek | Igen | Nem | Igen (6. megjegyzés) | Nem | Nem | ||
Geospatial adattípus-támogatás | Igen | Nem | Igen | Igen | Igen | Igen | |
Geospatial indexelés támogatás | Igen | Nem | Igen (7. megjegyzés) | Nem | Nem | ||
Hash-indexek | Nem | Igen | Nem (8. megjegyzés) | Nem | Igen | ||
Index cache | Igen | N/A | Igen | Nem | Igen | ||
Locking granularity | Table | Table | Row | Row | Row | ||
MVCC | No | No | Yes | No | No | No | |
Replikációs támogatás (1. megjegyzés) | Igen | Korlátozottan (9. megjegyzés) | Igen | Igen | Igen | Igen | |
Tárolási korlátok | 256TB | RAM | 64TB | Nincs | 384EB | ||
T-faindexek | Nem | Nem | Nem | Nem | Nem | Igen | |
Tranzakciók | Nem | Nem | Igen | Nem | Nem | Igen | |
Az adatszótár statisztikáinak frissítése | Igen | Igen | Igen | Igen | Igen |
Jegyzetek:
1. Nem a tárolómotorban, hanem a kiszolgálóban van implementálva.
2. A tömörített MyISAM táblák csak a tömörített sorformátum használata esetén támogatottak. A tömörített sorformátumot használó MyISAM-táblák csak olvashatóak.
3. A kiszolgálóban a titkosítási függvényeken keresztül valósul meg.
4. A kiszolgálóban a titkosítási függvényeken keresztül valósul meg; A MySQL 5.7 és újabb verziókban az adatok nyugalmi állapotban történő titkosítása is támogatott.
5. Az idegen kulcsok támogatása elérhető a MySQL Cluster NDB 7.3 és újabb verziókban.
6. A FULLTEXT indexek támogatása elérhető a MySQL 5.6 és újabb verziókban.
7. A térbeli indexelés támogatása elérhető a MySQL 5.7 és újabb verziókban.
8. Az InnoDB belsőleg hash indexeket használ az Adaptive Hash Index funkcióhoz.
9. A MySQL 5.6 és újabb verziókban a FULLTEXT indexek támogatása elérhető. Lásd az e szakasz későbbi tárgyalását.