Displaying posts with tag: MySQL (reset)
Discount code pour Percona Live London

Percona Live est une série de conférences 100% techniques autour de MySQL, organisées par Percona. La prochaine conférence aura lieu à Londres les 24 et 25 octobre et pour tous ceux qui souhaiteraient y assister, dbnewz vous propose un tarif réduit !

Voici le code magique qui vous donnera droit à une réduction de 40£ : come-c-talk, que vous pourrez saisir en vous enregistrant.

Pour plus d’informations sur Percona Live, vous pouvez aller voir le site, et surtout le programme.
Enfin, vous pouvez vous inscrire au groupe LinkedIn créé pour l’occasion par notre ami …

[Lire plus]
10/11 : Une journée de conférences dédiée aux chefs de projet et DSI sur le CMS Drupal

Avec la présence exceptionnelle du Figaro.fr, Mediapart, RadioFrance et France Télévision Jeudi 10 novembre 2011 à Paris Le forum Drupagora 2011 aura lieu à Paris le 10 novembre 2011 et est destiné en priorité à un public fonctionnel utilisant Drupal : chef de projet, directeur informatique. Pour l’édition 2011, les thèmes particulièrement mis en lumière [...]

MySQL et ses messages d’erreur

Je suis en généralement plutôt content de MySQL : c’est simple et stable, ça fonctionne bien. Mais il reste encore du travail pour que les messages d’erreur soient explicites. Petit résumé d’une frayeur causée par un message d’erreur approximatif.

Une de mes tables a une tendance marquée à la fragmentation, ce qui a pour conséquence de faire gonfler artificiellement sa taille et de faire baisser les performances de certaines requêtes. Je dois donc de temps à autre la défragmenter. Pas de problème : je commence par regarder la taille sur le disque du fichier .ibd (il s’agit d’une table InnoDB sur un serveur pour lequel innodb_file_per_table est activé). Quand la table est défragmentée, elle fait environ 8 Go :

# cd /data/mysql/main_revshare
# du -sh bris_statistic_video.ibd
11G bris_statistic_video.ibd

Pas de doute, une séance de défragmentation …

[Lire plus]
Méthodes de suppression des index inutiles

Les vacances étant terminées, nous allons boucler notre tour de vue des index inutiles en voyant quels outils vont nous aider à découvrir les index qui peuvent être supprimés. Le dernier article présentait en effet des indications qui fonctionnent généralement bien mais qui ont l’inconvénient de demander beaucoup de travail manuel et de laisser de côté tout un pan d’index qui peuvent être inutiles : ceux qui ne sont pas en doublon ni redondants, qui n’ont pas une cardinalité faible mais qui ne sont tout simplement pas utilisés par l’application.

Idée générale

