Optimalizácia MySQL

Bzron

Optimalizácia MySQL
« kdy: 30. 11. 2017, 11:17:07 »
Ahojte,

zas a znova u Vas skusenejsich hladam radu,

Zdedil som jeden server webserver so zle nastavenym mysql, po optimalizacii co som vedel, mysqltuner ukazuje uz dobre vysledky ale v reale je este jeden problem.

Server si bezi svoje ma tak 3GB volnej ramky ale sem tam sa uplne zacne minat ramka az na povedzne 500 - 1000 mb, spusti sa tento script:

Kód: [Vybrat]
<?php
ini_set
('memory_limit''16G');

ob_start();
for (
$i 0$i 30$i++)  {
        echo 
str_repeat('a'100 1024 1024);
}
ob_end_clean();
// echo "Memory is now clean.\n\n";
?>


A znova sa uvolni ramka a vsetko fici ako ma, ale jemi jasne ze toto neni normalne chovanie. Mohli by ste ma naviest co to moze robit ? popripade co je to za featuru ?

Ked uz mam otvorene vlakno, musim sa spytat.

Kolko server potrebuje mat volnej pamati ram aby bol save, napr ked mam 16 GB server je tam apache, mysql, mam to nakonfigurovane tak ze je tam volnej ram od 2 - 4 GB je to ok ? alebo mozem napr pridat viacej mysql aby napriklad viacej vyuzivalo ram a bude to len 1 - 2 GB volnej. neni nato niaka rovnica ? mas 16 GB minimalne 10percent musi byt stale volnych.

Dakujem




« Poslední změna: 30. 11. 2017, 19:08:19 od Petr Krčmář »


RS

Re:Optimalizacia mysql
« Odpověď #1 kdy: 30. 11. 2017, 11:37:03 »
tohle je hodne blbe polozeny dotaz v nadpisu je MySQL a ukazujes PHP kod kde se mysql vubec nepouziva
1) ano dany skript si buferuje vystup takze sezere par giga pameti ktere ulozi do RAM => je to NORMALNI chovani kam jinam by to mel ukladat kdyz ma RAM k dispozici, spis se ptej proc mate tak hloupe napsane skripty...
2) Otazka na volnou RAM je zradna na jednu stranu znaci ze mas rezevy pro spicky na druhou stranu znaci ze nevyuzivas server efektivne napriklad proc by DB mela sedet na disku kdyz se vejde do RAM? tzn na tohle nejde odpovedet bez hlubsi znalosti
Tzn nejprve si ujasni co vlastne chces ladit kde mas presne problem na takovouhle otazku ti nikdo soudny neporadi.


Re:Optimalizacia mysql
« Odpověď #2 kdy: 30. 11. 2017, 11:42:01 »
To je strašně málo informací, co poskytujete. Odpověď se bude lišit podle toho, jestli to běží na apache, nginx, jako modul pod mpm_prefork, nebo přes PHP-FPM, ..., jak jsou nadefinovány pooly na webserveru i na PHP (v případě FPM). Každé nastavení pak ukrajuje z RAM podle své potřeby, nebo se musí vše nastavit staticky. Statické nastavení je víc rozežrané, ale zase je vhodnější, pokud už kombinujete databázový server na stejném stroji, jako webový server.

Z dotazu také není jasné, jestli ta RAM třeba jen opticky "neutíká" do cached, nebo jestli se nejedná o VPS s nevhodně zapnutým swapováním atd., atd., atd.


Kit

Re:Optimalizacia mysql
« Odpověď #3 kdy: 30. 11. 2017, 13:56:34 »
MySQL si během práce odkládá spousty výsledků do cache v RAM. Uvedený skript udělá jen to, že se pokusí dostupnou RAM maximálně zabrat. Tím se ta cache vyčistí.

Ten skript je IMHO zcela zbytečný. Operační systém to zvládne i bez něj a mnohem lépe.

Neviditelný

Re:Optimalizacia mysql
« Odpověď #4 kdy: 30. 11. 2017, 14:10:58 »
MySQL si během práce odkládá spousty výsledků do cache v RAM. Uvedený skript udělá jen to, že se pokusí dostupnou RAM maximálně zabrat. Tím se ta cache vyčistí.

