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:
|
<<: Eine kurze Analyse des Zustandsverständnisses von React
Inhaltsverzeichnis Herkunft Umweltinformationen F...
Sowohl die Optionen „Nur lesen“ als auch „Deaktivi...
Vorwort Ich glaube, dass die Syntax von MySQL nic...
In diesem Artikel erfahren Sie mehr über eine zus...
Seitenbeschreibung: Hauptseite: Name —> shish...
Inhaltsverzeichnis 1. Funktionsbindung 2. Mit Par...
Inhaltsverzeichnis 1. Vorverarbeitung 2. Zusammen...
Unterschiede zwischen Docker und Docker Machine D...
Die Standardvorlagenmethode ähnelt vue2 und verwe...
Frage Nicht genügend Speicher, wenn Docker Elasti...
Vorwort Die Benachrichtigungsleistenkomponente is...
Wie unten dargestellt: nsenter -t 1 -m -u -n -i s...
Ich habe vor Kurzem eine Reihe statistischer Funk...
Pessimistische Sperre Pessimistische Sperre, betr...
Vorwort Für Datei- oder Verzeichnisberechtigungen...