Calculer les centiles MySQL

Les centiles sont une des 99 valeurs qui divise les données triées en 100 parts égales. Le premier centile (abusivement appelé percentile, de la version anglaise), identifie les valeurs le plus basses du groupe. On connaît souvent la médiane, qui découpe le groupe en 2 part de même taille : le concept est similaire.
Roland Bouman publie un article où il arrive à calculer les percentiles sans jointures, sous-requêtes ni variables utilisateurs : il se base sur GROUP_CONCAT, et SUBSTRING pour ordonner le groupe, et en extraire des portions intéressantes. Le tout se fait en une seule passe, et quelques manipulations de chaînes.
C'est un bon truc, mais je crois que je préfèrerai les variables utilisateurs, pour éviter de concaténer des chaînes trop grosses dans group_concat.

[Lire plus]
Vidéo PHP et MySQL, édition 51

Voici les 5 dernières vidéos PHP et MySQL.



Ces vidéos sont publiés …

[Lire plus]
MySQL proxy tests de performances

Alex Tomic a testé le proxy MySQL en charge sur EC2 : un proxy et 4 serveurs MySQL. Les requêtes sont réparties sur 4 serveurs MySQL, et distribuées (entrée et sortie) via le proxy. Les résultats montrent que le point critique est entre 4 et 8 threads concurrents : en dessous de ce niveau d'activité, le surcoût de MySQL proxy rend l'architecture plus lente. Une fois ce cap passé, le gain devient plus intéressant, et l'archi proxy est capable de monter en puissance jusqu'à 4 fois la charge nominale de chaque serveur.

Revue de MONyog, moniteur pour MySQL

Sheeri Kabral passe en revue MONyog, un moniteur MySQL dédié. Il s'installe en quelques minutes, surveille les requêtes SQL (tentatives de piratage, qualité des requêtes SQL), et produit des graphiques de performances. MONYog se distingue des autres outils de surveillance, comme MySQL entreprise, par l'absence d'agent local : pas besoin d'installation particulière sur le serveur de destination pour le suivre.
MONyog coûte 129 $ US, avec 1 an de support.

Les tables de décisions en MySQL

Les tables de décisions rassemblent la logique métier dans un tableau, simple à lire et à comprendre. "Les tables de décisions, pour moi [Jonathan], prennent tout leur sens dans le fait que leur logique métier est aisée à comprendre, et peut être facilement vérifiée."
Jonathan suit alors son idée de stocker de telles tables en base de données, avec la possibilité de les traduire en code (PHP ou autre) facilement. Cela redonne la main aux utilisateurs pour établir leurs processus de fonctionnement. L'article ne va pas aussi loin, mais c'est déjà un bon début.

Mélanger des commandes Shell avec du code SQL

"Lorsque vous utilisez MySQL en mode batch, vous aurez souvent besoin d'utiliser les commandes en ligne UNIX en collaboration avec des requêtes SQL. Ce script de démonstration vous montre comment faire cela."
Amit K. Saha présente ici un truc pratique pour tout faire dans un script Shell, sans passer par un langage de programmation complémentaire.

Trouver les index MySQL inutiles

Arjen Lentz propose la requête suivante pour détecter les index qui ne servent à rien dans MySQL :

 
 
SELECT s.table_name,
 
       concat(s.index_name,'(',group_concat(s.column_name order by s.seq_in_index),')') as idx,
 
       GROUP_CONCAT(s.cardinality ORDER BY s.seq_in_index) AS card,
 
       t.table_rows
 
  FROM information_schema.tables t
 
  JOIN information_schema.statistics s USING (table_schema,table_name)
 
 WHERE t.table_schema='dbname'
 
   AND t.table_rows > 1000
 
   AND s.non_unique
 
 GROUP BY s.table_name,s.index_name
 
HAVING (card + 0) < (t.table_rows / 3);
 


La requête utilise la base information_schema (MySQL 5.0 et supérieur), pour repérer les index dont la cardinalité est inférieure à 30% : c'est le niveau à partir duquel MySQL va décider que l'index est utile, et en dessous de ce niveau, MySQL décidera d'ignorer l'index et de tout …

[Lire plus]
Alertes sécurité des applications PHP et MySQL, édition 208


PHP et MySQL ne font l'objet d'aucune alerte de sécurité dans leurs versions courantes :
PHP 5.2.6 et 4.4.8; MySQL 5.0.51 (communauté) , 5.1.25 et 6.0.5.
Les mises à jour sont recommandées vers ces versions.



5 alertes de sécurité ont été émises cette semaine, concernant des applications suivantes :
Drupal, Gallery, Joomla, phpMyAdmin et vBulletin


[Lire plus]
Nouvelle version de MySQL : 6.0.5

MySQL 6.0.5, avec la dernière version de Falcon, est disponible au téléchargement. MySQL 6.0 inclut essentiellement le nouveau moteur Falcon, développé pour MySQL par Jim Starkey.
MySQL 6.0.4 apporte 2 correctifs de sécurité, portant sur les tables MyISAM et la version Microsoft. Un total de 400 bugs ont été corrigés dans cette nouvelle version.
Changements incompatibles :


  • Les tables de logs sont maintenant de type FILE, et non plus TABLE.
  • La bibliothèque de conversion chaîne <-> nombre a été changée
  • MySQL Cluster est doit être téléchargé séparément
  • NDB_LE_MemoryUsage.page_size_kb est renommé page_size_bytes
  • Une colonne ROUTINE_TYPE a été ajouté dans information_schema.PARAMETER


Corrections :


  • Sécurité : …
[Lire plus]
Les index MySQL : types, placements, efficacité

Déjà trois semaines d’écoulées depuis que certains d’entre vous, les “héros”, ont posé leurs questions (oui il est possible de devenir un héros rien qu’en lisant dbnewz ! Les véritables héros sont d’ailleurs abonnés au tout nouveau flux feedburner )

Trois semaines d’attente, cela mérite un billet digne de ce nom, c’est parti.

Indexer, pourquoi ?

L’indexation peut avoir plusieurs buts :
- Accéder à ses données plus rapidement, les index sont en effet l’outil le plus puissant pour accélérer les temps d’exécution de vos requêtes jusqu’à parfois plusieurs centaines de % !
- Définir le degré d’unicité d’une colonne donnée : chaque champ doit-il …

[Lire plus]