Ten skript je IMHO zcela zbytečný. Operační systém to zvládne i bez něj a mnohem lépe.
Ten skript IMHO není jen zbytečný ale i kontraproduktivní, protože donutí OS odswapovat i to, co by jinak zůstalo v RAM. Dokud paměť nezačně reálně docházet, asi bych to vůbec neřešil.


Re:Optimalizacia mysql
« Odpověď #5 kdy: 30. 11. 2017, 14:18:24 »
Ten skript IMHO není jen zbytečný ale i kontraproduktivní, protože donutí OS odswapovat i to, co by jinak zůstalo v RAM. Dokud paměť nezačně reálně docházet, asi bych to vůbec neřešil.

On pan tazatel by měl nejdřív pochopit, jak to s tou pamětí, cache a swapem funguje, jak se o ni pere PHP vs. MySQL, případně i web server, a pak to teprve řešit. Nástroje typu MySQL tuner jsou fajn, pokud víte, co Vám říkají. Ale to zase většinou nepotřebujete ty nástroje :).

1. řešíme vůbec problém, je databáze opravdu nevýkonná?
2. pokud ano, je to tím, že má nastaveno málo paměti, nebo naopak moc? (= pak swapuje, čte z disku, ...)
3. pokud má nastaveno paměti moc => ubrat, zbytek nechat pro webserver / php,
4. pokud má nastaveno paměti málo => nastavit webserver a php na statický pool, nastavit na php memory limit a spočítat si jistotu zabrání RAM, teprve zbytek dát do MySQL

V praxi se často setkávám s tím, že aplikace jsou psané tak, že se doufá, že se to nějak do paměti poskládá. Na hlavním a jediném apachi / nginxu je nastavený dynamický počet serverů s obrovským rozpětím, na php-fpm pak dynamický počet instancí a v samotném PHP 128 MB RAM i víc, a 300 sekund běhu i víc. S takovým nastavením se pak nedá prakticky nic dělat, vždycky v jednom místě něco zlepšíte, v druhém místě zhoršíte.

Řešením pak je dát zadavateli na výběr, jestli to dožene brutální silou (přidání prostředků RAM, CPU), nebo jestli aplikaci zlepší, oddělí pooly, oddělí databázi, ...

Re:Optimalizácia MySQL
« Odpověď #6 kdy: 30. 11. 2017, 20:13:55 »
tady je zasadni nepochopeni od tazatele. to, ze je na serveru volna pamet neznamena, ze to je dobre. to, ze je neco v cache neznamena, ze to mame nasilim vyhazovat. to, ze cache v RAM neni vlastne ani prazdne misto, ale ani tak jako uplne obsazene.
Děkuji za možnost editace příspěvku.

Re:Optimalizácia MySQL
« Odpověď #7 kdy: 30. 11. 2017, 20:43:34 »
A znova sa uvolni ramka a vsetko fici ako ma, ale jemi jasne ze toto neni normalne chovanie. Mohli by ste ma naviest co to moze robit ? popripade co je to za featuru ?
Ten skript je nějaká samodoma snaha o optimalizaci, jediné rozumné, co se s ním dá udělat, je zahodit ho někam hodně daleko. (Ten skript dělá to, že se snaží zaplnit RAM, tudíž donutí operační systém vytlačit z RAM věci, které tam být nemusí – např. nacachovaná data souborů. S velkou pravděpodobností ale vytlačí z RAM i data, která je užitečné tam mít. Skript nakonec paměť uvolní, takže systému zbyde spousta volné paměti, do které může zase začít nahrávat data.)

Kolko server potrebuje mat volnej pamati ram aby bol save, napr ked mam 16 GB server je tam apache, mysql, mam to nakonfigurovane tak ze je tam volnej ram od 2 - 4 GB je to ok ? alebo mozem napr pridat viacej mysql aby napriklad viacej vyuzivalo ram a bude to len 1 - 2 GB volnej. neni nato niaka rovnica ? mas 16 GB minimalne 10percent musi byt stale volnych.
Žádný takový vzorec neexistuje. Server nepotřebuje volnou paměť, potřebuje paměť na to, co dělá. Pokud má server trvale 2 GB RAM volné, jsou tam ty 2 GB zbytečné. Bez znalosti té aplikace se ale nedá říct, k čemu by se volná RAM dala využít – může být efektivní dát jí k dispozici databázi, může být efektivní umožnit v ní cacheovat soubory…

santa77

