Les nouveautés de MySQL 5.1 — (part 3/5)

décembre 6, 2008


(<- précédent)

MySQL Cluster : support des données sur disque

MySQL propose une solution de haute disponibilité : MySQL Cluster. Cette technologie permet de mettre en place une architecture cluster shared nothing à l’aide de tables au format NDBCluster. Jusqu’à MySQL 5.0, MySQL Cluster ne fonctionnait qu’entièrement en mémoire. Ceci excluait donc certaines bases de données trop volumineuses. La nouvelle version 5.1 lève cette limitation en permettant de mettre les données sur disque.

Pour enregistrer ses données sur le disque, il faut au préalable définir deux nouveaux objets : un LOGFILE GROUP et un TABLESPACE.

LOGFILE GROUP : permet gérer les undo log et le crash-recovery

Pour créer un logfile group:

CREATE LOGFILE GROUP lg_1
   ADD UNDOFILE 'undo_1.dat'
   INITIAL_SIZE 16M
   UNDO_BUFFER_SIZE 2M
   ENGINE NDB;
ALTER LOGFILE GROUP lg_1
   ADD UNDOFILE 'undo_2.dat'
   INITIAL_SIZE 12M
   ENGINE NDB;

TABLESPACE : pour stocker les données. A noter que le tablespace utilise le logfile group créé

On peut maintenant créer la table et l’associer au tablespace

Création d’un tablespace:

CREATE TABLESPACE ts_1
   ADD DATAFILE 'data_1.dat'
   USE LOGFILE GROUP lg_1
   INITIAL_SIZE 32M
   ENGINE NDB;
ALTER TABLESPACE ts_1
   ADD DATAFILE 'data_2.dat'
   INITIAL_SIZE 48M
   ENGINE NDB;

Création d’une table au format NDBCluster avec données sur disque:

CREATE TABLE 'City' (
   'ID' int(11) NOT NULL AUTO_INCREMENT,
   'Name' char(35) NOT NULL DEFAULT '',
   'Population' int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY ('ID')
) TABLESPACE ts_1
   STORAGE DISK
   ENGINE=NDB;

Les tables de journalisation

MySQL offre la possibilité de journaliser l’activité du serveur. en activant le general log. Il est aussi est possible de journaliser seulement les requêtes lentes (celles qui s’exécutent en un temps supérieur au seuil que vous aurez préalablement fixé) en activant le slow_query_log.

MySQL 5.1 permet toujours de journaliser ces informations dans un fichier, et ajoute la possibilité de le faire en plus dans une table.

Cerise sur le gâteau, la journalisation peut être démarrée ou arrêtée à chaud.

Les commandes SHOW VARIABLES LIKE ‘general_log’ et SHOW VARIABLES LIKE ‘log_output’ permettent, respectivement, de savoir si le general_log est activé et sous quelle forme.

Pour afficher l’état du general_log:

mysql> SHOW VARIABLES LIKE 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.03 sec)

mysql> SHOW VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+

Le general_log peut être activé dynamiquement avec la commande SET :

mysql> SET GLOBAL general_log = 1;
Query OK, 0 rows affected (0.04 sec)

Le format de sortie peut lui aussi être changé dynamiquement :

+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
| event_time          | user_host               | thread_id | server_id
| command_type | argument                              |
+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
| 2008-02-21 15:51:06 | daz[daz] @ localhost [] |        10 |        51
| Query        | SET GLOBAL log_output = ‘TABLE, FILE' |
| 2008-02-21 15:51:06 | daz[daz] @ localhost [] |        10 |        51
| Query        | SELECT * FROM mysql.general_log       |
+---------------------+-------------------------+-----------+-----------
+--------------+---------------------------------------+
2 rows in set (0.00 sec)
mysql> SET GLOBAL log_output = 'TABLE,FILE';
Query OK, 0 rows affected (0.00 sec)

Les mêmes opérations sont possibles sur le slow_query_log :

mysql> SHOW VARIABLES LIKE 'slow_query_log';
+----------------+-------+
| Variable_name | Value  |
+----------------+-------+
| slow_query_log | ON    |
+----------------+-------+
1 row in set (0.00 sec)

mysql> SELECT * FROM mysql.slow_log;
+------------+----------------------+-----------+-----------+---------------+-----+
| start_time | user_host query_time | lock_time | rows_sent | rows_examined | db |
      | last_insert_id | insert_id | server_id | sql_text
-----------------------------------------------------------------------------------
| 2008-02-21 15:57:13 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 0 | 0 |
      | test | 0 | 0 | 51 | SELECT * FROM mysql.slow_log |
| 2008-02-21 15:57:38 | daz[daz] @ 640m [192.168.1.106] | 00:00:00 | 00:00:00 | 268 |
      | 268 | mysql | 0 | 0 | 51 | SELECT * FROM information_schema.
      GLOBAL_VARIABLES G |
| 2008-02-21 15:57:43 | daz[daz] @ localhost [] | 00:00:00 | 00:00:00 | 2 | 2 | test |
      | 0 | 0 | 51 | SELECT * FROM mysql.slow_log |
+------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

(à suivre… Le moteur de stockage CSV & Le support de XML/XPath)

2 Responses to “Les nouveautés de MySQL 5.1 — (part 3/5)”

  1. […] (à suivre… MySQL Cluster & general log, slow query log dans une table) […]

  2. […] (<- précédent) […]