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=#
. See
Section A.2.17, « 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. See Section 13.1.3, « Syntaxe de 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. See Section 13.5.3.15, « Syntaxe de SHOW STATUS
».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.