Si vous avez bien lu l’article précédent, vous avez probablement remarqué que la principale difficulté est qu’il n’existe quasiment jamais de règle absolue permettant de savoir à coup sûr qu’un index est inutile (exception notable : les index en doublon repérés par mk-duplicate-key-checker et qui peuvent être supprimés dans 99% …

[Lire plus]
Duplicate key causé par un SELECT

Parmi les erreurs courantes en MySQL, ont trouve la fameuse ERROR 1062 (23000): Duplicate entry ’2984′ for key ‘PRIMARY’ causée par la tentative d’insertion d’une données, déjà présente, dans un colonne ayant une contrainte d’unicité.

Dans la même famille il y a aussi l’erreur 1022…

Une banale requête de lecture avec un GROUP BY:

mysql> SELECT DISTINCT(name), COUNT(name) FROM membre WHERE name <>  » GROUP BY name ERROR 1022 (23000): Can’t write; duplicate key in table ‘/tmp/#sql_29lm_0′  

C’est assez surprenant de trouver une telle erreur sur une requête aussi triviale !

En regardant le plan d’exécution, on remarque que outre le fait qu’ un index est plus que recommandé, MySQL créé une table temporaire (/tmp/#sql_29lm_0) et c’est en insérant les données dans cette dernière que le « duplicate key » se …

[Lire plus]
Numéro spécial MySQL dans phpsolutions

Le magazine phpsolutions propose ce mois-ci, un numéro spécial « Utilisez PHP avec MySQL »

Au sommaire:

  • Introduction à la sécurité et à la gestion des utilisateurs avec MySQL par Olivier Dasini
  • Introduction à PHP/MySQL et l’ORM Doctrine par Julien Tailleu
  • Les moteurs de tables MyISAM et InnoDB depuis MySQL 5.5 par Jean-Baptiste Monin
  • Programmation d’événements par Christian Soutou
  • MySQL, déclencheurs, fonctions et procédures stockée par Pascal Cescato
  • Mise en place de triggers sous PHPMyAdmin par David Peronne

Il est disponible depuis leur site : …

[Lire plus]
Suffix -log dans la version du serveur

La réponse à une question existentielle qui m’a occupée une petite heure…

Que représente le suffix dans le nom de version de certaines instances de MySQL ?

Un exemple pour être plus clair:

# mysql -h serveur1 -e"SHOW GLOBAL VARIABLES LIKE 'version';"
Enter password:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| version       | 5.5.8 |
+---------------+-------+

 

# mysql -h serveur2 -e"SHOW GLOBAL VARIABLES LIKE 'version';"
Enter password:
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| version       | 5.5.8-log |
+---------------+-----------+

 

En fait c’est un moyen de donner des informations sur la façon dont le binaire a été compilé ou configuré.

-log  indique qu’au moins l’un des journaux (general log, slow query log ou …

[Lire plus]
Index candidats à la suppression

Après avoir constaté dans les articles précédents que les index inutiles causent des baisses de performances non négligeables, nous allons voir dans cet article qu’il n’est pas aussi simple qu’il y paraît de déterminer si un index est utile ou non, même si dans certains cas la réponse semble évidente.

A première vue, trois catégories d’index sont bien placés pour être qualifiés d’inutiles : les index en doublon, les index redondants et les index à faible cardinalité. Regardons chaque catégorie en détail.

Index en doublon

Les index en doublon sont simplement ceux qui sont définis plusieurs fois. Un exemple simple pour commencer :
CREATE TABLE t (
  id int(11) DEFAULT NULL,
  KEY a (id),
  KEY b (id)
);

Notons que MySQL n’empêche en aucun cas ce genre de définition erronée.

Un autre …

[Lire plus]
Group by avec Sphinx. via SphinxSe

Cette semaine j'ai réussi à faire un truc avec sphinx que je n'ai pas spécialement trouvé bien documenté donc je le raconte ici.

Quand on utilise une table mysql avec le plugin sphinxSE, on doit obligatoirement commencer par les colonnes

  • id
  • weight
  • query
  • group_id
[mysql]
CREATE TABLE t1
(
    id          INTEGER UNSIGNED NOT NULL,
    weight      INTEGER NOT NULL,
    query       VARCHAR(3072) NOT NULL,
    group_id    INTEGER,
    INDEX(query)
) ENGINE=SPHINX CONNECTION="sphinx://localhost:9312/test";

mais on peut lui ajouter des colonnes

on a les colonnes qui représentent les attributs scalaires mais aussi des colonnes "virtuelles"

  • _sph_groupby,
  • _sph_count
  • _sph_distinct

c'est à dire

[mysql]
CREATE TABLE t1
(
    id          INTEGER UNSIGNED NOT NULL,
    weight      INTEGER NOT …
[Lire plus]
Le coût des index inutiles – 2nde partie

Dans l’article précédent, nous nous étions demandés quelle était la dégradation des performances en écriture quand on ajoute des index. On peut élargir la réflexion en se penchant sur les conditions qui améliorent ou diminuent la vitesse d’écriture dans une table.

Avant de commencer de nouvelles expérimentations, rappelons les conditions du test. La table utilisée a la structure suivante :

CREATE TABLE (
  id int(11) NOT NULL AUTO_INCREMENT,
  col_a varchar(30) NOT NULL DEFAULT '',
  col_b varchar(30) NOT NULL DEFAULT '',
  col_c varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (id)
);

et nous cherchons à insérer un millions de lignes à l’aide de la commande LOAD DATA INFILE.

Rappelons aussi que pour améliorer les performances en …

[Lire plus]