A Drupal gyorsítása: MyISAM -> InnoDB

ninja képe

Kisebb gyorsításokat hajtok végre a napokban a bringás siteokat kiszolgáló szerveren. A criticalmass.hu 22-én megint csúcsra lesz járatva, az alleycat.hu pedig szinte folyamatosan: először Goldenblog-győzelem, tegnap IGA, és a CM környékén is hagyományosan küldik az Alley-t is a népek.

Első körben MyISAM-ról átállunk ezek alatt az adatbázisok alatt InnoDB storage engine-re, amitől gyorsabb lesz minden írásművelet, hurrá. Ezt persze rég meg kellett volna már tenni, de idő hiányában sose történt meg.
Az átállás maga nem egy nagy etwas:

  1. Belövöd az InnoDB-t a szerveren: egyrészt ki kell kommentezni a skip-innodb opciót a /etc/mysql/my.cnf [mysql] szekciójában, másrészt beletolni pár opcionális sort. (Lásd MySQL doksi.)
  2. Kidumpolod a MyISAM táblákat:
    mysqldump --default-character-set=utf8 -u[user] -p[pass] [db] > [db].sql
  3. Létrehozol egy új adatbázist: ez lesz majd az InnoDB-vel küldött adatbázis. (A régit egy ideig tartogatjuk a történelemkönyvek kedvéért.)
  4. MyISAM helyett InnoDB használatát állítod be, azaz kicseréled az ENGINE=MyISAM stringeket ENGINE=InnoDB stringekre:
    sed 's/ENGINE\=MyISAM/ENGINE\=INNODB/' [db].sql >[db]-inno.sql
  5. Visszatolod az InnoDB sql-t az új (üres) adatbázisodba:
    mysql -u[user] -p[pass] [db]-inno <[db]inno.sql

Egész jó kis migrációs howto-t találsz itt, kicsit több magyarázattal, mint az enyém. (Már így is túlragoztam, nemde?)

Ami következik:

  • alleycat.hu átállítása ugyanígy;
  • InnoDB backupmegoldás.

És ha az megvan, akkor jön a Lighty, vagy egy lecsupaszított Apache beállítása a terhelt oldalak kiszolgálására.

Forrás: http://lipilee.hu/2007/09/04/cm-gyorsitosav-myisam-innodb-upgrade-a-criticalmasshu-alatt/

Fórum: 
Illyés Edit képe

Jó kis téma. Mikor áttértem InnoDB-re, az első pofon, amibe belefutottam az volt, hogy az InnoDB soha nem adja vissza az egyszer elfoglalt lemezterületet. Ez főleg akkor idegesítő, ha az ember gyakran dobál el táblákat, ill. egész adatbázisokat.

Megoldás: innodb_file_per_table, optimize table. Lehet, hogy ez adatbázis guruknak triviális, de újszülöttnek minden vicc új, úgyhogy leírtam a később jövők okulására :)

0
0
ninja képe

lipilee képe

köszi a linket, nem ismertem a file-per-table-t. (vagy igen, de nem emlékeztem rá :))
kérdés: ha most van egy nagy tablespace-em, és szeretném bekapcsolni a file-per-table-t, hogy tudom könnyen megtenni? export-import, vagy van valami könnyű megoldás is? esetleg a MySQL megcsinálja helyettem a táblák file-ba szórását a közös tablespace-ből?
--
speak no evil - lipilee.hu

0
0

--
speak no evil - lipilee.hu

Syntax Error képe

én csak export-import megoldásról tudok. táblánként ki, átállít, minden drop, aztán táblánként be.
mysql manualból:
"innodb_file_per_table affects only table creation, not access to existing tables. If you start the server with this option, new tables are created using .ibd files, but you can still access tables that exist in the shared tablespace. If you remove the option and restart the server, new tables are created in the shared tablespace, but you can still access any tables that were created using multiple tablespaces."
http://dev.mysql.com/doc/refman/5.0/en/multiple-tablespaces.html

0
0
Basesoft képe

InnoDb esetén nem lesz lassab az olvasási művelet ?

0
0
aries képe

Nem, mert nagy mennyiségű írás esetén a MyISAM egy teljes táblát zárol, az InnoDB csak egy sort.

Aries
http://aries.mindworks.hu

0
0
ninja képe

for the record: sikerült összehozni a Lihgty-t a Drupállal.
a teljesítménynövekedés elképesztő, csak ajánlani tudom az átállást!

bővebben itt: http://lipilee.hu/..

ninja - http://alleycat.hu

0
0
Basesoft képe

Köszi a tippet ninja.
Én is átálltam lighttpd-re.Lényegesen kisebb a terhelés.

0
0
Basesoft képe

Sajnos nekem nem sikerütl az adatbázist visszatolni innodb-be.
A következő üzenetet kapom :The used table type doesn't support FULLTEXT indexes
A comment táblánal akad ki.Mysql verzióm : MySQL - 5.0.21
Tudna valaki segiteni ?

0
0
ninja képe

Basesoft képe

Ezek szerint nincs más megoldás csak ha a comments tábla marad myisam?

0
0
Gábor Mayer képe

Milyen ellenérv lehet az innodb használatával szemben?

0
0
aries képe

Néhány feature-t nem tud, pl. fulltext search, de ezek a Drupal szempontjából kevésbé relevánsak.

0
0
Gábor Mayer képe

Drupál szempontjából egyáltalán nem, mert nem használja. Csak akkor felmerül a kérdés miért nem ez a default?

0
0
pp képe

A hetesben ez is benne van. (azért van és nem lesz, mert már van. Érted? Fejben tartják.)

http://drupal.org/node/301362

pp

0
0
aries képe

Mert a MySQL-ben sem ez a default, külön opcióval kell megadni, hogy benne legyen ez a táblaforma is. Egyébként akinek ez a siralma, annak elegendő tudásának illene lennie ahhoz, hogy egy pársoros scripttel átkonvertálja a táblákat.

0
0
gergely képe

par sor? en ugy tudtam ennyi eleg hozza:
ALTER TABLE tablaneve ENGINE = InnoDB;

0
0

---
Tévedni mindenkinek szabad, csak a mérnöknek észre kell vennie.

aries képe

Hány tábla is van és hány mező? :)

0
0
Illyés Edit képe

A hozzáértők szerint ha egy táblán az írási, vagy olvasási műveletek aránya meghaladja a 90%-ot, akkor a MyISAM többnyire gyorsabb. Tehát ha van egy táblád, amit ritkán frissítesz, de állandóan olvasol, lehet, hogy jobban jársz MyISAM-mal.

Csakúgy, mint a fordított esetben, amikor állandóan írsz, de ritkán olvasol, ilyen sok helyen a keresőindex – nagyobb webhelyen a search* táblákat többnyire MyISAM-mal érdemes működtetni.

0
0
aries képe

Akkor a locale*-ot is.

0
0