Autor Subiect: Exemplu de my.cnf optim  (Citit de 4618 ori)

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Exemplu de my.cnf optim
« : Aprilie 26, 2010, 05:52:57 am »
V-as ruga, daca se poate, sa imi dati un exemplu de my.cnf optim, pentru un server:
Dualcore XEON 3110 3 GHZ
4 GB RAM
250 GB HDD SCSI

Cer sfatul pentru ca in fiecare zi, in jurul orei 22:00 (plus minus 30 minute) creste loadul pana in jurul valorii de 40-45 si asa sta cam o ora, iar in restul zilei nu trece de 2, maxim 2.50. Am verificat crontab, nu e nimic acolo. Am urmarit si I/O si am urmat sugestiile colegilor pe un alt topic similar, dar nu s-a aplicat la mine. Asa ca ma gandesc ca o fi de la mysql, desi a fost configurat si optimizat de o firma de management.

Actualul fisier arata asa:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-innodb
query_cache_limit=1M
query_cache_size=8M
query_cache_type=1
max_user_connections=25
max_connections=500
interactive_timeout=10
wait_timeout=10
connect_timeout=10
thread_cache_size=128
key_buffer=16M
join_buffer=1M
max_allowed_packet=16M
table_cache=1024
record_buffer=1M
sort_buffer_size=2M
read_buffer_size=2M
max_connect_errors=10
thread_concurrency=8
myisam_sort_buffer_size=64M
server-id=1

#[mysql.server]
#user=mysql
#basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysql.pid
open_files_limit=8192

#[mysqldump]
#quick
#max_allowed_packet=16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer=64M
sort_buffer=64M
read_buffer=16M
write_buffer=16M

Va multumesc.

Marian

  • Membru
  • ***
  • Mesaje postate: 401
  • Karma: +5/-8
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #1 : Aprilie 26, 2010, 06:34:54 am »
 Nu pare a fi de la mysql, dupa cum arata conf-ul. Poti folosi mytop sau MySQL Administrator (remote) pentru a verifica / monitoriza MySQL-ul. In perioada cand are load, incearca sa dai comanda top si sa observi ce anume consuma mult.

 key_buffer = 16M este extrem de putin, ca si celalalte valori.

Folosirea unui script de tip mysqltunner nu este recomandata. Cea mai buna metoda este monitorizarea MySQL-ului si modificarea valorilor in functie de aplicatii web / necesitati dar si de resurse.

 Daca serverul este folosit atat pentru MySQL cat si pentru web server (apache) poti sa te orientezi dupa valorile de mai jos:

Pentru [mysqld]

key_buffer
 - 64M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: key_buffer=128M )

join_buffer_size
 - 1M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: join_buffer_size=2M )

sort_buffer_size
 - 1M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: sort_buffer_size=2M )

read_buffer_size
 - 1M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: read_buffer_size=2M )

read_rnd_buffer_size
 - 768K pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: read_rnd_buffer_size=1536K )

--------------------------------------------------------------------

Pentru [isamchk]

key_buffer
 - 64M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: key_buffer=128M )

sort_buffer
 - 64M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: sort_buffer=128M )

read_buffer
 - 16M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: read_buffer=32M )

write_buffer
 - 16M pentru fiecare 1GB memorie ( Exemplu pentru 2GB RAM: write_buffer=32M )

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #2 : Aprilie 26, 2010, 06:46:04 am »
Multumesc mult pentru raspuns.

Cum ramane cu query_cache si query_cache_size ? Nu ar trebui si ele marite? In momentul de fata serverul nu foloseste mai mult de 1-1.5 Gb RAM din 4.

Procesul care foloseste mult CPU este mysqld.




L.E. : Nu am gasit read_rnd_buffer_size. Il adaug tot la [mysqld] ?
« Ultima Modificare: Aprilie 26, 2010, 06:54:08 am de AlexCl »

Marian

  • Membru
  • ***
  • Mesaje postate: 401
  • Karma: +5/-8
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #3 : Aprilie 26, 2010, 07:12:44 am »
 Eu tin conf-ul de mai jos pe un dual proc / 4 GB ram ; Serverul este folosit la comun ( mysql / apache ) pentru 2 site-uri cu 35-40k vizite unice / zi. Site-urile folosesc intens MySQL iar load average sta intre 2 si 5.
OS-ul este FreeBSD iar MySQL este compilat din surse.

[client]
port                    = 3306
socket                  = /tmp/mysql.sock
default-character-set = utf8
compress

