[ after @ 27.01.2012. 00:49 ] @
U skoro svakoj temi se provlaci da je pozeljno staviti tmpdir dir u RAM tj. napraviti za mysql tmpfs particiju i usmeriti tmpdir na tu particiju.

Tipa u my.cnf: tmpdir=/ccc/mysql_temp gde je /ccc/mysql_temp tmpfs particija koja se nalazi u memoriji a ne na disku.

To se cini kao veoma dobro resenje jer sve temp tabele idu u RAM umesto na HDD ako upiti imaju dosta group by/order by ili ako ima velikih blob/text polja ili jednostavno upiti su losi ili bilo sta drugo.

E sada tu mi se javljaju neke dileme koje ne mogu da pohvatam:

- Koliko max odvojiti RAM za tmpfs particiju tj. za tmpdir ako ima ukupno 4G ram-a, a koliko ako ima 10G. Pod uslovom da je server dedicated za mysql, 64 bit OS, da svi ostali kesevi/buferi mysql su podeseni da ne uzimaju vise od 2G RAM za OS sa 4G RAM odnosno 5G kod sistema ciji OS ima 10G,mysql je 5.5. Da li bi ta proporcija bila i za server sa 32G RAM-a?

- max_tmp_size/heap_size Vs. tmpfs. gde je u oba slucaja odvojen isti ram. Za prvi slucaj ako temp tabela premasi max tmp variablu kreirace se na disku, dok ako se premasi limit tmpfs particije za tmp tabele dolazi do gresaka, korupcije ili ne? Kombinacija i koriscenje i jednog i drugog mi se cini da nema smisla. Dok mi dobro resenje izgleda vise tmpdir direktorijuma 1, 2, 3. Gde je tmpdir1 vezan za tmpfs, tmpdir2 za jedan disk, tmpdir3 za drugi hdd. Pa kada se napuni tmpfs, onda se koristi tmpdir2 na HDD pa tmpdir3 i tako ukrug. Ako to uopste tako funkcionise. Pretpostavljam da kako i samo ime kaze temp tabele se cuvaju u memoriji samo dok su potrebne u toku neke interne operacije i da se nakon toga odmah brisu i oslobadja se prostor u memoriji.

-swapovanje i tmdir na tmpfs. Na par mesta sam video da je preporuka da se nikako ne gasi swappines na OS ukoliko se koristi tmpfs za tmpdir.

Moja neka generalna solucija bi bila tmpfs od 1G kod servera sa 4GB RAM odn 2GB kod servera sa 10GB (~25%), vise tmpdir od kojih je prvi u memoriji a ostali na HDD i
swappines sa default 60 (CentOS/RHEL) na nekih 10 ili 20 umesto gasenja.


Svaka druga razmisljanja ili neki izvori su dobrodosli :)

Pozdrav.
[ bogdan.kecman @ 27.01.2012. 13:16 ] @
velicina tmpfs-a nema nikakve veze sa kolicinom rama vec sa kolicinom i velicinom temp tabela koje pravis. Ako pravis previse temp tabela mozda i 99% rama da stavis u tmpfs nece biti dovoljno a ako ti nestane mesta u tmpfs-u za temp tabele upiti ce biti ubiveni i imaces ko zna kakve greske... ja sam gledao upite koji prave po 15+G temp tabele (bas pre neki dan jedan koji pravi 11G temp tabelu - jedan upit .. pritom cela baza je manja od 11G... ali sta ces, indijci..) tako da ako ti imas 16G rama na serveru .. treba 15G da das temp tabelama .. nema bas mnogo smisla ...

dakle, tu nema globalne racunice nego izvadis metriku sa svog servera i u odnosu na to radis dalje, ako naletis na "sort aborted" i slicne grese u logu znas da si se za* i da treba da prekonfigurises to posto ostajes bez prostora u tmpdir-u

> - max_tmp_size/heap_size Vs. tmpfs

ne postoji uopsteni odgovor! idealna konfiguracija bi bila "ako je temp tabela manja od XYZ onda je kreiraj u ramu, ako je veca onda je kreiraj na disku", ali tu sada na scenu stupa nesavrsenost mysql-a odnosno razni limiti pa takva konfiguracija ne moze da se napravi. Temp tabele se prave MEMORY engine-om koji ima cudo limita, ne moze blob, ne moze veci slog od x ne moze veci field od y etc etc ... i onda ti kazes "ako je tabela manja od 16M napravi u memoriji" a on tabelu od 5M napravi na disku zato sto sadrzi varchar (255) sa utf karakter setom... e sad ako ti je to jedini problem onda ti gurnes tmpdir na tmpfs i resis taj problem ali posto ti je ram vrlo ogranicen resurs onda to nece da radi ako imas upite koji prave gigabajtne temp tabele posto ce prskati upiti jerbo nece imat dovoljno ram-a...


> -swapovanje i tmdir na tmpfs. Na par mesta sam video da je preporuka da se nikako ne gasi swappines na OS ukoliko se koristi tmpfs za tmpdir.

