当前位置:网站首页>MySQL information Schema Learning (i) - - General table

MySQL information Schema Learning (i) - - General table

2022-07-06 19:27:00 Dark Night Hunter - Big Magic

       Parfois, il y a des besoins,Par exemple, pour voir les champs d'une condition particulière dans une base de données statistique,Il y avait un tableau stupide pour analyser les statistiques,En fait...information schemaOffre une fonctionnalité très puissante,Peut être étudié. 

Références,Documents du site officiel:

MySQL :: MySQL 5.7 Reference Manual :: 24 INFORMATION_SCHEMA Tableshttps://dev.mysql.com/doc/refman/5.7/en/information-schema.htmlinformation schemaQu'y a - t - il dedans?,Lisez la description du document:

  INFORMATION_SCHEMAFournir une paire de bases de données Métadonnées、Concernant MySQL Informations sur le serveur( Par exemple, le nom de la base de données ou de la table 、 Type de données ou accès à la colonne )Visites.information La table à l'intérieur est la vue , Aucun fichier de données :INFORMATION_SCHEMAC'est chacun. MySQL Une base de données dans l'Instance , Cet emplacement stocke des informations sur MySQL Informations sur toutes les autres bases de données tenues à jour par le serveur .Le INFORMATION_SCHEMA La base de données contient plusieurs tableaux en lecture seule .Ce sont en fait des vues, Au lieu de la table de base , Il n'y a donc pas de fichiers associés à eux , Et les déclencheurs ne peuvent pas être réglés sur eux .En outre, Il n'y a pas de répertoire de base de données avec ce nom .

En grosschemaQuels sont les tableaux ci - dessous:

Il s'agit principalement des permissions de métadonnées de la base de données , Variables et une grande partie INNODB Tables liées au moteur de stockage .

Apprenez principalement les tableaux couramment utilisés

1. TABLES

TABLESInformations sur le tableau

 tables Le tableau décrit principalement les métadonnées d'une table de base de données , Vous pouvez obtenir des informations sur le tableau , Nombre de lignes, par exemple ,Espace occupé, etc..

Les principaux champs sont les suivants:

  • TABLE_CATALOG  Nom du répertoire auquel appartient le tableau . La valeur est toujours def.

  • TABLE_SCHEMA  Schéma auquel appartient le tableau (Base de données)Nom de.

  • TABLE_NAME Nom du tableau.

  • TABLE_TYPE BASE TABLE/SYSTEM VIEW

  • ENGINE Moteur de stockage des tables.Pour les tables partitionnées,ENGINE Affiche le nom du moteur de stockage utilisé par toutes les partitions .

  • VERSION .frm Table file Numéro de version.

  • ROW_FORMAT  Format de stockage de ligne ( FixedDynamicCompressedRedundantCompact).

  • TABLE_ROWS Nombre de lignes.Certains moteurs de stockage,Par exemple MyISAM, Stocker le nombre exact .Pour les autres moteurs de stockage,Par exempleInnoDB, Cette valeur est approximative ,Peut différer de la valeur réelle 40% À 50%.Dans ce cas,,Veuillez utiliserSELECT COUNT(*) Pour obtenir un compte exact .

  • AVG_ROW_LENGTH  Président moyen .

  • DATA_LENGTH PourMyISAM,DATA_LENGTH  Est la longueur du fichier de données ,En octets.

    PourInnoDB,DATA_LENGTH  Est la quantité approximative d'espace allouée à l'index groupé ,En octets.Plus précisément,, C'est la taille de l'index groupé (En pages)Multiplié parInnoDBTaille de la page.

    Informations sur les autres moteurs de stockage , Voir les notes à la fin de cette section .

  • MAX_DATA_LENGTH PourMyISAMMAX_DATA_LENGTH Est la longueur maximale du fichier de données . Taille donnée du pointeur de données utilisé , C'est le nombre total d'octets de données qui peuvent être stockés dans le tableau .

  • INDEX_LENGTH PourMyISAM,INDEX_LENGTH  Est la longueur du fichier index ,En octets.

    PourInnoDB,INDEX_LENGTH  Est la quantité approximative d'espace allouée à l'index non groupé ,En octets.Plus précisément,, C'est la somme de la taille de l'index non groupé (En pages)Multiplié par InnoDBTaille de la page

  • AUTO_INCREMENT Suivant.AUTO_INCREMENTValeur

  • CREATE_TIME  Temps de création de la table

  • TABLE_COMMENT  Commentaires utilisés lors de la création du tableau

