Beispiel zur Erläuterung der Größe einer MySQL-Statistiktabelle

Beispiel zur Erläuterung der Größe einer MySQL-Statistiktabelle

Das Zählen der Größe jeder Tabelle in jeder Datenbank ist eine der einfachsten Anforderungen der Datenverwaltung. In diesem Artikel wird das Datenvolumen jeder Datenbank und Tabelle in MySQL unter zwei Gesichtspunkten gezählt: Stichproben-Statistikergebnisse und präzise Statistikergebnisse.

1. Statistische Schätzung des Datenvolumens

Das information_schema der MySQL-Datenwörterbuchbibliothek zeichnet die geschätzte Datenmenge (ungenau für Tabellen der InnoDB-Engine, genau für Tabellen der MyISAM-Engine) und Informationen wie Datengröße, Indexgröße und Tabellenfragmentgröße auf.

Wenn Sie das ungefähre Datenvolumen jeder Datenbank und Tabelle wissen möchten, können Sie information_schema.tables direkt nach Statistiken abfragen. Zum Beispiel:

SELECT Tabellenschema, Tabellenname, Tabellenzeilen, Datenlänge + Indexlänge + freie Daten Datengröße
 VON information_schema.`TABELLEN` WO table_schema IN ('db1','db2');

Die Einheit von data_size ist B

Wie oben erwähnt, basieren die Anzahl und Größe der Datenelemente in den statistischen Informationen auf den Stichprobenstatistiken eines Teils der Daten und können von der tatsächlichen Größe abweichen. Je größer die Tabelle, desto offensichtlicher ist der Unterschied. Wenn Sie die tatsächliche Situation jeder Tabelle erfahren möchten, müssen Sie die folgenden Methoden verwenden.

2. Zählen Sie die tatsächliche Datenmenge

Wenn Sie die tatsächliche Größe jeder Tabelle ermitteln möchten, müssen Sie jede Tabelle durchlaufen und die Anzahl der Datensätze berechnen. Sie können die Größe jeder Tabelle überprüfen, indem Sie die Größe des Tabellenbereichs überprüfen (jede Tabelle verfügt über einen unabhängigen Tabellenbereich). Das Ziel genauer Statistiken kann durch Befolgen der folgenden Schritte erreicht werden.

Pfade erstellen

Erstellen Sie ein Arbeitsverzeichnis zum Speichern von Skripten, temporären Dateien usw.

mkdir -p /usr/local/Datengröße

Erstellen einer Statistikdatenbank und -tabelle

Erstellen Sie eine Statistikdatenbank auf der Datenbankinstanz, die Statistiken benötigt.

SQL> Datenbank bak_db erstellen;

Erstellen einer gespeicherten Prozedur für Statistiken

SQL> verwende bak_db;
SQL>PROZEDUR ERSTELLEN `p_db_size`()
BEGINNEN
Erklären Sie v_id INT;
Erklären Sie, dass v_maxid INT;
DECLARE v_tbname VARCHAR(50);
DECLARE v_dbname VARCHAR(50);
DECLARE v_sql_upd VARCHAR(200);
Setzen Sie v_id = (SELECT MIN(id) FROM bak_db.tb_size);
SETZEN Sie v_maxid = (SELECT MAX(id) FROM bak_db.tb_size);
WHILE v_id <= v_maxid
TUN
SETZEN Sie v_tbname = (SELECT tbname FROM bak_db.tb_size WHERE id=v_id);
SETZEN Sie v_dbname = (SELECT dbname FROM bak_db.tb_size WHERE id=v_id);
SET v_sql_upd = CONCAT('update bak_db.tb_size set tb_rows=(select count(*) from ',v_dbname,".",v_tbname,") where id=",v_id);
  SET @v_sql_upd := v_sql_upd;
  Anweisung VORBEREITEN VON @v_sql_upd;
  Anweisung AUSFÜHREN;
  DEALLOCATE PREPARE-Anweisung;
  SETZEN Sie v_id = v_id +1;
ENDE WÄHREND;
  ENDE;

Erstellen eines Skripts

vim-Daten.sh
/* Fügen Sie den folgenden Inhalt ein */

