sziasztok!
Segítséget szeretnék kérni tőletek abban, hogyan tudnám még gyorsítani a mysql adatbázist.
Szerver: dell poweredge sc1430 (cpu: 1db intel xeon e5310 quad core, 6GB ram, 2*250 hdd)
os: ubuntu linux 8.04 LTS
Innodb és myisam táblák is vannak. De főként innodb.
jelenlegi my.cnf:
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
character-set-server = latin2
collation-server = latin2_hungarian_ci
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-locking
key_buffer = 256M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
table_cache = 512
query_cache_limit = 8M
query_cache_size = 256M
log_slow_queries = /var/log/mysql/mysql-slow.log
expire_logs_days = 10
max_binlog_size = 100M
skip-bdb
innodb_buffer_pool_size = 1G
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
- 2384 megtekintés
Hozzászólások
Nem varázsszerszám de futtasd le és nézd meg mit ad ki.
http://mysqltuner.pl/mysqltuner.pl
weboldal: http://blog.mysqltuner.com/
Ennyi infóval legalábbis jobbat nem lehet mondani.
Azon felül, hogy google meg rtfm és a hasonló okosságok :D
- A hozzászóláshoz be kell jelentkezni
Ezekre nézz rá:
- mysqltuner
- tuning-primer
Érdemes a javaslataikon elgondolkodni, de minden változtatás után minimum pár órát várj (terheléstől függően), akár egy napot is, mielőtt újra tesztelteted.
Másrészt leírhatnád, hogy milyen tüneteid vannak jelenleg és mit szeretnél javítani rajta, valamint pár szóban a program környezetet is.
- A hozzászóláshoz be kell jelentkezni
+1 a tuning-primerre meg mysqltunerre, ahhoz még hozzá kell olvasni a mysql doksit, és király lesz.
+nekem ez is tetszett :)
http://suckit.blog.hu/2009/10/12/linux_mysql_milyen_fajlrendszeren
- A hozzászóláshoz be kell jelentkezni
mysql: 5.0.51a
php: PHP Version 5.2.4-2ubuntu5.10
Van egy webáruház (de emellett még több kisebb-nagyobb weboldal is fut a szerveren, és ez a levelező szerver is). A webáruházban van egy termék kereső query, ami viszonylag sok ideig fut, ezen szeretnék gyorsítani, olyan 2-3 másodperc javulás már elfogadható lenne. Most 1-1 lap betöltése meg van max. 2 másodperc alatt,de ha termék keresővel keres valaki, akkor 10-12 másodperc, és ahogy bővül a kínálat úgy nő ez az idő is.
- A hozzászóláshoz be kell jelentkezni
másik oldalról is optimalizálhatsz: FTS, saját keresőtáblák, etcetc
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
innodb_buffer_pool_size ennek adj mondjuk 3G méretet elsőre (elférjen benne a InnoDB rész), bár tesztprogramok adnak rá javaslatot
key_buffer méretét a tesztprogramok adatai alapján állítsd be akkorára, hogy elférjen benne
Indexelj minden olyan mezőt, ami alapján szűrsz, bár olyan esetben ellenjavallt, ha van olyan közte, ami gyakran változik (azt hagyd ki).
(Használj valamilyen phpcache mechanizmust és ha beilleszthető a kódba, sokat számíthat egy memcached szerver is, de ez úgy általában segít, nem a mysql oldalon.)
- A hozzászóláshoz be kell jelentkezni
Ez inkább sql tervezési, mint adminisztratív hibának tűnik..
- A hozzászóláshoz be kell jelentkezni
+1. Talán azt a queryt is érdemes lenne megvizsgálni.
- A hozzászóláshoz be kell jelentkezni
mysqltuner-t lefutattam. eredménye:
-------- Performance Metrics -------------------------------------------------
(ebből csak a ! jeleseket másolom be)
[!!] Allocating > 2GB RAM on 32-bit systems can cause system instability
[!!] Maximum possible memory usage: 2.8G (46% of installed RAM)
[!!] Joins performed without indexes: 4408
-------- Recommendations -----------------------------------------------------
General recommendations:
Run OPTIMIZE TABLE to defragment tables for better performance
MySQL started within last 24 hours - recommendations may be inaccurate
Adjust your join queries to always utilize indexes
Variables to adjust:
join_buffer_size (> 128.0K, or always use indexes with joins)
- A hozzászóláshoz be kell jelentkezni
Az elején nem tudsz változtatni, 32bit-es rendszeren nem szereti a nagy memóriafoglalást.
mysqloptimize -A -p -uroot
Egy kevésbé terhelt időszakban. Esetleg konkretizálhatod az adatbázist is, vagy a táblákat, ha gondolod. Ez mindent optimalizál.
join_buffer_size-t vedd nagyobbra! Úgy emlékszem, hogy kapcsolatonként értelmeződik, így túl is futhatsz a memóriafoglalással, ha minden összejön sok kapcsolat esetén és adott érték fölött, ill. ahogy írja: join esetében használj indexelt mezőket.
- A hozzászóláshoz be kell jelentkezni
Mekkora az adatbazis? 6 gb ram melle ha ez csak mysql szerver, akkor tobb is lehetne az innodb buffer pool merete. A lekerdezeseken tudsz optimalizalni? Mekkora az adatbazis innodb-s, illetve myisam-es resze? En ugy mennek neki, hogy a megnovelt buffer poolba belefer-e mar az adatbazis. Ha igen, a feladatot valoszinu megoldottad. Utana pedig megneznem, hogy melyik queryk tartanak a legtovabb, es mit lehet veluk kezdeni. Mi a tunet egyebkent?
Latom a query cache-ed nem 0. Gyakorlatban sokat nem szokott segiteni, es par misztikus belassulas okozoja.
- A hozzászóláshoz be kell jelentkezni
A lekérdezésen már nem nagyon lehet tovább optimalizálni.
Az adatbázis jelenlegi mérete: inno 1.7Gb, myisam kb 100Mb
A tünetet közben már leírtam.
- A hozzászóláshoz be kell jelentkezni
Olyan a kereso queryd, hogy s elect x from y where z like '%valami%'?
- A hozzászóláshoz be kell jelentkezni
Hát igen valami ilyesmi :) plusz 4 left join is akad benne
- A hozzászóláshoz be kell jelentkezni
Akkor lehetne azon meg mit optimalizalni:).
A ha a like elejen van a %, ez a query bamit csinalhatsz, mindig full table scan lesz, a join meg ront a helyzeten. A megoldasok:
- ha myisamed van, akkor hasznalod a myisam fulltext indexeit
- sphinxet hasznalsz (ezzel jarsz a legjobban)
- ha innodb ez a tabla, akkor idonkent csinalsz belole myisamet, amire csinalsz fulltext indexeket, de ettol jobb a sphinx
- A hozzászóláshoz be kell jelentkezni
+1
like '%valami%'
itt a hiba, ezt mindenképp ki kell váltani.
- A hozzászóláshoz be kell jelentkezni
és szerinted mivel?
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
fulltext-et csak myisam tábláknál lehet használni.
- A hozzászóláshoz be kell jelentkezni
asszem szűrőn lehetek nálad, de leírom mégegyszer:
* fulltext, majd ha ez nem megy, akkor:
* saját fulltext kereső
A 2. nyilván sok munkával jár megcsinálni és karbantartani is, viszont max 1 heti melóból egy saját igényekre szabott keresőt tudsz csinálni.
Illetve van olyan nekifutas is, hogy létrehoznak egy myisam táblát/innodb tábla, az innodb táblán insert/update trigger a kereshető mezőket+PK beszúrja/frissíti a myisam táblába(n) is, majd FTS a myisam táblán, ami PK alapján hivatkozik az innodb-alapú táblára. így myisam-on tudsz match()-ni, majd egy joinnal megszerezni az adat. De mintha már ezt írta volna itt valaki.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
tuti, hogy szuron vagyok, gratulalok a szakmai megkozeliteshez
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
akkor fulltext search vagy sajat keresotabla, mint fentebb is irtam.
dolgozni kell vele.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
>>A lekérdezésen már nem nagyon lehet tovább optimalizálni.
>>[!!] Joins performed without indexes: 4408
Szerintem ezeket a join -okat nezd at meg 1x, ott biztosan sokat tudsz javitani, az indexel.
>>Tell your parents not to ruin the world that you will live in.<<
- A hozzászóláshoz be kell jelentkezni
HA sok tmp tábla készül diszkre, és a /tmp nem tmpfs, akkor néha elég sokat tud dobni rajta egy:
tmpdir = /dev/shm
szerk: ezt akkor is érdemes meglépni, ha magas az IO wait a rendszerben.
- A hozzászóláshoz be kell jelentkezni
nincs tmp tábla használva.
- A hozzászóláshoz be kell jelentkezni
Erre nem esküdnék meg. Azt a MySQL magától is csinálja, főleg ha indexeletlen adatokkal join-olsz és ilyesmik.
Nézz rá, hogy a lassú lekérdezések közben a /tmp-ben szemetel-e a mysql!
- A hozzászóláshoz be kell jelentkezni
a lassú lekérdezés közben 2,8Mb-al nőtt a /tmp mérete.
- A hozzászóláshoz be kell jelentkezni
Közben az iowait mennyi? Mondjuk nem túl nagy méret, nem tűnik veszélyesnek.
Bár inkább az InnoDB cache méreteket növeld és a már ezerszer írt indexelés.
- A hozzászóláshoz be kell jelentkezni
Az indexelés az már meg volt eddig is.
- A hozzászóláshoz be kell jelentkezni
nézd meg tuning primerrel. A végén van, hogy hány temp táblából mennyi ment diszkre.
A 2.8MB méretnövekedés önmagában semmit nem jelent.
- A hozzászóláshoz be kell jelentkezni
Ha van benne text oszlop - esetleg jajajj blob is - akkor fog, úgyis.
- A hozzászóláshoz be kell jelentkezni
Text mező van és keresni is kell benne. Blob is van az egyik táblába, de az abszolút nincs használva a lekérdezésben.
- A hozzászóláshoz be kell jelentkezni
Mármint diskre írni..
- A hozzászóláshoz be kell jelentkezni
innodb-nél időnként szinte csodát tesz egy export -> törlés -> import.
- A hozzászóláshoz be kell jelentkezni
Es aki nem engedhet meg maganak leallast? Illetve ugye majd 2 giga adatrol beszeunk, plussz indexek, ennel az buffer pool warm upja is sok ido..
- A hozzászóláshoz be kell jelentkezni
kb 2 ora volt berantani a 20G dumpot.
- A hozzászóláshoz be kell jelentkezni
Azért ezek az idők erősen függnek procitól, meg a táblák számától és a benne lévő adatok típusától...
--
Discover It - Have a lot of fun!
- A hozzászóláshoz be kell jelentkezni
Es ha betoltottad, egybol jo? Mikorra telik meg annyira a buffer pool, hogy ne rohadjon le a gep cpuban? A perconasoknak van valami warmup patche, ami hasznos ilyen esetben, de ez akkor is szivas. Nem ez a jarhato ut, _imho_.
- A hozzászóláshoz be kell jelentkezni
subscribe
--
Discover It - Have a lot of fun!
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
subscribe
____________________
Ha igen akkor miért nem...
Linux 2.6.30-gentoo-r4 i686 Intel(R) Core(TM)2 Duo CPU E6550 @ 2.33GHz GenuineIntel GNU/Linux
- A hozzászóláshoz be kell jelentkezni
subscribe
- A hozzászóláshoz be kell jelentkezni
+1 :)
- A hozzászóláshoz be kell jelentkezni
Szia,
Én úgy gondolom, hogy a HDD karcsú alatta, célszerű lenne beletenni még néhány (pl. 6) HDD-t és RAID 0+1-be tenni.
Nézd át a slow query log-ot, biztos találsz benne érdekességet.
InnoDB-t lehet raw partícióra tenni, ezzel az FS overhead-et csökkented.
Továbbá mindenféle cache-t próbál meg ésszerűen növelni, nyilván függően a többi szerver terhelésétől.
- A hozzászóláshoz be kell jelentkezni