vidi ovako, tmp dir za OS ili tmpdir za mysql? tmpdir za OS ima smisla na desktop sistemu i mozda na nekom php serveru ... ali za db server je to cista glupost. swappiness na desktop serveru treba da je 50 ili vise, posebno ako je tmpdir na tmpfs-u ali na db serveru, swappiness treba da je 0. ima sad fora, ako ti stavis na tmpfs tmpdir od db servera pa dignes swappiness na 10-50 da bi on vise swapovao a manje trosio ram kako bi imao vise mesta za tmpdir - to postoji kao filozofija ali se pokazala kao jako losa za performanse. Vise ces izgubiti na performansama sa swapiness 50 nego sto ces dobiti sa tmpdirom na tmpfs-u. Sve ovo vazi za dedicated db server, kada server nije dedicated sve ovo prestaje da vazi i sada imas potpuno drugu matematiku koja zavisi od 1000 novih faktora i tu uglavnom swappines ima smisla ali tu si u startu pogresio posto je vrlo pogresno terati "ne dedicated" db server (osim ako ti load i performanse ne predstavljaju problem, ali onda celo pitanje nema nikakvog smisla)

[ after @ 28.01.2012. 09:01 ] @
Hvala na odgovorima Bogdane.

Sto se tice velicine tmpfs, mislio sam vise na ogranicenja OS u pogledu velicine tmpfs, tipa da se ne remeti stabilnost OS iako se samo mysql vrti na serveru i sve drugo sto ne treba je ugaseno. U sustini vidim da je to i nepotrebno pitanje, jer ako mogu da stavim za innodb 70% RAM i da OS radi bez problema, onda mogu i za tmpfs da stavim 50% ili 70% RAM u nekom drugom slucaju :)


Bas zbog tih limita mysql koje si pomenuo (varchar(255), velicina sloga, blob,...) kod kojih temp tabele uvek idu na disk bez obzira na podesavanja, tmpfs mi se cini kao idealno resenje. Medjutim, mogucnost da temp tabela koja ide u tmpfs premasi njegovu velicinu i da upiti budu ubiveni i nastane ko-zna-kakva brljotina, je ono sto me odbija od tmpfs. Odlicno resenje bi bilo vise lokacija za tmodir od kojih je prva u ram-u, druga na hdd1 a treca na hdd2.

U my.cnf nesto kao

tmpdir = /tmpram:/tmphdd1:/tmphdd2

# /tmpram na tmpfs
# /tmphdd1 na HDD1
# /tmphdd2 na HDD2; verovatno nepotrebno

E sada ako to jos radi onako kako ja zamisljam da mysql treba da radi :D. Da temp tabele idu uvek prvo u memoriju, pa ako nema mesta upit se ne zaglavljuje vec temp tabela ide na HDD1...Tako da mysql ne moze nikad da se zaglavi zbog velikih temp tabela i nedostatka prostora na tmpfs. Mada u tom slucaju treca lokacija za tmpdir na HDD2 ne bi bila ni potrebna, sto moze da znaci da ovak tip organizacije tmpdir (sa vise lokacija na razlicitim diskovima) sluzi za raspodelu opterecenja a ne da spreci krah ako se ispuni prva, u ovom slucaju - memorijska.


> -swapovanje i tmdir na tmpfs. Na par mesta sam video da je preporuka da se nikako ne gasi swappines na OS ukoliko se koristi tmpfs za tmpdir
.................


Jasno mi je za to swappiness. Medjutim na nekom blogu koji obradjuje swappines i mysql na isti nacin i govori o prednostima iskljucivanja istog, navedeni su razlozi kada ne treba iskljuciti swappines (kada je server za sve i svasta: apps + baza, desktop,...) i kada se mysql tmpdir stavlja u ram. Nacicu link pa cu da pustim ovde.

Doduse za ovaj moj konkretan slucaj a i ostale druge, to je i irelevantno jer su masine virtualne. U HW/IT sektoru virtulizacija je totalno in :(. Sto i ima smisla u milion slucajeva: administracija, instalacija, snapshotovi, menadzment diskova, memorije kod virt masina,...Tako da kada se predoce argumenti zasto je bolja fizicka od virt za neki konkretan slucaj - baze, i pobiju razlozi u vezi brzine, stabilnosti i jos neki nebulozni tipa: nece imati ko da pritisne dugme i ukljuci server ako nocu nestane struja :D. Na kraju se dodje do toga: pa mi i nemamo fizicke masine, ima par u podrumu ali one su 5 puta slabija konfiguracija i ko zna kako rade....


Pozdrav.
[ bogdan.kecman @ 28.01.2012. 17:52 ] @
za VM necu da komentarisem uospte
za tmpdir - na zalost to tako ne radi
za swapines, jedini razlog da ne ugasis je da hoces da masina swapuje da bi ram koristio za nesto drugo - ako se na masini vrti samo mysql, ram koji koristi mysql nikad nije bolje da se swapuje tako da ko god da je to savetovao nema pojma
[ after @ 29.01.2012. 20:04 ] @
To za swappines i tmpfs je bio jedan od komentara:


...On our big central DB server, we only have swap enabled because of tmpfs usage for tmpdir...

Sto se moze svesti na ono sto si vec napisao:

Citat:
bogdan.kecman: ...ima sad fora, ako ti stavis na tmpfs tmpdir od db servera pa dignes swappiness na 10-50 da bi on vise swapovao a manje trosio ram kako bi imao vise mesta za tmpdir - to postoji kao filozofija ali se pokazala kao jako losa za performanse...


Tako da citajuci tudja iskustva za i protiv, definitivno mi je logicno da swappines bude 0 na dedicated mysql serveru.

Link pomenutog pomenutog komentara i teksta o swappu i mysql:

http://www.mysqlperformanceblo...comment-page-1/#comment-271162

Pozdrav.


[ bogdan.kecman @ 29.01.2012. 21:23 ] @
nemam pojma ko je taj lik klint ali ne bi trosio vreme na njegov komentar