Selondata_length+index_length Vous pouvez compter approximativement la taille de l'espace occupé par la table .

Par exemple, comptez la taille de l'espace de toutes les tables

SELECT TABLE_NAME, sum(DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024 as size FROM information_schema.`TABLES` GROUP BY TABLE_NAME ORDER BY size desc;

2.COLUMNS

COLUMNS Colonnes dans chaque tableau

  Fournir des renseignements sur les colonnes du tableau . Avec les colonnes suivantes :

  • TABLE_CATALOG  Nom du répertoire auquel appartient le tableau contenant cette colonne . La valeur est toujours def.

  • TABLE_SCHEMA  Schéma auquel appartient le tableau contenant cette colonne (Base de données)Nom de.

  • TABLE_NAME  Nom du tableau contenant la colonne .

  • COLUMN_NAME Nom de la colonne.

  • ORDINAL_POSITION  Position indiquée dans le tableau . 

  • COLUMN_DEFAULT Valeurs par défaut pour les colonnes.C'est NULL Si la colonne a une valeur par défaut explicite NULL, Ou la définition de colonne ne contient pas DEFAULTClause.

  • IS_NULLABLE  Colonne vide .La valeur estYESEst - ce que NULL Vous pouvez stocker les valeurs dans les colonnes , NOSi ce n'est pas le cas,.

  • DATA_TYPE Type de données de colonne.

  • CHARACTER_MAXIMUM_LENGTH  Pour les colonnes de chaînes de caractères , Longueur maximale en caractères .

  • CHARACTER_OCTET_LENGTH  Pour les colonnes de chaînes de caractères ,Longueur maximale(En octets).

  • NUMERIC_PRECISION Pour les colonnes numériques,Précision numérique.

  • NUMERIC_SCALE  Pour les colonnes numériques , Échelle numérique .

  • DATETIME_PRECISION  Pour la colonne temps , Précision décimale - seconde .

  • CHARACTER_SET_NAME  Pour les colonnes de chaînes de caractères ,Nom du jeu de caractères.

  • COLLATION_NAME  Pour les colonnes de chaînes de caractères , Nom de la collation .

  • COLUMN_TYPE COLUMN_TYPE  La valeur contient le nom du type et éventuellement d'autres informations , Par exemple, précision ou longueur .

  • COLUMN_KEY  Colonne indexée :

    • SiCOLUMN_KEYVide, La colonne n'est pas indexée , Ou seulement en colonnes multiples 、 La colonne auxiliaire de l'index non unique est indexée .

    • SiCOLUMN_KEY- Oui. PRI,La colonne estPRIMARY KEYOu Est l'une des nombreuses colonnes PRIMARY KEY.

    • SiCOLUMN_KEY- Oui. UNI,La colonne estUNIQUEPremière colonne de l'index.( UNIQUE Plusieurs index sont autorisés  NULLValeur, Mais vous pouvez NULLPar inspection Null Colonne pour déterminer si la colonne permet .)

    • SiCOLUMN_KEY- Oui. MUL,Cette colonne est la première colonne d'un index non unique, Où la valeur donnée peut apparaître plus d'une fois dans la colonne .

  • PRIVILEGES  Vos permissions sur cette colonne .

  • COLUMN_COMMENT  Tout commentaire contenu dans la définition de colonne .

Adoptioncolumns Les tableaux peuvent être produits en vrac DDLDéclarations, etc.. Par exemple, la longueur du champ de chaîne pour toutes les tables sous la base de données 40Extension à60 Vous pouvez interrogercolumn_type=varchar(40) Quelles colonnes y a - t - il? , Puis il est généré par lots ddl sql.

3.PARTITIONS

PARTITIONS Informations sur la partition de la table

Données stockées sur une table partitionnée ,Champ principal:

  • PARTITION_NAME  Nom de la partition.

  • PARTITION_METHOD  ValeurRANGELISTHASHLINEAR HASHKEY, Ou LINEAR KEY;

  • TABLE_ROWS  Nombre de lignes de tableau dans la partition . Vous pouvez compter approximativement le nombre de lignes d'une table partitionnée

4.PROCESSLIST

PROCESSLIST Informations sur le thread d'exécution actuel

show processlist; Vous pouvez voir les connexions actives à la base de données actuelle ,Thread, etc., Souvent utilisé pour voir l'état actuel de fonctionnement de la base de données .

MySQL La liste des processus indique les actions actuellement effectuées par les ensembles de Threads qui sont exécutés dans le serveur .

Colonne centrale :

  • ID Identifiant de connexion. Peut être utiliséKILL  Instruction Kill thread .

  • USER  De la Déclaration MySQL Utilisateurs.

  • HOST  Nom d'hôte du client qui a émis l'instruction

  • DB Base de données par défaut pour les Threads,Ou NULLSi vous n'avez pas le choix.

  • COMMAND  Le thread représente le type de commande exécutée par le client ,OuSleep La session est - elle libre? .

  • TIME  Temps pendant lequel le thread est dans l'état actuel (En secondes).

  • STATE  Action indiquant ce que fait le thread 、 Événement ou état . La plupart des états correspondent à des opérations très rapides . Si un thread reste dans un état donné pendant quelques secondes , Il peut y avoir des problèmes qui nécessitent une enquête .

  • INFO L'instruction que le thread exécute,Ou NULL S'il n'exécute aucune instruction . Si l'instruction exécute une autre instruction , Il peut s'agir d'une instruction envoyée au serveur , Ou les déclarations les plus intimes .Par exemple,SiCALL Exécution de l'instruction en cours  SELECTProcédures stockées pour les déclarations,Alors... INFO La valeur affiche ceci  SELECTDéclarations.

Ne dis rien., Chaque champ ici est souvent utilisé ,Apprenez ici.commandEtSTATEStatut,

COMMAND Les valeurs sont les suivantes: :

Un thread peut avoir l'un des éléments suivants  CommandValeur:

  • Binlog Dump  C'est un thread sur la source de réplication , Pour envoyer le contenu du Journal binaire à la réplique .

  • Change user  Le thread effectue une action de changement d'utilisateur .

  • Close stmt  Le thread ferme l'instruction préparée .

  • Connect  Copie connectée à sa source .

  • Connect Out  Copie connectée à sa source .

  • Create DB  Thread effectue une opération de création de base de données .

  • Daemon  Le thread est à l'intérieur du serveur , Au lieu d'un thread qui sert une connexion client .

  • Debug  Le thread génère des informations de débogage .

  • Delayed insert  Le thread est un gestionnaire d'insertion de latence .

  • Drop DB  Le thread effectue une opération de suppression de base de données .

  • Error

  • Execute  Le thread exécute l'instruction préparée .

  • Fetch  Le thread récupère les résultats de l'exécution de l'instruction préparée .

  • Field List  Le thread récupère des informations pour une colonne de tableau .

  • Init DB  Le thread sélectionne une base de données par défaut .

  • Kill  Ce thread tue un autre thread .

  • Long Data  Le thread récupère de longues données à partir des résultats de l'exécution de l'instruction préparée .

  • Ping  Le thread traite le serveur ping Demande.

  • Prepare  Le thread prépare une déclaration préparée .

  • Processlist  Le thread génère des informations sur le thread serveur .

  • Query  Le thread exécute une instruction .

  • Quit  Fin du thread .

  • Refresh  Le thread rafraîchit la table 、 Log ou cache , Ou réinitialiser la variable d'état ou copier les informations du serveur .

  • Register Slave  Le thread enregistre le serveur de répliques .

  • Reset stmt  Le thread Réinitialise les déclarations préparées .

  • Set option  Le thread définit ou Réinitialise les options d'exécution de l'instruction client .

  • Shutdown  Le thread ferme le serveur .

  • Sleep  Le thread attend que le client lui envoie une nouvelle déclaration .

  • Statistics  Le thread génère des informations sur l'état du serveur .

STATE Le statut est principalement le suivant: :

  • After create  Lorsque le thread crée une table à la fin de la fonction qui la crée ( Y compris les tableaux temporaires internes )Heure,Ça arrive.. Même si le tableau n'a pas pu être créé en raison de certaines erreurs , Cet état est également utilisé .

  • altering table  Le serveur exécute en place  ALTER TABLE.

  • checking permissions  Le thread vérifie si le serveur a les permissions nécessaires pour exécuter l'instruction .
  • Checking table  Le thread effectue une opération de vérification de table .

  • cleaning up  Le thread a traité une commande et est prêt à libérer la mémoire et à réinitialiser certaines variables d'état .

  • closing tables  Le thread rafraîchit les données de table modifiées sur le disque et ferme les tables utilisées . Ça devrait être une opération rapide .Si ce n'est pas le cas, Assurez - vous que vous n'avez pas de disque complet et qu'il n'est pas très utilisé .

  • converting HEAP to ondisk  Le thread est en train de déplacer la table temporaire interne de  MEMORY Table convertie en table de disque .

  • copy to tmp table Le thread travaille sur unALTER TABLEDéclarations. Cet état se produit après la création d'une table avec une nouvelle structure, mais avant que les lignes ne soient copiées . Pour les fils dans cet état ,Peut être utilisé Performance Schema Pour obtenir des informations sur l'état d'avancement de l'opération de réplication .

  • Copying to group table  Si l'énoncé est différent ORDER BYDe GROUP BYConditions, Les lignes sont triées par groupe et copiées dans le tableau temporaire .

  • Copying to tmp table  Le serveur copie des tables temporaires en mémoire .

  • Copying to tmp table on disk  Le serveur copie des tables temporaires sur le disque . L'ensemble de résultats temporaires devient trop grand .Donc,, Thread change les tables temporaires de la mémoire au format disque pour économiser la mémoire .

  • Creating index  Le thread est en cours de traitement ALTER TABLE ... ENABLE KEYSUnMyISAMTableau.

  • Creating sort index  Le thread est en cours de traitement  SELECT Résolu à l'aide d'un tableau temporaire interne a.

  • creating table  Le thread crée une table . Cela comprend la création de tables temporaires .

  • Creating tmp table  Le thread crée une table temporaire sur la mémoire ou le disque . Si la table a été créée en mémoire , Mais ensuite converti en table de disque , L'état pendant cette opération est Copying to tmp table on disk.

  • committing alter table to storage engine  Serveur terminé en place  ALTER TABLE Et soumettre les résultats .

  • deleting from main table Le serveur exécute la première partie de la suppression Multi - tables. Il n'est supprimé que du premier tableau ,Et sauvegardé pour(RÉFÉRENCES) Colonnes et décalages supprimés du tableau .

  • deleting from reference tables Le serveur exécute la deuxième partie de la suppression Multi - tables,Et supprimer les lignes correspondantes des autres tableaux.

  • discard_or_import_tablespace  Le thread est en cours de traitement ALTER TABLE ... DISCARD TABLESPACEorALTER TABLE ... IMPORT TABLESPACEDéclarations.

  • end  C'est arrivé à la fin. ,Mais en train de nettoyer ALTER TABLECREATE VIEWDELETEINSERTSELECT, or UPDATEAvant la Déclaration.PourendStatut,Les actions suivantes peuvent se produire::

    • Supprimer l'entrée du cache de requête après avoir modifié les données dans le tableau

    • Écrire des événements dans le journal binaire

    • Libérer le tampon mémoire,Y compris: blob

  • executing  Le thread a commencé à exécuter l'instruction .

  • Execution of init_command Exécution du thread init_command Déclaration dans la valeur de la variable système .

  • freeing items  Commande exécutée par thread . Certaines des libérations d'éléments effectuées pendant cet état impliquent la mise en cache des requêtes . Cet état est généralement suivi cleaning up.

  • FULLTEXT initialization  Le serveur se prépare à effectuer une recherche plein texte en langage naturel .

  • init C'est arrivé à ALTER TABLEDELETEINSERTSELECT, or UPDATE Avant l'initialisation de l'instruction . Les actions prises par le serveur dans cet état incluent la mise à jour des journaux binaires 、InnoDBLog et quelques opérations de nettoyage de cache de requête.

  • Killed Quelqu'un.KILL  Une déclaration a été envoyée au thread , Il devrait être vérifié la prochaine fois kill Arrêt au drapeau .In MySQL Ce drapeau est vérifié à chaque cycle principal de ,Mais dans certains cas,, Le thread peut encore prendre très peu de temps pour se terminer . Si le thread est verrouillé par un autre thread , Se termine immédiatement après que les autres fils ont libéré leurs verrous .

  • logging slow query  Le thread écrit une instruction au Journal des requêtes lentes .

  • login  État initial du fil de connexion , Jusqu'à ce que le client soit authentifié avec succès .

  • manage keys  Le serveur active ou désactive l'index de table .

  • Opening tables  Le thread essaie d'ouvrir une table .Ça devrait être un processus très rapide, À moins que quelque chose ne l'empêche de s'ouvrir .Par exemple,UnALTER TABLEor LOCK TABLE L'instruction peut empêcher l'ouverture de la table ,Jusqu'à ce que la déclaration soit terminée.Vérifiez votretable_open_cache Ça en vaut la peine si la valeur est assez grande .

  • optimizing  Le serveur effectue une optimisation initiale pour la requête .

  • preparing  Cet état se produit lors de l'optimisation de la requête .

  • Purging old relay logs  Le thread supprime les fichiers journaux de relais indésirables .

  • query end  Cet état se produit après le traitement de la requête mais après  freeing itemsAvant le statut.

  • Receiving from client Le serveur lit les paquets du client.Ce statutReading from netIn MySQL 5.7.8 Précédemment appelé.

  • Removing duplicates  Utilisation des requêtes  SELECT DISTINCT Comment faire MySQL Impossible d'optimiser les différentes opérations à un stade précoce .Donc,,MySQL Une étape supplémentaire est nécessaire pour supprimer toutes les lignes dupliquées , Puis envoyez les résultats au client .

  • removing tmp table

    SELECT  Thread Processing statement   Suppression de la table temporaire interne après .Si aucune table temporaire n'a été créée,Cet état n'est pas utilisé.

  • rename  Le thread Renomme une table .

  • rename result table Le thread travaille sur unALTER TABLEDéclarations, Nouvelle table créée , Et le renommer pour remplacer le tableau original .

  • Reopen tables Le thread a obtenu le verrouillage de la table,Mais après avoir obtenu la serrure, remarquez que la structure de la surface sous - jacente a changé.Ça libère la serrure,La table est fermée,Et essayer de l'ouvrir à nouveau.

  • Repair by sorting  Le Code de réparation utilise le tri pour créer un index .

  • preparing for alter table  Le serveur se prépare à exécuter en place  ALTER TABLE.

  • Rolling back Le thread fait reculer la transaction.

  • Saving state PourMyISAM Opérations de table telles que la réparation ou l'analyse , Le thread enregistre le nouvel état de la table à .MYIEn - tête de fichier. L'état comprend le nombre de lignes 、 AUTO_INCREMENT Informations telles que la distribution des compteurs et des clés .

  • Searching rows for update  Le thread effectue la première étape pour trouver toutes les lignes correspondantes avant de les mettre à jour .Si UPDATE Modification de l'index utilisé pour trouver les lignes associées , C'est ce qu'il faut faire. .

  • Sending data  Le thread lit et traite  SELECTLigne de déclaration,Et envoyer les données au client.Parce que les actions qui se produisent pendant cet état ont tendance à effectuer un grand nombre d'accès au disque(Lire), C'est donc généralement l'état le plus long d'un cycle de vie de requête donné .

  • Sending to client  Le serveur écrit des paquets au client .Ce statutWriting to netIn MySQL 5.7.8 Précédemment appelé.

  • setup  Le thread commence un ALTER TABLEFonctionnement.

  • Sorting for group Le thread effectue un tri pour satisfaire a GROUP BY.

  • Sorting for order  Le thread effectue un tri pour satisfaire ORDER BY.

  • Sorting index MyISAM Le thread Trie les pages d'index , Pour optimiser l'opération sur la table   Un accès plus efficace pendant .

  • Sorting result PourSELECTDéclarations,C'est similaire àCreating sort index, Mais pour les tableaux non temporaires .

  • starting  Première étape de l'exécution de l'instruction .

  • statistics  Le serveur calcule les statistiques pour planifier l'exécution de la requête .Si un fil est dans cet état depuis longtemps, Le serveur peut effectuer d'autres travaux de liaison de disque .

  • System lock  Thread called mysql_lock_tables()  Et l'état du fil n'a pas été mis à jour depuis .C'est un état très général, Cela peut se produire pour plusieurs raisons . Par exemple, Le thread demandera ou attendra un verrouillage interne ou externe du système pour la table .InInnoDBMise en œuvre LOCK TABLES.  Si cet état est causé par une demande de verrouillage externe , Et vous n'avez pas utilisé plus d'un mysqldServeur,Vous pouvez utiliser ceci OptionsMyISAM  Désactiver le verrouillage externe du système .--skip-external-lockingMais, Le verrouillage externe est désactivé par défaut , Donc cette option n'a probablement aucun effet .Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).

  • update  Thread se prépare à mettre à jour la table .

  • Updating  Le thread recherche les lignes à mettre à jour et les met à jour .

  • updating main table Le serveur exécute la première partie d'une mise à jour multi - tables.Il ne met à jour que le premier tableau,Et enregistrer pour mettre à jour d'autres(RÉFÉRENCES)Colonnes et décalages du tableau.

  • updating reference tables Le serveur exécute la deuxième partie de la mise à jour multi - tables, Et mettre à jour les lignes correspondantes à partir d'autres tableaux .

  • User lock  Le thread demandera ou attend le verrou de consultation pour la demande d'appel  GET_LOCK().Pour SHOW PROFILE, Cet état signifie que le thread demande un verrouillage ( Ne l'attendez pas. ).

  • User sleep Le thread a appelé un SLEEP()Appelez.

  • Waiting for commit lock

    FLUSH TABLES WITH READ LOCK En attendant de soumettre le verrou.

  • Waiting for global read lock

    FLUSH TABLES WITH READ LOCK  En attente d'une lecture globale de la serrure ou  read_only Réglage des variables du système mondial .

  • Waiting for tables  Le thread a été informé que l'infrastructure d'un tableau a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .

  • Waiting for table flush Exécution du threadFLUSH TABLES Et en attendant que tous les Threads ferment leurs tables , Ou le thread est informé que la structure sous - jacente de la table a changé , Il faut rouvrir la table pour obtenir la nouvelle structure .Mais,Pour rouvrir la table, Il doit attendre que tous les autres Threads aient fermé la table en question .

  • Waiting for lock_type lock THR_LOCK Le serveur attend de verrouiller le Sous - système à partir des métadonnées  Accès Serrure ou serrure ,Parmi euxlock_type Indique le type de serrure .

    Cet état indique une attente a THR_LOCK

    • Waiting for table level lock

    Ces états indiquent attendre le verrouillage des métadonnées :

    • Waiting for event metadata lock

    • Waiting for global read lock

    • Waiting for schema metadata lock

    • Waiting for stored function metadata lock

    • Waiting for stored procedure metadata lock

    • Waiting for table metadata lock

    • Waiting for trigger metadata lock

    Vous pouvez obtenir l'état actuel du thread en attente de verrouillage ,En particulier la mise en œuvreDDLHeure,Besoin d'attention, Il est facile de ne pas libérer le lien parce que le verrou de métadonnées n'est pas disponible ,Crash de la base de données.

  • Waiting on cond  Le thread attend que la condition devienne un vrai état général . Aucune information spécifique sur l'état n'est disponible .

  • Writing to net  Le serveur écrit des paquets sur le réseau .De MySQL 5.7.8 C'est parti., Cet état est appelé Sending to client.

原网站

版权声明
本文为[Dark Night Hunter - Big Magic]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061131155097.html