Displaying posts with tag: MySQL (reset)
Online Schema Change for MySQL

It is great to be able to build small utilities on top of an excellent RDBMS. Thank you MySQL.

This is a small but complex utility to perform online schema change for MySQL. We call it OSC and the source is here.

Some ALTER TABLE statements take too long form the perspective of some MySQL users. The fast index create feature for the InnoDB plugin in MySQL 5.1 makes this less of an issue but this can still take minutes to hours for a large table and for some MySQL deployments that is too long.

A workaround is to perform the change on a slave first and then promote the slave to be the new master. But this requires a slave located near the master. MySQL 5.0 added support for …

[Lire plus]
Le Programme du Forum PHP 2010

Rasmus Lerdorf, créateur de PHP, sera l’invité d’honneur de cette édition anniversaire : les 9 et 10 novembre 2010, Cité des Sciences de La Villette. En ouvrant un cycle de conférences dédié à des profils fonctionnels, l’Association Française des Utilisateurs de PHP entend intégrer un public plus large, pour initier les chefs de projets à [...]

StrToNum ou comment convertir une chaine en nombre ?

Dans Sphinx, les filtres doivent être scalaires. J'avais donc un problème pour obtenir une version numérique d'un code pays.

ASCII(str) transforme le premier caractère de votre chaine en nombre.

Mais comment faire pour avoir un nombre différent pour 2 chaines ayant le même premier caractère ?