Re:Optimalizácia MySQL
« Odpověď #8 kdy: 30. 11. 2017, 21:07:49 »
cely ten scriprt je paranoja grc. ma alokovat 30*100MB ram a prepisat to na znak ‘a’

predpokladam ze autor tak chcel urobit wipe uz dealokovanej ramky.

Bzron

Re:Optimalizácia MySQL
« Odpověď #9 kdy: 30. 11. 2017, 22:36:38 »
Velmi pekne dakujem za odpovede dali ste mi vela oblasti, ktore si musim nastudovat.

Specifikujem blizsie dotaz, a "vylepsim" svoju otazku budem rad za Vase nazory popriade rady kde mam zacat.

Config Apache: kompilovany v mpm_prefork_module
Kód: [Vybrat]
Timeouts: connection: 150    keep-alive: 5
MPM Name: Prefork
MPM Information: Max Daemons: 250 Threaded: no Forked: yes

    StartServers          10
    MinSpareServers       10
    MaxSpareServers       20
    MaxClients           250
    MaxRequestsPerChild 1000


mysql setup:
Kód: [Vybrat]
connection time = 60
inter
read_buffer_size = 8M
sort_buffer_size = 4M
table_Cache = 512
thread_cache_Size = 256
thread_concurrency = 16
key_buffer_size = 64M
max_heap_table_Size = 128M
myisam_sort_buffer_size = 64M
query_cache_Size = 64M
query_cache_limit = 16M
table_open_cache = 8000
table_deffinition_cache = 8000
tmp_table_size = 32M
read_rnd_buffer_size = 16M

[myisamchk]
key_buffer_size = 1024M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M

Na servery sa chystam spravit replikaciu aby sa tam nerobili dumpy ani nic, kde samotny bzip2 dokaze brutalne vytazit.

-Otazka napr mam tento process

13195   0   90  0.1 5 113m   0:02 /usr/local/apache2/bin/httpd -k start , ktory mi vytazuje obcas 90% CPU, ako ho viem priradit automaticky aplikacii/stranke, ktora by to mohla robit ? nevedeli by ste mi poradit ?

- Radite mi aby som ten script teda zrusil ? Bojim sa ye server to nerozchodi, pri pripadnom probleme.




Re:Optimalizácia MySQL
« Odpověď #10 kdy: 30. 11. 2017, 23:06:31 »
sver to lidem kteri tomu rozumi. jsi amater. napachas akorat vic skod.
Děkuji za možnost editace příspěvku.

Kit

Re:Optimalizácia MySQL
« Odpověď #11 kdy: 30. 11. 2017, 23:09:05 »
Server si bezi svoje ma tak 3GB volnej ramky ale sem tam sa uplne zacne minat ramka az na povedzne 500 - 1000 mb, spusti sa tento script:

To je prosté: Začne se ztrácet RAM, _protože_ nějaký časovač spouští tento skript.

Jenda

Re:Optimalizácia MySQL
« Odpověď #12 kdy: 30. 11. 2017, 23:54:51 »
Server si bezi svoje ma tak 3GB volnej ramky ale sem tam sa uplne zacne minat ramka az na povedzne 500 - 1000 mb
Nemůžu si pomoct, ale přijde mi, že ten skript je produktem někoho, kdo nepochopil, jak v linuxu funguje paměť použitá aplikacemi a paměť použitá jako cache disku. Pro bližší posouzení je potřeba skript vyhodit a občas se kouknout do "free" a zaměřit se na skutečný význam 2. sloupce.

Re:Optimalizácia MySQL
« Odpověď #13 kdy: 01. 12. 2017, 04:39:15 »
sver to lidem kteri tomu rozumi. jsi amater. napachas akorat vic skod.

Připojuji se.

Omlouvám se, nerad se připojuji k takovému názoru, ale opravdu si myslím, že byste se neměl do správy systému vůbec pouštět, když nevíte, jak funguje paměť. Navíc máte vše nastavené tím nejprimitivnějším způsobem, vhodným pro nejmenší instalace. My to tu za Vás nevymyslíme, jak už někdo psal, bez znalosti konkrétní aplikace to ani nejde. Toto nastavení je tak možná pro vývojáře, na jeho hraní si.

Bzron

Re:Optimalizácia MySQL
« Odpověď #14 kdy: 01. 12. 2017, 08:34:21 »
Dakujem za nazory, viem kam sa mam pozriet a co dostudovat.