MySQL sežere 90 % paměti

thcom

  • ***
  • 148
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
MySQL sežere 90 % paměti
« kdy: 17. 03. 2016, 20:39:29 »
Ahoj, mam ve firme server na nem ununtu tusim 12.04 LTS a na nem percona server 5.6
na win stanici bezi delphi aplikace ktera pracuje s daty na tomto serveru
par dni pet si zacal pesonal stezovat, ze aplikace je prilis pomala
dnes jsem mrknul na server a zjistil, ze je sptrebovano sporo 735 GB ram z 8 GB
pomoci htop jsem nasel nekolik modrych mysqld procesu
zatim patram guglim, ale nenapada vas nekoho, cim by to mohlo byt ?

zde vystup z htop
http://postimg.org/image/pt0puajpx/

diky moc za pripadne rady

Tomas Holy
« Poslední změna: 17. 03. 2016, 23:44:14 od Petr Krčmář »


Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #1 kdy: 17. 03. 2016, 21:19:22 »
Ahoj, mam ve firme server na nem ununtu tusim 12.04 LTS a na nem percona server 5.6
na win stanici bezi delphi aplikace ktera pracuje s daty na tomto serveru
par dni pet si zacal pesonal stezovat, ze aplikace je prilis pomala
dnes jsem mrknul na server a zjistil, ze je sptrebovano sporo 735 GB ram z 8 GB
pomoci htop jsem nasel nekolik modrych mysqld procesu
zatim patram guglim, ale nenapada vas nekoho, cim by to mohlo byt ?

Co neukončené transakce, nevisí tam něco?

Kód: [Vybrat]
SHOW FULL PROCESSLIST;
SELECT * FROM `information_schema`.`innodb_trx` ORDER BY `trx_started`;

thcom

  • ***
  • 148
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #2 kdy: 17. 03. 2016, 21:24:28 »
procesy podle me OK

Id   User   Host   db   Command   Time   State   Info   Rows_sent   Rows_examined
525   kasa   10.0.0.10:64396   pokladna   Sleep   0       NULL   0   57
643   root   localhost   pokladna   Query   0   init   SHOW FULL PROCESSLIST   0   0
644   root   localhost   pokladna   Sleep   0       NULL   0   0


transakce vubec nepouzivam, jenom select insert update a obcas delete :)

nobody(ten pravej)

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #3 kdy: 17. 03. 2016, 21:40:48 »
obecne k htop, pokud zobrazuje ti vlakna(threads) tak si muzes myslet ze toho bezi vic, klavesova zkratka shift+h prepina zapnuti/vypnuti vlaken, pri vypnuti pak vidis seznam opradu jen procesu, overis to tak ze prvni radek pravo "Tasks: 123, 234 thr" nebude zobrazovat ten pocet "XXX thr"

tech 90% jestli opravdu zere mysql zjistis kdyz si to seradis podle MEM%, protoze podle obrazky je videt ze to urcite neni ani celkem, ten barevnej prouzek u pameti znamena ze pouze zelana=obsazeno, ostatni (pripraveno kdykoliv upustit) cervena=buffer a zluta=cache...

btw: http://www.linuxatemyram.com/

nobody(ten pravej)

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #4 kdy: 17. 03. 2016, 21:43:03 »
edit: buffer je modra (cervena u ram neni)


Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #5 kdy: 17. 03. 2016, 21:51:36 »
A to je jako spatne, ze si DB vezme pamet, aby byla rychlejsi? IMHO je to dane prave tim, ze tam mas Perconu(urceno pro maximalni vykon). Naproti tomu MySQL je v defaultu sice "usporne"(urceno snad pro stroje s 32MB RAM nebo co tam vymysleli), ale to je mi na dve veci kdyz je kvuli tomu pomale. MariaDB je nekde mezi.

Jinak tu spotrebu pameti ovlivnis tim jak si nastavis promenne. Zalezi jestli pouzivas InnoDB nebo MyISAM storage apod.
Děkuji za možnost editace příspěvku.

thcom

  • ***
  • 148
    • ICQ komunikátor - 968601
    • Zobrazit profil
    • E-mail
Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #6 kdy: 17. 03. 2016, 22:18:54 »
ja to prve napsal s preklepem, omlouvam se zralo to pred hoddinou 7 GB z 8 GB ted je tam 2.5 GB z tech 8 GB
dle top
dale me trochu zarazi, ze mysqld proces vetsinu casu jede na 50 66 i 93 % +-
fakt tam bezi jednoduche dotazy, je to restaurace, takze otevri stul, ucet, pridej 2 piva 1 gulas, obcas select na tisk uctu
je tam CPU i5 takze mi ten load prijde moc vysoky
perconu mam kvuli replikaci, kamarad mi ji doporucil ze pry v cistem mysql funguje hure

jinak eistuje neco jako profiler pro MySQL, vim ze neco je poro delphi a toi funguje krasne, vzdy mi to ukaze slabe misto v programu, ktere lze popr optimalizovat

ale pro mysql si to nejak nedovedu predtavit ...