J'étais parti dans un délire :

  ASCII(code)-65 + (ASCII(substr(code,1,0)-65+26)  ...

Puis j'ai un peu regratté la doc et j'ai trouvé HEX()

HEX(N_or_S)

Si N_OR_S est une chaîne de caractères, cette fonction retournera une chaîne de caractères hexadécimale de N_OR_S où chaque caractère de N_OR_S est converti en 2 chiffres hexadécimaux.

edit: Je n'ai par contre pas encore trouvé d'équivalent PHP. En PHP on a …

[Lire plus]
Colonnes Virtuelles pour MariaDb

Un petit post pour dire que dans la 5.2 de MariaDB on aura droit a des colonnes virtuelles

Fonctionnalité disponible dans oracle depuis sa version 11 et inexistante chez Mysql.

[sql]
 create table table1 (
    a int not null,
    b varchar(32),
    c int as (a mod 10) virtual,
    d varchar(5) as (left(b,5)) persistent);

Les colonnes C et D sont virtuelles, et ne représentent que des calculs (à la volée pour C à l'insertion pour D).

Les PERSISTENT peuvent même être utilisées pour des index (pas primary)

Sphinx : j'en dit un peu plus sur ce moteur de recherche

Je parlais il y a 2 jours de sphinx en expédiant une explication en 2 secondes.

Le lendemain, je vois sur Planet Mysql que Shlomi Noach publiait un article pour remettre les pendules à l'heure sur ce qu'est sphinx

Je vais donc en dire un peu plus.

Sphinx est un moteur d'indexation/recherche open-source sous GPLv2.

On utilise indexer pour scanner ce qu'il faut indexer, cela génère des fichiers que searchd rend consultables.

Pour attaquer searchd, on a search en ligne de …

[Lire plus]
Nombre de résultats d'une recherche SphinxSe

Sphinx est un moteur de recherche full-text

On peut l'interroger au travers de son api, SphinxQL, en ligne de commande ou avec l'engine MySql SphinxSE

J'utilise MySqlSE;

SELECT * from INFORMATION_SCHEMA.ENGINES;

ENGINE SUPPORT COMMENT                     TRANSACTIONS  XA      SAVEPOINTS
------ ------- --------------------------- ------------  ------  ----------
...
SPHINX YES     Sphinx storage engine 0.9.9 NO            NO      NO        

La question du jour était : Y a-t-il un moyen de connaître le nombre total de résultats quand on utilise un limit ?

En Mysql simple, il y a SQL_CALC_FOUND_ROWS

mysql> SELECT SQL_CALC_FOUND_ROWS * 
    -> FROM tbl_name
    -> WHERE id > …
[Lire plus]
Recherche sur un champs indexé, qui n'utilise pas l'index

Petite anti-astuce :Utiliser des fonctions dans les conditions sur un champs indexé, annule l'utilisation de l'index

mysql> EXPLAIN SELECT * FROM film WHERE title LIKE 'Tr%'\\G 
*************************** 1. row *************************** 
id: 1 
select_type: SIMPLE 
table: film 
type: range 
possible_keys: idx_title 
key: idx_title 
key_len: 767 
ref: NULL 
rows: 15 
Extra: Using where

Une stratégie d'accès rapide à un range est choisi par l'optimiseur, et l'index sur le titre est utilisé pour réduire la quantité d'enregistrements à examiner (ici 15)

mysql> EXPLAIN SELECT * FROM film WHERE LEFT(title,2) = 'Tr' \\G 
*************************** 1. row *************************** 
id: 1 
select_type: SIMPLE 
table: film type: ALL 
possible_keys: NULL 
key: NULL 
key_len: NULL 
ref: NULL 
rows: 951 
Extra: Using where

Une analyse complète des enregistrement, donc lente, (c'est la stratégie d'accès ALL) est …

[Lire plus]
Préambule

De quoi traite ce blogue?

J’aborderai différents sujets, surtout reliés à l’informatique.  Comme mes intérets portent surtout sur Smalltalk et les technologies orientées-objet ainsi que sur les bases de données, vous entendrez souvent parler de Pharo, de Squeak et de MySQL.  J’y traiterai aussi de littérature, des échecs, de logiciels open source, de mathématiques, de musique et d’une foule d’autres sujets.  Bref, je vous ferai part de mes découvertes!

Pourquoi ce blogue?

Parce que j’aime bien partager mes expériences avec les autres et surtout découvrir de nouvelles façons de faire et de nouvelles idées.  Ce blogue servira surtout à présenter des problèmes pratiques et des façons de résoudre ceux-ci.

Pourquoi en français?

Parce que, malheureusement, les ressources disponibles sur internet sont rarement …

[Lire plus]
Outils d’analyse de requêtes lentes – mysqlsla

Pour ce second volet de notre série consacrée aux outils d’analyse de requêtes lentes, nous allons nous pencher aujourd’hui sur mysqlsla, qui est un script Perl disposant de nombreuses options d’agrégation et de filtrage.

Commençons par l’installation du script. Rien de plus simple, il vous suffit pour commencer de télécharger et de décompresser une archive de l’outil, disponible ici. Ensuite, des classiques

$ perl Makefile.PL
$ make
# make install

vous permettent d’installer le script. Notez, point agréable, qu’une page de man est intégrée. Si vous cherchez la syntaxe d’une option, un man mysqlsla vous dispensera donc bien souvent d’aller faire un tour sur le site du projet.

mysqlsla est plus généraliste que …

[Lire plus]
Vulnérabilités MySQL 5.1.47

Les versions antérieurs à 5.1.47 MySQL souffrent de vulnérabilités:

  • déni de service. Cet effet peut se produire lorsque le serveur de base de données reçoit un paquet dont la taille est supérieure à la taille maximale autorisée.
  • débordement de mémoire (buffer overflow). Cet effet se produit lorsque l’argument passé à la commande « COM_FILED_LIST » est très long. L’utilisateur doit cependant être authentifié pour exploiter cette vulnérabilité.

Versions affectées:  Versions antérieures à 5.1.47

Criticité: Moyenne

Solution: Mises à jour disponibles sur les différentes distributions

MySQL souffre d’une vulnérabilité de déni de service. Cet effet peut se produire lorsque

le serveur de base de données reçoit un paquet dont la taille est supérieure à la taille

maximale autorisée.