[mysqld]
port                    = 3306
socket                  = /tmp/mysql.sock
skip-locking
skip-external-locking
skip-name-resolve
back_log = 100
default-character-set = utf8
character-set-server = utf8
key_buffer_size     = 512M
max_allowed_packet  = 2M
tmp_table_size      = 512M
max_heap_table_size = 512M
join_buffer_size = 3M
sort_buffer_size = 3M
read_buffer_size = 3M
concurrent_insert    = 2
low_priority_updates = 1
read_rnd_buffer_size = 6M
net_buffer_length = 8K
myisam_sort_buffer_size = 64M
query_cache_size = 64M
query_cache_type = 1
query_cache_limit = 64K
thread_stack = 192K
table_definition_cache = 8000
table_open_cache = 1024
thread_cache_size = 4
open_files_limit = 64000
thread_concurrency = 8
table_cache = 47000
max_connections = 2000
max_user_connections = 100
max_connect_errors = 999999
tmpdir = /tmp/mysql
myisam-recover = BACKUP,FORCE
log-bin=mysql-bin
binlog_format=mixed
expire-logs-days=2

long_query_time=2
log-slow-queries=/var/log/mysql-slow.log

[mysqldump]
quick
max_allowed_packet = 32M
default-character-set = utf8

[mysqlimport]
default-character-set = utf8

[mysql]
no-auto-rehash
default-character-set = utf8

