web-dev-qa-db-fra.com

À quoi dois-je définir ma table_definition_cache?

Je viens de découvrir table_definition_cache et j'essaie de décider sur quoi le régler. Je déconne avec ma configuration à cause de problèmes de performances.

Sur un serveur, j'ai 36599 tables et lorsque j'exécute SHOW GLOBAL STATUS la valeur des tables ouvertes est 930312. table_definition_cache est défini sur 20k.

Sur un autre serveur, j'ai 45349 tables et lorsque j'exécute SHOW GLOBAL STATUS la valeur des tables ouvertes est 94383. table_definition_cache est réglé sur 40k.

Je ne sais pas trop sur quoi le régler sur table_definition_cache valeur car il semble que le serveur fasse beaucoup d'ouverture/échange.

Les deux serveurs sont CentOS 6 et fonctionnent

Version du serveur: 5.6.32-78.0 Percona Server (GPL), Release 78.0, Revision 8a8e016

Merci d'avoir regardé! J'apprécie grandement vos commentaires.

4
ODelibalta

J'espère que ces liens peuvent vous aider à décider de votre réglage fin. Un peu plus tard, ma réponse, désolé.

J'ai pu résoudre certains problèmes dans la version 5.5 MySQL en utilisant ces informations.

Ici: vous pouvez vérifier comment calculer votre table_open_cache

  1. Trouver la valeur actuelle de open_tables et opened_tables

mysql> show global status like 'open%';

Le nombre de tables ouvertes pour tous les threads. L'augmentation de cette valeur augmente le nombre de descripteurs de fichiers requis par mysqld. Vous pouvez vérifier si vous devez augmenter le cache de table en vérifiant la variable d'état Opened_tables. Si la valeur de Opened_tables est grande et que vous n'utilisez pas souvent FLUSH TABLES (ce qui oblige simplement à fermer et rouvrir toutes les tables), vous devez augmenter la valeur de la variable table_open_cache.

  1. Découvrez le taux de réussite du cache de table

Table cache hit rate = table_open_cache*100/Opened_tables

En général, il devrait être supérieur à 50%. Vous devez donc augmenter la valeur de table_open_cache, si vous êtes en dessous de cette valeur, bien qu'il existe de nombreuses raisons d'avoir une valeur élevée de Opened_tables. Comme FLUSH TABLES, toutes les tables ouvertes seront fermées et rouvertes, ce qui augmentera considérablement la valeur Opened_tables.

  1. Calculez la valeur de réglage de table_open_cache et définissez-la

Table_open_cache = total_tables*Threads_connected

Comme tous les threads (utilisateur) n'ont généralement pas accès à toutes les tables. Je pense que vous devez définir 50% de la valeur calculée. Parce qu'une valeur trop élevée de cette variable a d'autres effets secondaires. Ainsi, la formule devient

Table_open_cache = total_tables*Threads_connected*.50

  1. De même que table_open_cache vous devez également régler open_files_limit variable système.

En général, c'est 2x de table_open_cache.

open_files_limit= Table_open_cache*2

open_files_limit n'est pas une variable dynamique. Vous devez donc le définir dans le fichier my.cnf et redémarrer MySQL.

Assurez-vous que votre système d'exploitation peut gérer le nombre de descripteurs de fichiers ouverts requis par le table_open_cache réglage.

Réf. https://techinfobest.com/optimize-mysql-table_open_cache/

Et ici: la documentation MySQL nous donne la formule pour définir table_definition_cache basé sur table_open_cache Taille. (oui, je sais, le lien est pour la version 5.7, mais dans la version 5.5 doc il n'y a aucune mention de la formule), donc vous devez d'abord définir la taille de table_open_cache, c'est la raison pour laquelle je donne le lien ci-dessus.

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_table_definition_cache

Ensuite, vous devez surveiller l'état de COM_STMT_REPREPARE et Open_table_definitions pour voir ce qui se passe sur le serveur. Si vous avez des applications qui utilisent prepared statements et recevoir le message error code [1615]Prepared statement needs to be re-prepared, est un signal que MySQL vide les tables de définition mises en cache. ( https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html#error_er_need_reprepare =)

Enfin: des informations sur les raisons pour lesquelles MySQL est réparé stmt

https://dev.mysql.com/doc/refman/5.5/en/statement-repreparation.html

6
Cepxio

Opened_tables est inutile sans Uptime. Quel est le quotient de ceux-ci? Je recommande de le garder sous 2 par seconde.

1
Rick James