Tablespace InnoDB
InnoDB tárolja az adatokat egy táblázatban a helyet, ami egyfajta virtuális fájlrendszer, amely egy vagy több fájl a lemezen. Tablespace InnoDB használják különböző célokra, nem csak tárolására táblák és indexek. Vannak törölt magazin (régi változat a sorok), inszerciókat puffer, kettős (az alábbiakban ismertetjük), és más belső szerveket.
Konfigurálása tablespace fájlok kerülnek az asztalra tér szerepel a konfigurációs paraméter innodb_data_file_path. Mindegyikük lesz a könyvtárban, hogy megadott innodb_data_home_dir paramétert. Például:
innoCb_Cata_home_Cir = / var / lib / mysql / innoCb_Cata_file_path = ibCata1: 1G; ibdata2: 1G; ibdata3: 1G
Az eredmény egy olyan táblázatot tér mérete 3 Gbyte, amely három fájlt. Néha az emberek azt kérdezik, hogy vajon lehetséges, hogy több fájlt elosztani a terhelést több meghajtón, mint például:
A fájlok ténylegesen kerülnek a különböző könyvtárak, amelyek ebben az esetben különböző meghajtók, de InnoDB összefűzi a fájlokat egymás után. Ezért ebben az esetben nem a valós kifizetési kapsz. InnoDB első írja az első fájlt, majd, ha tele van, - a második, és így tovább, ami a terhelés nem oszlik el, valamint szeretnénk, hogy nagy teljesítményű ... Erre a célra használ RAID-vezérlő.
A táblaterülethez nőhet, ha a hely elfogy, akkor ezt az utolsó fájl automatikusan meghosszabbodik:
Alapértelmezésben létrehoz egy automatikusan bővíthető 10 MB fájlméretet. Ha úgy dönt, hogy a fájl automatikusan kitágul, akkor van értelme, hogy korlátozza a méret a táblázat helyet a tetején, mert miután elért egy bizonyos méretet, akkor a fájl nem zárt (nem zsugorodik). Például, a következő példában, a méret automatikusan bővíteni fájl korlátozódik 2 GB:
innodb_file_per_table opció lehetővé teszi, hogy konfigurálja a InnoDB egy fájl egy asztal (verzió óta MySQL 4.1). Az adatok az adatbázisban tárolt könyvtár fájl nevek, mint tablename.ibd. Ez könnyebbé teszi a szobában, amikor töröl egy asztal mellett, ez a mód hasznos kiosztási táblák különböző lemezeken. Azonban abban az esetben tárolja az adatokat több fájl több helyet kárba vész, mert akkor kicseréli a belső töredezettség egy táblázatban hely a kihasználatlan tér a IBD-fájlokat. Ez a probléma inkább az, hogy a kis asztal, mert az oldal mérete InnoDB van 16KB. Még ha az asztalon van tárolva, csak 1 KB adat a lemezen még elfoglalja 16 byte.
Azt is meg kell jegyezni, hogy InnoDB fájlok nem feltétlenül tárolja a hagyományos fájlrendszer. Mint sok más adatbázis, InnoDB lehetővé teszi, hogy ezeket a nyers (raw) partíciót. Azonban a modern fájlrendszerek képesek hatékonyan dolgozni egy meglehetősen nagy objektumok, így ez a mód nem sok haszna van. A nyers eszközök adhat a teljesítmény növelése néhány százalékkal, de nem hisszük, hogy ez a szerény nyereség igazolja a kapcsolódó kényelmetlenség a képtelenség, hogy manipulálják az adatokat tárolni. Ha ezek a nyers eszközt, majd a mv parancsot, a cp és mások is elfelejtett. Úgy gondoljuk, hogy az eszköz eltávolítása a pillanatkép, mint például azok által kínált Logical Volume Manager (LVM) a GNU / Linux rendszer - óriási kényelmét. Persze, lehet, hogy a nyers eszköz a logikai kötet, de az értelme az ötlet - ez a meghajtó már nem formázott. Általában, mivel az apró nyereség, amely biztosítja a nyers eszközöket, nem érdemes merészkednek felhajtás.
Régebbi verziói a sorok és az étkezési hely a feltételek az intenzív felvételi InnoDB tábla tér igen nagy lehet. Ha a tranzakció nyitva marad sokáig (nem is csinál semmit hasznos), és ezzel egyidejűleg meghatározott elkülönítési szintje ismételhető olvasni, akkor InnoDB nem tudja eltávolítani a régi változat a sorban, mivel kell tekinteni nem kötött ügyletek. InnoDB üzletek régi változat a táblázatban helyet, így továbbra is növekszik, mivel az adatok frissítését. Előfordul, hogy a probléma nem a nyitott ügyletek, hanem egyszerűen a természet a munkamennyiség: takarítás részt csak egy szál, akkor egyszerűen nincs ideje, hogy távolítsa el a régi változat a sorban.
Mindenesetre, a parancs SHOW InnoDB állapota segítség azonosítani a probléma okát. Vessen egy pillantást az első és a második sorban a tranzakciókban részén, azt mutatja az aktuális tranzakció számát és azt a pontot, amely elérte a tisztítást. Ha a különbség nagy, az azt jelenti, hogy a felhalmozott sok tisztítatlan tranzakciókat. Például:
Trx ID számláló 0 80157601
Leürítő tenni TRX féle N: o <0 80154573 undo n:o <0 0
Tranzakció azonosító - egy 64 bites szám, amely két 32 bites, így a különbség számítás fog szenvedni kicsit. Ebben az esetben, minden egyszerű, mivel jelentős bitek értéke 0, így már 80157601 - 80154573 = 3028 potenciálisan tisztítatlan ügyletek (innotop segédprogram érted minden számítás). Azt mondják, hogy „potenciálisan”, mert nagy a különbség, nem jelenti azt, hogy van egy csomó tisztítatlan vonalak. Régebbi verziói húrok csak tranzakciók módosítani az adatokat, és a többszörös tranzakciók létezhet, amelyben az adott nye nem változott (és fordítva - egy ügylet lehet változtatni egy csomó sort).
Ha sok tranzakciók és a tisztítatlan az oka, hogy az asztal helyet továbbra is növekszik, akkor kénytelen lassítani MySQL, InnoDB tisztítható az áramlási ideje megbirkózni a terhelést. Ez nem hangzik túl vonzó, de nincs más alternatíva. Egyébként InnoDB továbbra is írni az adatokat, és töltse ki a lemezt, amíg nem ér véget az ügy, vagy nem érhető el adni a felső határa a mérete az asztalon helyet.
Ahhoz, hogy „lelassul” bejegyzést, meg a változó innodb_max_purge_ lag nem 0 Ez megegyezik a legnagyobb tranzakciók száma arra vár, hogy tiszta legyen; elérése után ezt a küszöböt InnoDB kezdődik, hogy késleltesse a végrehajtás az adatok frissítési kéréseket. Válassza ki a megfelelő értéket, meg kell tudni, hogy az adott munkát. Például, ha egy tipikus ügylet megváltoztatja átlagosan 1 Kbyte adat és akkor hajlandó beletörődik 100 MB „tisztítatlan” táblázat sorai a helyet, akkor az értéket a 100.000.
Tartsuk szem előtt, hogy a jelenléte, tisztítatlan sorban verziószámozást érinti az összes lekérdezések, mert miatt megnövekedett mérete táblák és indexek. Ha a tisztító áramlás nem tud megbirkózni a terhelést, a teljesítmény is jelentősen csökken. Paraméter innodb_max_ purge_lag is csökkenti a sebességet a lekérdezés, de ez a kisebbik rossz.