Services webmasters
Partenaires
Jeux concours gratuits
 
Pourquoi tant de tables ouvertes ?
<<<
Quand MySQL ouvre et ferme les tables Inconvénients de la création d'un grand nombre de tables dans la même base de données
>>>

5.4 Optimisation de la structure de la base de données
5 Optimisation de MySQL
 Manuel de Référence MySQL 4.1 : Version Française

Conception
Rendre vos tables aussi compactes que possible
Comment MySQL utilise les index
Index de colonnes
Index sur plusieurs colonnes
Pourquoi tant de tables ouvertes ?
->Quand MySQL ouvre et ferme les tables
Inconvénients de la création d'un grand nombre de tables dans la même base de données

5.4.7 Quand MySQL ouvre et ferme les tables

table_cache , max_connections et max_tmp_tables affectent le nombre maximum de tables que le serveur garde ouvertes. Si vous augmentez l'une de ces valeurs, vous pourriez rencontrer une des limites de votre système d'exploitation. Cependant, vous pourrez augmenter ces limites sur de nombreux systèmes d'exploitation. Consultez votre documentation système pour voir comment faire cela, car la méthode pour modifier la limite est différente pour chaque système.

table_cache est lié au max_connections . Par exemple, pour 200 connexions simultanées, vous devriez avoir un cache de table d'environ 200 * n , où n est le nombre maximum de table dans une jointure. Vous devez aussi réserver des pointeurs de fichiers supplémentaires pour les tables temporaires et les fichiers.

Assurez vous que votre système d'exploitation peut gérer le nombre de pointeurs de fichiers demandé par l'option table_cache . Si table_cache est trop grand, MySQL peut être à court de pointeurs, et refuser des connexions, échouer à l'exécution de requêtes, ou être très instable. Vous devez aussi prendre en compte que les tables MyISAM peuvent avoir besoin de deux pointeurs de fichiers pour chaque table différente. Vous pouvez augmenter le nombre de pointeurs de fichiers disponibles pour MySQL avec l'option de démarrage --open-files-limit=# . Fichier non trouvé .

Le cache de tables ouvertes reste au niveau de table_cache entrées (par défaut, 64; cela peut être modifié avec l'option -O table_cache=# de mysqld ). Notez que MySQL peut ouvrir temporairement plus de tables, pour être capable d'exécuter des requêtes.

Une table qui n'est pas utilisée est refermée, et supprimée du cache de table, dans les circonstances suivantes :

  • Lorsque le cache est plein, et qu'un thread essaie d'ouvrir une table qui n'est pas dans le cache.
  • Lorsque le cache contient plus de table_cache lignes, et qu'aucun thread n'utilise cette table.
  • Lorsque quelqu'un utilise la commande mysqladmin refresh ou mysqladmin flush-tables .
  • Lorsque quelqu'un exécute la commande FLUSH TABLES .
Lorsque le cache de table se remplit, le serveur utilise la procédure suivante pour identifier une entrée du cache, pour la supprimer :
  • Les tables qui n'est pas en cours d'utilisation est libérée, en utilisant la table qui a été accédé depuis plus longtemps en premier.
  • Si le cache est plein, et qu'aucune table ne peut être libérée, mais qu'une nouvelle table doit être ouverte, le cache est temporairement étendu.
  • Si le cache est dans un état d'extension, et qu'une table passe de l'état d'utilisation à non utilisation, la table est immédiatement fermée et libérée du cache.
Une table est ouverte pour chaque accès simultané. Cela signifie que si vous avez deux threads qui accèdent à la même table, ou accèdent à la même table deux fois dans la requête (avec AS ), la table devra être ouverte deux fois. La première ouverture d'une table prendre deux pointeurs de fichiers. Chaque utilisation supplémentaire de la même table ne prendra qu'un pointeur supplémentaire. Le pointeur de fichier supplémentaire de la première table est celui du fichier d'index. Ce pointeur est partagé entre les threads.Si vous ouvrez une table avec HANDLER table_name OPEN , un objet de table dédié sera alloué pour le thread. Cet objet de table n'est pas partagé avec les autres threads, et il ne sera pas fermé avant que le thread n'appelle HANDLER table_name CLOSE , ou que le thread ne meurt. Syntaxe des HANDLER . Lorsque cela arrive, la table est placée dans le cache de table (si il n'est pas plein).

Vous pouvez vérifier si votre cache de table n'est pas trop petit en vérifiant la variable de mysqld appelée Opened_tables . Si cette valeur est grande, même si vous n'avez pas trop abusé de la commande FLUSH TABLES , vous devrez augmenter la taille du cache. SHOW STATUS .

<< Quand MySQL ouvre et ferme les tables >>
Pourquoi tant de tables ouvertes ? Optimisation de la structure de la base de données Inconvénients de la création d'un grand nombre de tables dans la même base de données
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -