Options de démarrage BDB
<<<
Caractéristiques des tables BDB Ce que nous devons corriger dans BDB dans un futur proche :
>>>

15.4 Tables BDB ou BerkeleyDB
15 Types de tables MySQL
 Manuel de Référence MySQL 4.1 : Version Française

Systèmes d'exploitation supportés par BDB
Installation de BDB
Options de démarrage BDB
->Caractéristiques des tables BDB
Ce que nous devons corriger dans BDB dans un futur proche :
Restrictions avec les tables BDB
Erreurs pouvant survenir lors de l'utilisation des tables BDB

15.4.4 Caractéristiques des tables BDB

Chaque table BDB est stocké sur le disque en deux fichiers. Les fichiers portent le nom de la table, et ont des extensions qui indiquent le type de fichier. Un fichier .frm stocke la définition de la table, et le fichier .db contient les données et les index.

Pour spécifier explicitement que vous voulez une table BDB , indiquez l'option de création de table ENGINE ou TYPE :


CREATE TABLE t (i INT) ENGINE = BDB;
CREATE TABLE t (i INT) TYPE = BDB;
BerkeleyDB est un synonyme de BDB pour les options ENGINE et TYPE .

Le moteur de tables BDB fournit un modèle transactionnel. La façon dont vous utilisez ces tables dépend du mode de validation :

  • Si vous utilisez le mot d'auto-validation (ce qui est le mode par défaut), les modifications dans les tables BDB sont validées immédiatement, et ne peuvent pas être annulées.
  • Si vous utilisez le mode de validation manuel, les modifications ne seront rendues permanentes que si vous envoyez la commande COMMIT . AU lieu de valider, vous pouvez aussi annuler avec la commande ROLLBACK pour détruire les modifications.Vous pouvez démarrer une transaction avec la commande BEGIN WORK pour suspendre le mode d'auto-validation, ou avec SET AUTOCOMMIT=0 pour le désactiver explicitement.
Syntaxe des BEGIN/COMMIT/ROLLBACK .

Le moteur de tables BDB a les caractéristiques suivantes :

  • Les tables BDB peuvent avoir jusqu'à 31 index par table, 16 colonnes par index, et un taille maximale de 1024 octets par index (500 octets avant MySQL 4.0).
  • MySQL requiert une clé PRIMARY KEY dans chaque table BDB pour être capable de faire référence aux lignes précédemment lues. Si vous n'en créez pas, MySQL va gérer une telle clé de manière cachée. La clé cachée a une taille de 5 octets, et est incrémentée à chaque nouvelle insertion.
  • La clé PRIMARY KEY sera plus rapide que n'importe quelle autre clé, car la PRIMARY KEY est stockée avec les données. Comme les autres clés sont stockées sous la forme données + PRIMARY KEY , il est important de garder une clé PRIMARY KEY aussi courte que possible pour économiser de l'espace disque, et améliorer la vitesse.

    Ce comportement est similaire à celui d' InnoDB , où des clés primaires courtes économisent de l'espace pour la clé primaire et pour les index secondaire aussi.

  • Si toutes les colonnes auxquelles vous accédez dans une table BDB font partie du même index dans la clé primaire, alors MySQL peut exécuter la requête sans avoir à lire la ligne elle-même. Dans une table MyISAM , ce qui précède n'est valable que si les colonnes font partie du même index.
  • Scanner séquentiellement est plus lent qu'avec MyISAM car les tables BDB stockent les données dans un fichier B-tree et non pas dans un fichier séparé.
  • Les clés ne sont pas compressées avec les clés précédentes, comme pour les tables ISAM et MyISAM . En d'autres termes, les informations de clés prennent un peu plus d'espace pour les tables BDB , comparativement aux tables MyISAM qui n'utilisent pas l'option PACK_KEYS=0 .
  • Il y a souvent des trous dans les tables BDB pour vous permettre d'insérer de nouvelles lignes au milieu de l'arbre de données. Cela rend les tables BDB un peu plus grandes que les tables MyISAM .
  • SELECT COUNT(*) FROM table_name est très lent, car les tables BDB ne maintiennent pas un compte de leur lignes dans la table.
  • L'optimiseur a besoin de connaître une approximation du nombre de lignes dans la table. MySQL résout ce problème en comptant les insertions et en conservant ce compte dans un segment séparé pour chaque table BDB . Si vous ne faites pas souvent de DELETE ou ROLLBACK , ce nombre sera plutôt précis pour l'optimiseur MySQL, mais comme MySQL ne stocke ce nombre qu'à la fermeture de la table, il peut être incorrecte si MySQL s'interrompt inopinément. Cela ne doit pas être fatal si ce nombre n'est pas à 100% correct. Vous pouvez forcer la mise à jour de ce nombre avec la commande ANALYZE TABLE ou OPTIMIZE TABLE . Syntaxe de ANALYZE TABLE . Syntaxe de OPTIMIZE TABLE .
  • Le verrouillage interne des tables BDB est fait au niveau page.
  • LOCK TABLES fonctionne avec les tables BDB sur les autres tables. Si vous n'utilisez pas le verrou LOCK TABLE , MySQL va poser un verrou interne multiple sur la table, pour s'assurer que la table est bien verrouillée, si un autre thread tente de poser un verrou.
  • Pour permettre les annulations de transaction, BDB gère un fichier de log. Pour maximiser les performances, vous devriez placer ces fichiers sur un autre disque que celui de votre base, en utilisant l'option --bdb-logdir .
  • MySQL fait un point de contrôle à chaque fois qu'un nouveau fichier de log BDB est démarré, et supprime les fichiers de logs anciens qui ne sont pas utiles. Si vous exécutez la commande FLUSH LOGS , vous placerez un nouveau point de contrôle pour les tables Berkeley DB.Pour la restauration après crash, vous devez utiliser les sauvegardes et le log binaire de MySQL. Sauvegardes de base de données .

    Attention : si vous effacez les anciens fichiers de log qui sont en cours d'utilisation, BDB ne sera pas capable de faire la restauration et vous risquez de perdre des données.

  • L'application doit toujours être prête à gérer des cas où une modification sur une table BDB peut être annulée, ou une lecture abandonnée pour cause de blocage de verrous.
  • Si vous atteignez la capacité maximale du disque avec la table BDB , vous allez obtenir une erreur (probablement l'erreur 28), et la transaction va s'annuler. C'est un comportement différent des tables MyISAM et ISAM qui vont attendre que mysqld ait trouvé de l'espace disque avant de continuer.

<< Caractéristiques des tables BDB >>
Options de démarrage BDB Tables BDB ou BerkeleyDB Ce que nous devons corriger dans BDB dans un futur proche :