diky tH

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #7 kdy: 17. 03. 2016, 22:20:01 »
Zobrazování spotřeby paměti aplikace je opravdu tvrdý oříšek a ten kdo nerozumí jak to funguje z toho může udělat šílené závěry.

1) Vlákna sdílí jeden adresový prostor. Některé zobrazovače ale evidují paměť pro každé vlákno i když vlastně všichni sdílej jednu paměť
2) Virtuální paměť v linuxu je pouze rezervovaný adresový prostor, kde nic nemusí být. Paměť se zabere až při prvním zápisu do vyhrazené paměťi. Ve Windows je to stejné, akorát aplikace explicitně deklaruje dopředu, že hodlá zapsat do rezervované stránky (udělá její commit)
3) Často se paměť sdílí i mezi procesy. Zvlášť naforkované děti, namapované knihovny, které jsou v paměti jen 1x, ale jsou namapované do každého procesu a protože každý proces vidí jen sám sebe, vypadá to, že ta knihovna je tam rozkopírovaná xkrát.
4) Tzv. working set (linux RES) je paměť přidělená aktuálnímu procesu, která může být větší, než její skutečná potřeba. Jsou v tom i různé cache operačního systému, diskové cache, paměť obrazovky atd. Například ve Windows je working set větší,pokud aplikace používá okna, GUI, atd. Při minimalizaci okna se working set zpravidla zmenší. Pokud část paměti leží ve swapu, představuje working set objem paměti fyzicky zabrané RAM včetně mapovaných  souborů a knihoven + paměť operačního systému nutnou k jeho řízení + výše zmíněné cache, gui objekty, okna atd (třeba i buffery rour)
5) Asi nejblíže skutečné potřebě aplikace je "potvrzená" / committed memory, což jsou stránky, které leží buď v paměti, nebo ve swapu. Na linuxu jsem to číslo nikde nenašel

Posoudit, která aplikace zabírá kolik místa je dost problematické. Asi nejlepší je se na to dívat globálně. Mám zabráno X, volno Y, cache Z. Cílem je samozřejmě volnou paměť věnovat cache. Takto zabranou paměť je možné kdykoliv uvolnit pro potřeby aplikací

andy

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #8 kdy: 17. 03. 2016, 22:29:06 »
Ano mozes si zapnut query log a slow query log. Okrem toho ma mysql kadejake statisticke premenne. http://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html
Napr ti moze chybat index na nejakej tabulke.

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #9 kdy: 17. 03. 2016, 22:43:10 »
A kde je presne problem? Bude lepsi kdyz ten HW bude lezet ladem nevyuzity? Melo by pak smysl ho kupovat? Chapes, ze jakykoliv select ktery to vrati primo z cache umistene v RAM bude o nekolik radu rychlejsi nez vyhledavani na disku?
Nebude tech 60% vzato treba z CPU ktere je v tu chvili v IDLE (tj nejakych odhadem 800MHz)?
Percona je dobra volba, jen je potreba pocitat s tim, ze je optimalizovana na vykon a ne na setreni prostredku.

EDIT: pokud nejsi autor programu tak se v tom nevrtej nebo to pokazis. Pokud jsi autor programu tak bys snad mel vedet kde mas nebo nemas jake klice, kde mas nebo nemas jake JOINy, jake pouzivas engine apod...
Děkuji za možnost editace příspěvku.

Tomáš Holý

Re:MySQL sežere 90 % paměti
« Odpověď #10 kdy: 18. 03. 2016, 00:03:36 »
diky za ten slow query log, mrknu na to

resim to proto, ze pred 3 dny aplikace bezela krasne  ted se seka, sazim se prijit na to, cim to je, kdyz se nic nezmenilo, alespon doufam

zatim dekuji vsem za rady

Re:MySQL sežere 90 % paměti
« Odpověď #11 kdy: 18. 03. 2016, 08:11:32 »
Aplikace bezi na stejnem stroji jako je DB?
Mas vsechny tabulky InnoDB?
V cem je napsana aplikace?
Seka se opravdu sql nebo jen aplikace jako takova?
V cem je aplikace napsana a na jakem bezi OS?
Děkuji za možnost editace příspěvku.

andy

Re:MySQL sežere 90 % paměti
« Odpověď #12 kdy: 18. 03. 2016, 08:48:36 »
skus pozriet aj dmesg a ine logy ci nemas nejaky sietovy problem

j

Re:mysql startuje nekolik procesu a zere 90% pameti :(
« Odpověď #13 kdy: 18. 03. 2016, 09:07:35 »
...
perconu mam kvuli replikaci,...
A presne v tom bude podle me pes zakopanej ... vypni tu replikaci.

Tomáš Holý

Re:MySQL sežere 90 % paměti
« Odpověď #14 kdy: 19. 03. 2016, 07:19:58 »
pratele dekuji za rady a nasmerovani,

zkoumanim sysklogu jsem zjistil, ze nejaky nullmailer se opravdu hodnekrat za sekundu snazi neco nekam odeslat

tak jsem mu dal ze serveru vypoved  od te doby vse slape jako drive

diky moc