[AlternC-dev] Optimisation de MySQL [ WAS gros ralentissement ]

Retour à l'archive de la liste
Le site d'AlternC
Google Custom Search

Denis denis at collectifs.net
Mar 16 Nov 18:37:59 CET 2004


Salut,

Donc, j'ai fait tout, comme si bien expliqué dans ton mail, les
changements ...

En termes de vitesse d'accès c'était relativement conséquent.

Seul hic, Postfix perdait toute connection avec mysql dans les quelques
secondes.

Ci-dessous quelques infos sur ce qui a posé problème et les infos sur la
config actuelle:

A+
Denis
PS: J'ai lu la doc mysql mais je la trouve relativement peu parlante au
sujet de l'optimisation, si vous avez des liens plus explicatifs, je
suis preneur.

# Key_buffer

J'avais un rapport Key_reads/Key_read_requests de 0,5

En fait, c'est ici que réside le plus gros problème...

On a 512MB de ram et dès qu'on passe la taille de key_buffer à plus de
64MB, postfix n'a plus de connections avec mysql.

# Autres variables

set-variable    = table_cache=128 -> OK

set-variable    = record_buffer=2M
-> Si je mets à 1M, çà fait planter postfix->Mysql

set-variable    = max_connections=150
-> Comme la valeure par défaut était à 100, je l'ai juste passer à 150

long_query_time = 30
-> Comme la valeur par défaut est à 10, je n'ai pas touché.

set-variable    = query_cache_size=10485760
-> Variable non reconnue ?

set-variable    = wait_timeout=20
set-variable    = interactive_timeout=60

-> Font planter postfix->Mysql

skik-bdb et skik-innodb -> idem


# Passage à Mysql 4.0.22

OK, seul petit désagrémént l'ensemble des bases sont visibles dans
phpmyadmin....


///-> Config Actuelle

///-> /etc/php4/apache/php.ini

[MySQL]
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = 5
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =

///-> /etc/mysql/my.cnf

[client]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[safe_mysqld]
err-log         = /var/log/mysql.err

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
#log            = /home/log/mysql.log
basedir         = /usr
datadir         = /var/alternc/db
tmpdir          = /tmp
language        = /usr/share/mysql/french

skip-locking
safe-show-database
#  skip-networking
#skip-innodb
#skip-bdb

set-variable    = key_buffer=64M
set-variable    = max_allowed_packet=4M
set-variable    = thread_stack=512K
set-variable    = table_cache=128
#set-variable    = query_cache_size=10485760
set-variable    = record_buffer=2M
set-variable    = max_connections=150
#set-variable    = wait_timeout=20
#set-variable    = interactive_timeout=60

[mysqldump]
quick
set-variable    = max_allowed_packet=1M

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition


mysql> show status like 'Key%';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| Key_blocks_used    | 62345    |
| Key_read_requests  | 11253580 |
| Key_reads          | 265664   |
| Key_write_requests | 382365   |
| Key_writes         | 68662    |
+--------------------+----------+

--> Rapport Key_reads/Key_read_requests -> 0,0236

mysql> status;
--------------

Threads: 66  Questions: 1278522  Slow queries: 2  Opens: 42837  Flush
tables: 1  Open tables: 128  Queries per second avg: 7.943
--------------