#!/bin/bash
cd /usr/local/Datengröße
du -s /data/mysql/mysql3306/data/db1/* |grep -v ".frm" |grep -v ".opt" >/usr/local/Datengröße/Datengröße     
du -s /data/mysql/mysql3306/data/db2/* |grep -v ".frm" |grep -v ".opt">>/usr/local/Datengröße/Datengröße

# Die nächsten 4 Schritte sind das Spleißen in SQL 
awk '{print "insert into bak_db.tb_size(size,tb_route)values("""$0}' /usr/local/data_size/data_size >/usr/local/data_size/data_size1  
awk '{print $0";"}' /usr/local/Datengröße/Datengröße1 >/usr/local/Datengröße/Datengröße.sql
sed -i "s#\t#,'#g" /usr/local/Datengröße/Datengröße.sql
sed -i "s#;#');#g" /usr/local/Datengröße/Datengröße.sql

# Erstellen Sie eine Statistiktabelle /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "Tabelle löschen, falls vorhanden bak_db.tb_size; TABELLE ERSTELLEN, WENN bak_db.tb_size NICHT VORHANDEN IST (id INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,size INT,tb_route VARCHAR(200),tbname VARCHAR(50),dbname VARCHAR(50),tb_rows INT(11));" 

# Daten importieren /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;truncate table bak_db.tb_size;source /usr/local/data_size/data_size.sql;"

# Bibliotheksnamen und Tabellennamen generieren. Dieser Schritt kann natürlich auch aus dem Datenfeld abgerufen werden. /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;UPDATE bak_db.tb_size SET tbname=REPLACE(SUBSTRING_INDEX(tb_route,'/',-1),'.ibd','');"
 /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "UPDATE bak_db.tb_size SET dbname=LEFT (SUBSTRING_INDEX(tb_route,'/',-2),INSTR(SUBSTRING_INDEX(tb_route,'/',-2),'/')-1);"
sleep 10 # Wenn sich die vorherigen Schritte in der Master-Datenbank befinden, wird empfohlen, eine Weile anzuhalten, um zu vermeiden, dass die Tabelle und der Inhalt beim späteren Ausführen von Statistiken nicht abgerufen werden können. Wenn sich die vorherigen Schritte in der Slave-Datenbank befinden, kann dieser Schritt weggelassen werden echo 'Aufrufprozedur starten' 
# Rufen Sie die gespeicherte Prozedur auf, um die Anzahl der Datensätze in jeder Tabelle zu zählen /usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.132 -e "use bak_db;call bak_db.p_db_size();"

# Exportieren Sie die Tabelle und die Daten /usr/local/mysql5.7/bin/mysqldump -uroot -p'Test#123456' -h 192.168.28.132 --single-transaction bak_db tb_size >/usr/local/data_size/tb_size.sql

# Tabelle und Ergebnisse in die Master-Datenbank importieren (die Slave-Datenbank entspricht einmaligem Löschen und Neuaufbau)
/usr/local/mysql5.7/bin/mysql -uroot -p'Test#123456' -h 192.168.28.128 -e "verwende bak_db;Quelle /usr/local/data_size/tb_size.sql;"

Die Ergebnisse sind wie folgt:

Es ist ersichtlich, dass der genaue Wert stark von dem Wert in den statistischen Informationen abweicht. Je größer die Tabelle ist, desto deutlicher ist der Unterschied.

TIPPS: Das präzise Statistikskript in diesem Artikel bietet noch viel Raum für Optimierungen. Es wurde in Eile geschrieben. Sie können es nach Bedarf anpassen. Mein Niveau ist begrenzt, also korrigieren Sie mich gerne. Wenn Sie Fragen haben, können Sie sich gerne an mich wenden.

Das Obige ist ein Beispiel, das die Details der Größe der MySQL-Statistikbibliothekstabelle erläutert. Weitere Informationen zur Größe der MySQL-Statistikbibliothekstabelle finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Übersicht über MySQL-Statistiken
  • Ein kleines Shell-Skript zum genauen Zählen der Zeilenanzahl in jeder MySQL-Tabelle
  • MySQL implementiert Multi-Table-Assoziationsstatistiken (Unterabfragestatistiken) Beispiel
  • Python implementiert Mysql-Datenstatistiken und Numpy-Statistikfunktionen
  • SQLServer/MySQL-Statistiken kontinuierlicher Zeitdaten nach Tag, Stunde, Minute [empfohlen]
  • Detaillierte Erläuterung von MySQL zum Abrufen statistischer Daten für jeden Tag und jede Stunde eines bestimmten Zeitraums
  • PHP+MySQL, um innerhalb eines bestimmten Zeitraums ein Beispiel für eine tägliche Datenstatistikoptimierung zu erreichen
  • PHP-Code für Werbeklickstatistiken (php+mysql)
  • Gründe, warum MySQL 8.0-Statistiken ungenau sind

<<:  Eine kurze Analyse des Zustandsverständnisses von React

>>:  Detaillierte Erläuterung zur Verwendung von Docker zum Bereitstellen der Django + MySQL8-Entwicklungsumgebung

Artikel empfehlen

Ein zeitaufwändiger Fehlerbehebungsprozess für einen Docker-Fehler

Inhaltsverzeichnis Herkunft Umweltinformationen F...

Eine detaillierte Erklärung der subtilen Unterschiede zwischen Readonly und Disabled

Sowohl die Optionen „Nur lesen“ als auch „Deaktivi...

Einige etwas komplexere Verwendungsbeispielcodes in MySQL

Vorwort Ich glaube, dass die Syntax von MySQL nic...

Natives JS realisiert zusammengesetzte Bewegungen verschiedener Bewegungen

In diesem Artikel erfahren Sie mehr über eine zus...

Implementierung der Parametersprungfunktion im Vue-Projekt

Seitenbeschreibung:​ Hauptseite: Name —> shish...

VUE Erste Schritte Erlernen der Ereignisbehandlung

Inhaltsverzeichnis 1. Funktionsbindung 2. Mit Par...

Detaillierte Erläuterung der Verwendung des gcc-Befehls unter Linux

Inhaltsverzeichnis 1. Vorverarbeitung 2. Zusammen...

Ausführliche Erklärung zur Docker-Maschine

Unterschiede zwischen Docker und Docker Machine D...

Beispielcode zum Vergleich verschiedener Syntaxformate von vue3

Die Standardvorlagenmethode ähnelt vue2 und verwe...

Linux-Grundlagen-Tutorial: Sonderberechtigungen SUID, SGID und SBIT

Vorwort Für Datei- oder Verzeichnisberechtigungen...