S’il est relativement aisé de débugger une application en cours de développement ou lors des phases de preprod, c’est une toute autre histoire lorsque celle-ci est en production, et que l’on doit continuer à servir les pages aux internautes sans (trop) dégrader l’applicatif.
L’un des problèmes majeurs, si cela n’a pas été prévu en amont ou lors des tests unitaires, est de traquer ce que doit traiter MySQL à un instant T pour comprendre pourquoi mysqld utilise, par exemple, plus de 50% du CPU. En effet, les 3/4 des soucis de performance que nous rencontrons sur les développements sont dus à des requêtes mal pensées ou mal utilisées.
Dans le cadre d’un récent développement par un prestataire, nous avons eu à auditer une application qu’il a livré. Celle-ci avait une architecture relativement simple: Flex pour l’interface utilisateur, PHP propulsé par un Framework dont je tairais le nom pour traiter les actions de l’utilisateur, et ce dernier fait donc exécuter les requêtes MySQL pour servir le contenu au Flex. Au delà de ça, diverses choses comme du chat et de la webcam sont traitées par un serveur de streaming propriétaire d’Adobe: Flash Media Server (FMS pour les intimes). Le contexte d’analyse est simple: « tout se passait bien jusqu’au jour de la mise en beta », jour à partir duquel il a été mis à disposition d’un bien grand nombre d’internautes des invitations « privées », information relayée par quelques tweets de bloggeurs influents, tout ceci histoire de lancer paisiblement la machine. Ce jour là les classiques ont été constatés: charge apache, charge MySQL, SWAP et le tout s’est terminé en beauté par un magnifique segfault de FMS.
Afin de faire comprendre au prestataire que les soucis de performance n’étaient ni du:
- à une incroyable et incontrôlable explosion du trafic sur le serveur
- à l’incompétence du sysadmin
- à un comportement ésotérique du serveur
- au sous dimensionnement du hardware (pour cette partie en tout cas) [1]
- à bien d’autres choses…
nous avons décidé de sortir sur un laps de quinze minutes les requêtes que devait exécuter MySQL. Ça c’était pour la théorie, maintenant quelle solution choisir ?
- Utiliser munin
Munin ne nous aurait donné qu’une statistique générale du nombre de requêtes à traiter à un instant, sans nous en extraire le contenu. En effet, si l’on se penche sur le plugin mysql_queries de munin situé dans /usr/share/munin/plugins/, on observe qu’il ne fait qu’utiliser mysqladmin avec l’argument extended-status:my $MYSQLADMIN = $ENV{mysqladmin} || "mysqladmin"; my $COMMAND = "$MYSQLADMIN $ENV{mysqlopts} extended-status";
- Utiliser le query log de MySQL
Inenvisageable au moins pour deux raisons: nous étions en production, et donc pas envie de faire une erreur de configuration, aussi minime soit-elle. Mais surtout activer les logs de MySQL, sans savoir précisément de quoi il en retourne derrière (en volume de requêtes), c’est un coup à aggraver la situation en faisant exploser les I/O et par la même d’augmenter l’overhead de la machine. Le /etc/mysql/my.cnf est d’ailleurs plutôt clair à ce sujet:# Both location gets rotated by the cronjob. # Be aware that this log type is a performance killer. # log = /var/log/mysql/mysql.log
- Utiliser le slow query log de MySQL
Il ne recense que les requêtes qui prennent plus d’une seconde. Le problème est que la plupart des soucis de performance ne viennent pas de requêtes trop longues, mais simplement de requêtes qui sont exécutées très souvent, par exemple dans une boucle au lieu d’utiliser un JOIN. - Utiliser le log binaire de MySQL
Utilisation inappropriée: il enregistre l’intégralité des changements et est généralement utilisé pour la réplication, du fait de son contenu et de son format. - Utiliser SHOW PROFILES
Malheureusement, il ne fait état que des ressources, ne gère pas l’intégralité des requêtes et doit surtout être gourmand. - Utiliser le patch de Google user_statistics
Cette solution semble réellement viable pour analyser les performances par utilisateur, mais cela ne collait pas du tout à l’utilisation que je souhaitais en faire. Et ce n’était de toute façon pas déployé sur la machine. - Utiliser Mysql Proxy
Cette solution est réellement idéale, elle embarque load balancing, failover, query analysis, query filtering,… avec de beaux charts. Malheureusement, même tarif que pour les logs cités précédemment: On ne déploie pas cela sur de la prod lorsqu’il est trop tard.
Toutes ces solutions semblaient efficaces pour benchmarker au global un applicatif, un utilisateur, ou pour analyser les requêtes au globale, mais pas pour faire un snapshot à un instant T sans mettre le serveur à genoux.
Il existait un solution un peu bâtarde connue de tous:
- La commande showprocesslist
Cette commande affiche la liste des requêtes en cours d’exécution. Pour chaque requête, vous pouvez voir en combien de temps celle-ci a été exécutée, son utilisateur et son état. Le soucis est que le snap est fait à l’instant précis où l’on tape la commande. En d’autre terme, je ne connais QUE la requête qui est exécutée précisément à CET instant. Je ne connais ni celle d’avant, ni celle d’après. C’est évidement la grosse limitation de cette méthode. Son avantage est en revanche d’être présent nativement sur toutes les versions de MySQL. On pouvait donc imaginer réunir les requêtes à l’aide un bête script:john@laptop:~$ ./process.sh > dump #!/bin/sh while true do mysqladmin -ujohn -puuencode processlist done
Pour le coup cette méthode ne m’a rien apporté de concluant:
+-------+------+-----------+----+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-------+------+-----------+----+---------+------+-------+------------------+ | 22703 | joh | localhost | | Query | 0 | | show processlist | +-------+------+-----------+----+---------+------+-------+------------------+
Je n’ai trouvé que deux solutions pour réussir à faire ce dont j’avais besoin, mais ces deux solutions sont globalement les mêmes, elles utilisent la même méthode et le même principe: sniffer ce qui se passe sur le port 3306, port d’écoute de MySQL.
- Utilisation de tcpdump
J’ai donc entrepris de sniffer ce qui arrivait sur le 3306 avec tcpdump/libpcap à l’aide de la commande suivante [2]:tcpdump -i lo -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/; if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|SHOW)/i) { if (defined $q) { print "$q\n"; } $q=$_; } else { $_ =~ s/^[ \t]+//; $q.=" $_"; } }'Celle-ci affichera en interactif l’intégralité des requêtes qui sont soumises à MySQL. Cette méthode n’a rien donné dans un premier temps: les fichiers de configuration utilisaient localhost comme hôte de connexion. J’ai donc du modifier l’hôte en 127.0.0.1 pour passer par la network stack. Et là, Ô joie, toutes les requêtes processées par MySQL s’empilent les unes aux autres dans mon shell.
- Utilisation de mysqlsniffer
Cette méthode est plus commode pour le néophyte, et elle permet de dumper efficacement la requête, mais également la réponse de MySQL. Pour l’utiliser, voici la marche à suivre:apt-get install libpcap-dev mkdir && cd mysqlsniffer wget http://hackmysql.com/code/mysqlsniffer.tgz tar zxvf mysqlsniffer.tgz gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c
Après il n’y a plus qu’à:
john@laptop:~$ ./mysqlsniffer mysqlsniffer v1.2 - Watch MySQL traffic on a TCP/IP network Usage: mysqlsniffer [OPTIONS] INTERFACE OPTIONS: --port N Listen for MySQL on port number N (default 3306) --verbose Show extra packet information --tcp-ctrl Show TCP control packets (SYN, FIN, RST, ACK) --net-hdrs Show major IP and TCP header values --no-mysql-hdrs Do not show MySQL header (packet ID and length) --state Show state --v40 MySQL server is version 4.0 --dump Dump all packets in hex --help Print this Original source code and more information at: http://hackmysql.com/mysqlsniffer
Allez, pour le plaisir des yeux, une requête parmi tant d’autres que j’ai pu trouver lors du dump. Elle est exécutée à chaque inscription, ou à chaque modification dans le profil de l’utilisateur, la grande classe. Bah quoi, elle est sujette à changer souvent cette liste. Ce que vous êtes médisants.
127.0.0.1.59387 > server: ID 0 len 46 COM_QUERY: SELECT * FROM `countries` ORDER BY `name` ASC server > 127.0.0.1.59387: ID 1 len 1 4 Fields ID 2 len 47 Field: john.countries.id <type tiny int (8961) size 3> ID 3 len 51 Field: john.countries.name <type var string (253) size 135> ID 4 len 59 Field: john.countries.latitude <type float (4) size 12> ID 5 len 61 Field: john.countries.longitude <type float (4) size 12> ID 6 len 5 End <warnings 0> ID 7 len 20 || 3 | Afghanistan | 33 | 65 || ID 8 len 26 || 233 | Afrique du Sud | -29 | 24 || ID 9 len 16 || 6 | Albanie | 41 | 20 || ID 10 len 17 || 59 | Algérie | 28 | 3 || ID 11 len 18 || 54 | Allemagne | 51 | 9 || ID 12 len 19 || 1 | Andorre | 42.5 | 1.5 || ID 13 len 20 || 9 | Angola | -12.5 | 18.5 || ID 14 len 26 || 5 | Anguilla | 18.25 | -63.1667 || ID 15 len 21 || 10 | Antarctique | -90 | 0 || ID 16 len 33 || 4 | Antigua-et-Barbuda | 17.05 | -61.8 || ID 17 len 39 || 8 | Antilles néerlandaises | 12.25 | -68.75 || ID 18 len 26 || 182 | Arabie saoudite | 25 | 45 || ID 19 len 21 || 11 | Argentine | -34 | -64 || ID 20 len 17 || 7 | Arménie | 40 | 45 || ID 21 len 23 || 15 | Aruba | 12.5 | -69.9667 || ID 22 len 21 || 14 | Australie | -27 | 133 || ID 23 len 28 || 13 | Autriche | 47.3333 | 13.3333 || ID 24 len 26 || 16 | Azerbaïdjan | 40.5 | 47.5 || ID 25 len 21 || 30 | Bahamas | 24.25 | -76 || ID 26 len 21 || 23 | Bahren | 26 | 50.55 || ID 27 len 20 || 19 | Bangladesh | 24 | 90 || ID 28 len 28 || 18 | Barbade | 13.1667 | -59.5333 || ID 29 len 20 || 175 | Belau | 7.5 | 134.5 || ID 30 len 22 || 20 | Belgique | 50.8333 | 4 || ID 31 len 23 || 35 | Belize | 17.25 | -88.75 || ID 32 len 19 || 25 | Bénin | 9.5 | 2.25 || ID 33 len 27 || 26 | Bermudes | 32.3333 | -64.75 || ID 34 len 21 || 31 | Bhoutan | 27.5 | 90.5 || ID 35 len 22 || 34 | Biélorussie | 53 | 28 || ID 36 len 19 || 138 | Birmanie | 22 | 98 || ID 37 len 19 || 28 | Bolivie | -17 | -65 || ID 38 len 29 || 17 | Bosnie-Herzégovine | 44 | 18 || ID 39 len 19 || 33 | Botswana | -22 | 24 || ID 40 len 19 || 29 | Brésil | -10 | -55 || ID 41 len 22 || 27 | Brunei | 4.5 | 114.667 || ID 42 len 18 || 22 | Bulgarie | 43 | 25 || ID 43 len 22 || 21 | Burkina Faso | 13 | -2 || ID 44 len 19 || 24 | Burundi | -3.5 | 30 || ID 45 len 20 || 111 | Cambodge | 13 | 105 || ID 46 len 17 || 45 | Cameroun | 6 | 12 || ID 47 len 17 || 36 | Canada | 60 | -95 || ID 48 len 19 || 50 | Cap-Vert | 16 | -24 || ID 49 len 17 || 44 | Chili | -30 | -71 || ID 50 len 16 || 46 | Chine | 35 | 105 || ID 51 len 16 || 52 | Chypre | 35 | 33 || ID 52 len 18 || 47 | Colombie | 4 | -72 || ID 53 len 27 || 113 | Comores | -12.1667 | 44.25 || ID 54 len 15 || 40 | Congo | -1 | 15 || ID 55 len 26 || 115 | Corée du Nord | 40 | 127 || ID 56 len 27 || 116 | Corée du Sud | 37 | 127.5 || ID 57 len 21 || 48 | Costa Rica | 10 | -84 || ID 58 len 23 || 42 | Côte d'Ivoire | 8 | -5 || ID 59 len 24 || 94 | Croatie | 45.1667 | 15.5 || ID 60 len 17 || 49 | Cuba | 21.5 | -80 || ID 61 len 18 || 56 | Danemark | 56 | 10 || ID 62 len 20 || 55 | Djibouti | 11.5 | 43 || ID 63 len 30 || 57 | Dominique | 15.4167 | -61.3333 || ID 64 len 16 || 62 | Egypte | 27 | 30 || ID 65 len 28 || 2 | Emirats arabes unis | 24 | 54 || ID 66 len 21 || 60 | Equateur | -2 | 77.5 || ID 67 len 19 || 64 | Erythrée | 15 | 39 || ID 68 len 17 || 65 | Espagne | 40 | -4 || ID 69 len 17 || 61 | Estonie | 59 | 26 || ID 70 len 22 || 219 | Etats-Unis | 38 | -97 || ID 71 len 17 || 66 | Ethiopie | 8 | 38 || ID 72 len 55 || 136 | ex-République yougoslave de Macédoine | 41.8333 | 22 || ID 73 len 18 || 67 | Finlande | 64 | 26 || ID 74 len 15 || 72 | France | 46 | 2 || ID 75 len 18 || 73 | Gabon | -1 | 11.75 || ID 76 len 27 || 81 | Gambie | 13.4667 | -16.5667 || ID 77 len 20 || 76 | Géorgie | 42 | 43.5 || ID 78 len 14 || 78 | Ghana | 8 | -2 || ID 79 len 29 || 79 | Gibraltar | 36.1833 | -5.3667 || ID 80 len 16 || 85 | Grèce | 39 | 22 || ID 81 len 28 || 75 | Grenade | 12.1167 | -61.6667 || ID 82 len 20 || 80 | Groenland | 72 | -40 || ID 83 len 24 || 88 | Guam | 13.4667 | 144.783 || ID 84 len 25 || 87 | Guatemala | 15.5 | -90.25 || ID 85 len 18 || 82 | Guinée | 11 | -10 || ID 86 len 29 || 84 | Guinée équatoriale | 2 | 10 || ID 87 len 25 || 89 | Guinée-Bissao | 12 | -15 || ID 88 len 16 || 90 | Guyana | 5 | -59 || ID 89 len 22 || 95 | Haïti| 19 | -72.4167 || ID 90 len 21 || 93 | Honduras | 15 | -86.5 || ID 91 len 27 || 91 | Hong Kong | 22.25 | 114.167 || ID 92 len 17 || 96 | Hongrie | 47 | 20 || ID 93 len 27 || 32 | Ile Bouvet | -54.4333 | 3.4 || ID 94 len 31 || 51 | Ile Christmas | -10.5 | 105.667 || ID 95 len 32 || 155 | Ile Norfolk | -29.0333 | 167.95 || ID 96 len 27 || 118 | Iles Cayman | 19.5 | -80.5 || ID 97 len 31 || 43 | Iles Cook | -21.2333 | -159.767 || ID 98 len 42 || 37 | Iles des Cocos (Keeling) | -12.5 | 96.8333 || ID 99 len 28 || 69 | Iles Falkland | -51.75 | -59 || ID 100 len 22 || 71 | Iles Féroé | 62 | -7 || ID 101 len 22 || 68 | Iles Fidji | -18 | 175 || ID 102 len 53 || 86 | Iles Géorgie du Sud et Sandwich du Sud | -54.5 | -37 || ID 103 len 40 || 92 | Iles Heard et McDonald | -53.1 | 72.5167 || ID 104 len 24 || 135 | Iles Marshall | 9 | 168 || ID 105 len 59 || 218 | Iles mineures éloignées des Etats-Unis | 19.2833 | 166.6 || ID 106 len 22 || 236 | Iles Pitcairn | 0 | 0 || ID 107 len 24 || 183 | Iles Salomon | -8 | 159 || ID 108 len 37 || 190 | Iles Svalbard et Jan Mayen | 78 ID 109 len 40 || 201 | Iles Turks-et-Caicos | 21.75 | -71.5833 || ID 110 len 47 || 226 | Iles Vierges américaines | 18.3333 | -64.8333 || ID 111 len 41 || 225 | Iles Vierges britanniques | 18.5 | -64.5 || ID 112 len 15 || 100 | Inde | 20 | 77 || ID 113 len 21 || 97 | Indonésie | -5 | 120 || ID 114 len 15 || 103 | Iran | 32 | 53 || ID 115 len 15 || 102 | Iraq | 33 | 44 || ID 116 len 17 || 98 | Irlande | 53 | -8 || ID 117 len 19 || 104 | Islande | 65 | -18 || ID 118 len 22 || 99 | Israël | 31.5 | 34.75 || ID 119 len 27 || 105 | Italie | 42.8333 | 12.8333 || ID 120 len 26 || 106 | Jamaïque | 18.25 | -77.5 || ID 121 len 17 || 108 | Japon | 36 | 138 || ID 122 len 19 || 107 | Jordanie | 31 | 36 || ID 123 len 21 || 119 | Kazakhstan | 48 | 68 || ID 124 len 15 || 109 | Kenya | 1 | 38 || ID 125 len 23 || 110 | Kirghizistan | 41 | 75 || ID 126 len 24 || 112 | Kiribati | 1.4167 | 173 || ID 127 len 28 || 117 | Koweït | 29.3375 | 47.6581 || ID 128 len 16 || 120 | Laos | 18 | 105 || ID 129 len 23 || 126 | Lesotho | -29.5 | 28.5 || ID 130 len 19 || 129 | Lettonie| 57 | 25 || ID 131 len 26 || 121 | Liban | 33.8333 | 35.8333 || ID 132 len 21 || 125 | Liberia | 6.5 | -9.5 || ID 133 len 16 || 130 | Libye | 25 | 17 || ID 134 len 33 || 123 | Liechtenstein | 47.1667 | 9.5333 || ID 135 len 19 || 127 | Lituanie | 56 | 24 || ID 136 len 28 || 128 | Luxembourg | 49.75 | 6.1667 || ID 137 len 25 || 140 | Macao | 22.1667 | 113.55 || ID 138 len 22 || 134 | Madagascar | -20 | 47 || ID 139 len 23 || 150 | Malaisie | 2.5 | 112.5 || ID 140 len 20 || 148 | Malawi | -13.5 | 34 || ID 141 len 21 || 147 | Maldives | 3.25 | 73 || ID 142 len 15 || 137 | Mali | 17 | -4 || ID 143 len 26 || 145 | Malte | 35.8333 | 14.5833 || ID 144 len 34 || 141 | Mariannes du Nord | 15.2 | 145.75 || ID 145 len 16 || 131 | Maroc | 32 | -5 || ID 146 len 27 || 146 | Maurice | -20.2833 | 57.55 || ID 147 len 22 || 143 | Mauritanie | 20 | -12 || ID 148 len 20 || 149 | Mexique | 23 | -102 || ID 149 len 29 || 70 | Micronésie | 6.9167 | 158.25 || ID 150 len 19 || 133 | Moldavie | 47 | 29 || ID 151 len 23 || 132 | Monaco | 43.7333 | 7.4 || ID 152 len 20 || 139 | Mongolie | ID 153 len 27 || 144 | Montserrat | 16.75 | -62.2 || ID 154 len 25 || 151 | Mozambique | -18.25 | 35 || ID 155 len 19 || 152 | Namibie | -22 | 17 || ID 156 len 26 || 161 | Nauru | -0.5333 | 166.917 || ID 157 len 17 || 160 | Népal | 28 | 84 || ID 158 len 21 || 157 | Nicaragua | 13 | -85 || ID 159 len 15 || 154 | Niger | 16 | 8 || ID 160 len 17 || 156 | Nigeria | 10 | 8 || ID 161 len 29 || 162 | Nioué | -19.0333 | -169.867 || ID 162 len 19 || 159 | Norvège | 62 | 10 || ID 163 len 36 || 153 | Nouvelle-Calédonie | -21.5 | 165.5 || ID 164 len 30 || 163 | Nouvelle-Zélande | -41 | 174 || ID 165 len 15 || 164 | Oman | 21 | 57 || ID 166 len 17 || 217 | Ouganda | 1 | 32 || ID 167 len 23 || 221 | Ouzbékistan | 41 | 64 || ID 168 len 19 || 170 | Pakistan | 30 | 70 || ID 169 len 17 || 165 | Panama | 9 | -80 || ID 170 len 38 || 168 | Papouasie-Nouvelle-Guinée | -6 | 147 || ID 171 len 21 || 176 | Paraguay | -23 | -58 || ID 172 len 23 || 158 | Pays-Bas | 52.5 | 5.75 || ID 173 len 19 || 166 | Pérou | -10 | -76 || ID 174 len 23 || 169 | Philippines | 13 | 122 ID 175 len 18 || 171 | Pologne | 52 | 20 || ID 176 len 35 || 167 | Polynésie française | -15 | -140 || ID 177 len 27 || 173 | Porto Rico | 18.25 | -66.5 || ID 178 len 21 || 174 | Portugal | 39.5 | -8 || ID 179 len 21 || 177 | Qatar | 25.5 | 51.25 || ID 180 len 35 || 39 | République centrafricaine | 7 | 21 || ID 181 len 43 || 38 | République démocratique du Congo | 0 | 25 || ID 182 len 39 || 58 | République dominicaine | 19 | -70.6667 || ID 183 len 35 || 53 | République tchèque | 49.75 | 15.5 || ID 184 len 19 || 179 | Roumanie | 46 | 25 || ID 185 len 21 || 74 | Royaume-Uni | 54 | -2 || ID 186 len 18 || 180 | Russie | 60 | 100 || ID 187 len 17 || 181 | Rwanda | -2 | 30 || ID 188 len 30 || 63 | Sahara occidental | 24.5 | -13 || ID 189 len 48 || 114 | Saint-Christophe-et- | 17.3333 | -62.75 || ID 190 len 32 || 193 | Saint-Marin | 43.7667 | 12.4167 || ID 191 len 48 || 223 | Saint-Vincent-et-les-Grenadines | 13.25 | -61.2 || ID 192 len 34 || 188 | Sainte-Hélène | -15.9333 | -5.7 || ID 193 len 34 || 122 | Sainte-Lucie | 13.8833 | -61.1333 || ID 194 30 || 198 | Salvador | 13.8333 | -88.9167 || ID 195 len 28 || 230 | Samoa | -13.5833 | -172.333 || ID 196 len 36 || 12 | Samoa américaines | -14.3333 | -170 || ID 197 len 30 || 197 | Sao Tomé-et-Principe | 1 | 7 || ID 198 len 21 || 194 | Sénégal | 14 | -14 || ID 199 len 30 || 237 | Serbie et Monténegro | 0 | 0 || ID 200 len 31 || 184 | Seychelles | -4.5833 | 55.6667 || ID 201 len 27 || 192 | Sierra Leone | 8.5 | -11.5 || ID 202 len 27 || 187 | Singapour | 1.3667 | 103.8 || ID 203 len 27 || 191 | Slovaquie | 48.6667 | 19.5 || ID 204 len 20 || 189 | Slovénie | 46 | 15 || ID 205 len 18 || 195 | Somalie | 10 | 49 || ID 206 len 17 || 185 | Soudan | 15 | 30 || ID 207 len 19 || 124 | Sri Lanka | 7 | 81 || ID 208 len 17 || 186 | Suède | 62 | 15 || ID 209 len 15 || 41 | Suisse | 47 | 8 || ID 210 len 19 || 196 | Suriname | 4 | -56 || ID 211 len 25 || 200 | Swaziland | -26.5 | 31.5 || ID 212 len 16 || 199 | Syrie | 35 | 38 || ID 213 len 22 || 206 | Tadjikistan | 39 | 71 || ID 214 len 21 || 214 | Taïwan | 23.5 | 121 || ID 215 len 19 || 215 | Tanzanie | -6 | 35 ID 216 len 16 || 202 | Tchad | 15 | 19 || ID 217 len 40 || 203 | Terres australes françaises | -43 | 67 || ID 218 len 54 || 101 | Territoire britannique de l'Océan Indien | -6 | 71.5 || ID 219 len 22 || 205 | Thaïlande | 15 | 100 || ID 220 len 18 || 204 | Togo | 8 | 1.1667 || ID 221 len 22 || 207 | Tokélaou | -9 | -172 || ID 222 len 19 || 210 | Tonga | -20 | -175 || ID 223 len 30 || 212 | Trinité-et-Tobago | 11 | -61 || ID 224 len 17 || 209 | Tunisie | 34 | 9 || ID 225 len 24 || 208 | Turkménistan | 40 | 60 || ID 226 len 18 || 211 | Turquie | 39 | 35 || ID 227 len 18 || 213 | Tuvalu | -8 | 178 || ID 228 len 18 || 216 | Ukraine | 49 | 32 || ID 229 len 20 || 220 | Uruguay | -33 | -56 || ID 230 len 20 || 228 | Vanuatu | -16 | 167 || ID 231 len 23 || 222 | Vatican | 41.9 | 12.45 || ID 232 len 20 || 224 | Venezuela | 8 | -66 || ID 233 len 21 || 227 | Viét Nam | 16 | 106 || ID 234 len 34 || 229 | Wallis-et-Futuna | -13.3 | -176.2 || ID 235 len 17 || 231 | Yémen | 15 | 48 || ID 236 len 18 || 234 | Zambie | -15 | 30 || ID 237 len 20 || 235 | Zimbabwe | -20 |
Au fait, pour ceux qui croient que le blog est en friche, j’ai sorti la tondeuse.
[1]Il faut quand même de sacrés machines pour faire tenir 500 pelos sur un serveur.
http://www.adobe.com/devnet/flashmediaserver/articles/performance_tuning_webcasts.html
[2]Merci à Brian Racer.












Très utile aussi et pas du tout intrusive, la combinaison tcpdump + Maatkit :
http://www.mysqlperformanceblog.com/2009/07/01/gathering-queries-from-a-server-with-maatkit-and-tcpdump/
Bonjour,
Pourriez-vous m’indiquer où je dois changer le localhost par 127.0.0.1 car ça ne m’affiche rien avec mysqlsniffer ? le bind-address du my.cnf ? Si c’est cela il est déjà à 127.0.0.1 et pourtant rien !!
Dans votre fichier de configuration de l’application pardi !