Le jeu 11/11/2004 à 11:17, Jerome Moinet a écrit :
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> | Essaye de régler le nombre de connexion mysql dans php
> | (/etc/php4/apache/php.ini)
> | et les paramètres de mysql (/etc/mysql/my.cnf) pour que les connexions
> | inutilisées soient dropées automatiquement.
> |
> | On a eu ce problème il y a longtemps sur Lautre Net, que l'on a résolu
> | ainsi.
> |
> hello,
> 
> Lit la doc MySQL concernant l'optimisation :
> http://dev.mysql.com/doc/mysql/en/MySQL_Optimization.html et
> principalement la section 7.5 concernant l'optimisation du serveur :
> http://dev.mysql.com/doc/mysql/en/Optimizing_the_Server.html
> 
> Il y a un ou deux autres paramètres sur lesquels tu _doit_ jouer :
> 
> * key_buffer : il doit être entre 25 et 50 % du total de ta mémoire
> physique. Le key_buffer correspond à ce que mysql va charger en mémoire
> comme clés. Autrement dit, à chaque fois qu'il exécute un select avec
> clé, si la clé est en mémoire, il ne fera pas d'accès disque, et donc ça
> sera plus rapide et la machine chargeras moins.
> 
> La règle est : Key_reads / Key_read_request < 0.01
> 
> Donc tu ajuste ton key_buffer jusqu'à ce que cette règle soit ok.
> 
> Pour cela :
> 
> mysql> show status like 'Key%';
> +--------------------+-----------+
> | Variable_name      | Value     |
> +--------------------+-----------+
> | Key_blocks_used    | 610645    |
> | Key_read_requests  | 117513865 |
> | Key_reads          | 479580    |
> | Key_write_requests | 4322422   |
> | Key_writes         | 776691    |
> +--------------------+-----------+
> 5 rows in set (0.00 sec)
> 
> et tu fait la division :
> 479580 / 117513865 = 0.0040810503509522
> 
> Ca c'est les chiffres pour le serveur mysql de l'autre net, où la taille
> du key_buffer est égale à 768Mo sur un total de 2Go.
> 
> Si ton résultat est > 0.01, tu augmente la valeur dans
> /etc/mysql/my.cnf, tu relance mysql, tu attend quelques minutes que des
> valeurs significatives soient enregistrées, et tu refait le calcul.
> 
> 
> * Tu supprime les logs mysql, ça bouffe un max d'i/o. Pour cela,
> supprimer (ou commenter) les variables log* dans my.cnf.
> 
> 
> * tu augmente le table_cache.
> 
> Pour cela :
> 
> mysql> status;
> - --------------
> ...
> < bla bla bla >
> ...
> 
> Uptime:                 2 days 9 hours 34 min 45 sec
> 
> Threads: 5  Questions: 14035029  Slow queries: 2  Opens: 165920  Flush
> tables: 1  Open tables: 4096  Queries per second avg: 67.709
> - --------------
> 
> Il s'agit du rapport entre "Open tables" et "Opens".
> 
> Il ne faut pas pas que "Opens" augmente trop rapidement après que la
> valeur de "Open tables" ai été atteinte. Donc à surveiller lors du
> démarrage du serveur.
> 
> Ce paramètre est à corréller avec le nombre max de fichier ouvrables sur
> le système.
> 
> Pour connaitre cette valeur :
> 
> [root at fey fs]# cat /proc/sys/fs/file-max
> 32768
> 
> pour l'augmenter, le package procps doit être installé, ajouter cette
> ligne dans /etc/sysctl.conf :
> 
> fs/file-max = 32768
> 
> puis :
> 
> /etc/init.d/procps.sh reload
> 
> Sur le serveur de l'autre net, 4096 pour mysql semble être un peu petit,
> mais la machine n'est pas chargée pour autant, donc on laisse cette
> valeur, car une valeur trop élevée pourrait ralentir le système. Avec un
> "Queries per second avg: 67.709" on a un load de "load average: 0.54,
> 0.58, 0.46", ce qui est acceptable.
> 
> La commande suivante te donne le nombre de fichier ouverts par mysql sur
> le système :
> lsof | grep mysqld | awk {'print $9'} | sort -u | wc -l
> 
> les deux paramêtre suivants peuvent également être positionnés :
> 
> set-variable  = query_cache_size=10485760
> set-variable  = record_buffer=1M
> 
> 
> * si tu as beaucoup de slow-query ("Slow queries:" dans le status),
> baisse la valeur après laquelle ces requêtes seront fusillées :
> 
> long_query_time = 30 => supprime toute requête qui est en cours
> d'éxécution depuis plus de 30 secondes
> 
> 
> * ne pas prendre en compte ce qui est inutilisé, donc ajout de ceci dans
> le my.cnf :
> skip-innodb
> skip-bdb
> 
> 
> * limiter le nombre de connection, et les killer au bout de n secondes
> d'inactivités :
> 
> set-variable  = max_connections=300
> set-variable  = wait_timeout=20
> set-variable  = interactive_timeout=60
> 
> 
> * passer en mysql 4.0.22. Pour cela :
> 
> mettre ceci dans /etc/apt/sources.list :
> 
> deb http://www.backports.org/debian stable mysql-dfsg
> deb-src http://www.backports.org/debian stable mysql-dfsg
> 
> puis :
> 
> apt-get update
> 
> puis :
> 
> apt-get upgrade (ou dist-upgrade)
> 
> A noter que la dernière version "production" de mysql est la 4.1.7, mais
> pas encore sur backports.org.
> 
> 
> Voilà, ça devrait au moins permettre à mysql d'être plus à l'aise.
> 
> Tu nous tient au courant si ça a servi à qqchose ?
> 
> a+
> 
> jerome
> 
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.2.5 (GNU/Linux)
> Comment: Using GnuPG with MultiZilla - http://enigmail.mozdev.org
> 
> iD8DBQFBkzxW3ygQTLujCrQRAi/gAJ44tdAZtHMupXTXljl2MrIHDg380QCeN6nV
> 0gqURj/nU/zMBOWbF4L6YLw=
> =0bk2
> -----END PGP SIGNATURE-----
> _______________________________________________
> Dev mailing list
> Dev at alternc.org
> http://alternc.org/cgi-bin/mailman/listinfo/dev




Plus d'informations sur la liste de diffusion Dev