[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[isamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 2M
write_buffer = 2M

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #4 : Aprilie 26, 2010, 07:22:07 am »
Ok am pus si eu valori similare. Dar am observat ca la read_buffer si write_buffer tu ai setat 2 MB in timp ce la mine este pus 16 MB. Poate aparea vreo problema din cauza bufferului mai mare? Teoretic cu cat este bufferul mai mare cu atat e mai bine, sau gresesc?

Multumesc inca o data pentru raspunsul prompt si relevant.

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #5 : Aprilie 26, 2010, 07:39:41 am »
Cam asa arata my.cnf acum. Mai trebuie modificat/adaugat ceva?

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
skip-locking
skip-innodb
query_cache_limit=2M
query_cache_size=64M
query_cache_type=1
max_user_connections=25
max_connections=500
interactive_timeout=10
wait_timeout=10
connect_timeout=10
thread_cache_size=128
key_buffer=256M
join_buffer=4M
max_allowed_packet=16M
table_cache=1024
record_buffer=1M
sort_buffer_size=4M
read_buffer_size=4M
max_connect_errors=10
thread_concurrency=8
myisam_sort_buffer_size=64M
read_rnd_buffer_size=6M
server-id=1

#[mysql.server]
#user=mysql
#basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/lib/mysql/mysql.pid
open_files_limit=8192

#[mysqldump]
#quick
#max_allowed_packet=16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer=256M
sort_buffer=256M
read_buffer=64M
write_buffer=64M

[myisamchk]
key_buffer=512M
sort_buffer=512M
read_buffer=16M
write_buffer=16M

[mysqlhotcopy]
interactive-timeout


Marian

  • Membru
  • ***
  • Mesaje postate: 401
  • Karma: +5/-8
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #6 : Aprilie 26, 2010, 07:44:52 am »
 Cu placere

Memoria e cam asa la MySQL:
key_buffer + sort_buffer_size + read_buffer_size * max_connections

Depinde foarte mult si de aplicatiile care folosesc MySQL-ul ( tip de interogari, daca sunt cu distinct, daca se foloseste InnoDB )

Am observat ca nu folosesti InnoDB deci cred ca sunt suficiente valorile acelea setate la 2M

Se poate vedea in arhiva de la MySQL 5.1.43 fisierul de configuratie
'support-files/my-huge.cnf'

edge mysql-5.1.43 # more support-files/my-huge.cnf
# Example MySQL config file for very large systems.
#
# This is for a large system with memory of 1G-2G where the system runs mainly
# MySQL.
#

.........................

key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
.........................


"The read_rnd_buffer_size is used after a sort, when reading rows in sorted order. If you use many queries with ORDER BY, upping this can improve performance. Remember that, unlike key_buffer_size and table_cache, this buffer is allocated for each thread. This variable was renamed from record_rnd_buffer in MySQL 4.0.3. It defaults to the same size as the read_buffer_size. A rule-of-thumb is to allocate 1KB for each 1MB of memory on the server, for example 1MB on a machine with 1GB memory"

Sper sa-ti fie de folos
« Ultima Modificare: Aprilie 26, 2010, 07:51:13 am de Marian »

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #7 : Aprilie 26, 2010, 07:58:32 am »
Mi-au fost toate de folos, multumesc. Am setat, am restartat, acum astept sa vad diseara ce diferenta se va simti. O sa revin cu rezultatul.

netvista

  • Webmaster
  • ****
  • Mesaje postate: 839
  • Karma: +6/-1
  • Solution Provider
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #8 : Aprilie 27, 2010, 12:08:41 am »
@AlexCl: Fiecare server este individual reglat pentru sarcinile sale. Nu cred ca daca ai copiat un config dat ca exemplu, acesta este valabil si pentru configuratia ta. Valorile se regleaza in functie de nevoie si resursele serverului, apoi se testeaza in timp si se adjusteaza pana cand se obtine rezultatul dorit.

Nu ti-o zic cu rautate dar habar nu ai cu se se mananca, iar asta este periculos. Optimizarea este de 2 feluri:
1. Optimizare pentru limitarea consumului
2. Limitare pentru performanta.

Intrebare de baraj: Tu de fapt ce doresti sa obtii.. limitare sau performanta ?

Poti folosii si clasicul tunning-primer sau mysql tuner pentru a determina daca ai setat corect. Trebuie insa sa-l lasi (serverul de mysql) sa ruleze ~48 de ore ca sa obtii valori reale.

Link-uri:
1. http://github.com/rackerhacker/MySQLTuner-perl#readme
2. http://www.day32.com/MySQL/
3. http://mysqltuner.pl/

Bafta !


.marius

  • Vizitator
  • *
  • Mesaje postate: 6
  • Karma: +0/-1
    • Vezi Profilul
    • .marius rANTing away
Răspuns: Exemplu de my.cnf optim
« Răspuns #9 : Aprilie 27, 2010, 08:10:48 am »
@netvista: Noi astia "invatati" cu totii am facut-o de pe forumuri, ML'uri si mai ales prin trial and error. Te rog sa ma corectezi daca gresesc.

Iti mai aduci aminte de cate ori te-ai trezit ca iti arunca unul sau altul un RTFM scurt, si te-ai apucat de citit cu coada intre picioare?! Si eu am patit-o, dar ultimul tau post a fost exact asta. Omul a zis ca aplica ce a inteles din thread, asteapta sa vada ce si cum, si revine cu rezultate.

Biciuirea si sodomizarea in public nu mai e la moda. Ajuta-l daca poti, daca nu lasa-l in pace poate il ajute altii.

netvista

  • Webmaster
  • ****
  • Mesaje postate: 839
  • Karma: +6/-1
  • Solution Provider
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #10 : Aprilie 27, 2010, 10:14:49 pm »
@.marius: ai mare dreptate.. cu totii am trecut prin faza asta. Din acest motiv i-am dat si script-urile alea cu care prin metoda "trial and error" va reusii candva sa ajunga la rezultatul dorit.

Nu am avut intentia de a-l face sa se simta "aiurea" sau de a-l biciuii public, ci mai mult in sensul de critica constructiva.

Marian

  • Membru
  • ***
  • Mesaje postate: 401
  • Karma: +5/-8
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #11 : Aprilie 27, 2010, 10:48:44 pm »
Optimizarea este de 2 feluri:
1. Optimizare pentru limitarea consumului
2. Limitare pentru performanta.

Intrebare de baraj: Tu de fapt ce doresti sa obtii.. limitare sau performanta ?


Cred ca este cam acelasi lucru in unele cazuri:

Daca ai performanta mica datorita optimizarii pentru consum mic, va face load mai mare serverul pentru ca se produce aglomerare. De exemplu: Ai 2 site-uri cu cate 50 de page views pe secunda, query-urile dureaza mult, se aglomereaza, paginile vor fi incarcate mult mai greu, procesele php / httpd vor sta mult mai mult timp persistente iar consumul de resurse va creste simtitor.

Apropo de MySQL Tuner, am gasit un articol foarte frumos facut din care citez:

"There are quite a few “tuning primers” and “my.cnf generators” and “sample my.cnf files” online. The ultimate tool for generating an optimal my.cnf is not a tool. It’s a human with many years of experience, deep knowledge of MySQL and the full application stack, and familiarity with your application and your data."

Articolul poate fi vazut la
http://www.mysqlperformanceblog.com/2008/08/18/the-ultimate-tool-for-generating-optimal-mycnf-files-for-mysql/

AlexCl

  • Oaspete
  • **
  • Mesaje postate: 57
  • Karma: +0/-0
    • Vezi Profilul
Răspuns: Exemplu de my.cnf optim
« Răspuns #12 : Aprilie 28, 2010, 02:42:40 am »
@Netvista: eu am cerut un exemplu dupa care sa ma ghidez. Nu sunt expert in domeniu, tocmai de aceea platesc o firma de management sa se ocupe de servere. Insa la unul din ele am observat o scadere de performanta si pana gasesc ei solutia m-am gandit sa apelez si la userii de aici, care majoritatea pot fi considerati experti, ca sa aflu si alte pareri si sa invat.
Nu am vazut raspunsul sau ca pe "o biciuiala", in ciuda unui limbaj putin acid, dar poate o fi fost din cauza vremii sau alte motive.Oricum iti multumesc pentru linkuri, mi-ai oferit niste materile bune pentru documentare.

@Marian: Multumesc mult inca o data pentru setari, au avut un efect foarte bun, load-ul a scazut considerabil.