Ich finde , was der beste Weg ist, um die Größe einer Tabelle zu schätzen, für die ich viele Blogs und Foren studiert habe, aber keine genaue Antwort finden kann
Als Beispiel haben wir eine Tabelle City mit InnoDB-Engine . Nehmen wir an, dass in Zukunft (in einem Jahr) eine Million Datensätze vorhanden sein werden. Wie hoch ist also die geschätzte Daten- und Indexgröße dieser Tabelle in diesem Zeitraum?
mysql> desc City;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.03 sec)
AKTUALISIEREN
Wie hoch wird die geschätzte Obergrenze (maximale Größe der Tabelle) mit 1 Million Datensätzen sein und wie können wir sie schätzen?
Antworten:
Angesichts der Tabellenbeschreibung verstehe ich
Bei einer Million Zeilen wären das 77.000.000 Bytes (73,43 MB).
Zum Messen der Tabelle können Sie für eine gegebene Tabelle mydb.mytable diese Abfrage ausführen
Zum Messen aller nach Datenbank und Speicher-Engine gruppierten Tabellen
Wenn Sie diese Abfragen ausführen, können Sie Änderungen in der Datenbank- / Engine-Datenträgerverwendung nachverfolgen.
Versuche es !!!
quelle
CHAR
Längen müssen mit 3 multipliziert werden, wenn Sie habenCHARSET utf8
. Der gesamte Aufwand kann geschätzt werden, indem die Berechnung verdoppelt oder verdreifacht wird.ALTER TABLE ... ENGINE=InnoDB;
) ausführen , um ein genaues Verhältnis zu erhalten. Anstrengung kann es nicht wert sein.Wenn Sie InnoDB-Tabellen verwenden, können Sie die Größe für Daten / einzelne Indizes von abrufen
mysql.innodb_index_stats
. Die Größenangabe enthält die Antwort in Seiten. Sie müssen sie daher mit der Seitengröße multiplizieren, die standardmäßig 16 KB beträgt .Der Index PRIMARY sind die Daten selbst.
quelle
Durch Ausführen dieser Abfrage können Sie die Größe für
Data
undIndex
einer Tabelle ermitteln. Sie können diese Größe anhand der Anzahl der Zeilen überprüfen und für 1 Million Zeilen vorhersagenquelle
Wenn Sie noch keine Daten haben, finden Sie hier einige Tipps. Für InnoDB gilt Folgendes. (MyISAM ist viel einfacher und kleiner.)
Nicht
CHAR
für Spalten mit variabler Länge verwenden. Was benutztCHARACTER SET
du? ASCII benötigt ein Byte pro Zeichen; utf8mb4 benötigt zwischen 1 und 4.Gesamt = ungefähr 80 Bytes.
Multiplizieren Sie die 80 mit 2 bis 3, um verschiedene Gemeinkosten zu berücksichtigen. Höchstwahrscheinlich liegt die 1-MB-Zeilentabelle zwischen 160 MB und 240 MB.
So messen Sie einen einzelnen Index
CountryCode
von beispielsweise 3 Byte:Anmerkungen:
Es müssen nur die Blattknoten (von BTrees) berechnet werden. Der Overhead für die Nicht-Blatt-Knoten beträgt in der Regel 1%.
Die
PRIMARY KEY
Daten werden mit den Daten "geclustert", sodass sie nicht berechnet werden müssen.Wenn Sie keine explizite PK haben, müssen Sie der Zeilengröße 6 Byte hinzufügen, um die hergestellte PK zu berücksichtigen.
ROW_FORMAT = COMPRESSED
ergibt eine Schrumpfung von ca. 2: 1. (Dies ist nicht so gut wie die typische Komprimierungsrate für Reißverschlüsse (usw.) von 3: 1.)SHOW TABLE STATUS LIKE "tablename";
ist der schnelle Weg, um die 'tatsächliche' Größe zu berechnen. SieheData_length
für Daten und PK;Index_length
für sekundäre Indizes undData_free
für einige andere Sachen.Es ist selten
Index_length
zu übertreffenData_length
. Es ist jedoch nicht "falsch", dass dies geschieht.quelle
Es ist langweilig. Aber die Details sind in den Dokumenten .
Um so genau wie möglich zu sein, was selten notwendig ist, müssen Sie auch die Tabellenstruktur und die Indexstruktur lesen.
Wenn ich in Ihren Schuhen stecke, würde ich die Tabelle erstellen, sie mit einer Million Zeilen Testdaten füllen und die Größenänderung messen. Abhängig von Ihrer Anwendung müssen Sie möglicherweise auch die Größe der Transaktionsprotokolldateien berücksichtigen.
quelle