Problem:
Gibt es eine Möglichkeit, die Anzahl der von der Tabellenerstellung belegten Bytes zu berechnen? Ich weiß, dass Sie einige Informationen aus information_schema.tables abrufen können, diese Informationen jedoch nicht genau genug sind.
Was tatsächlich benötigt wird, ist die Anzahl der Bytes gemäß der Definition der Tabelle nur für innodb, und die Kollatierung könnte auch als utf-8-general-ci betrachtet werden
Zum Beispiel ist ein Tabellentest wie folgt
Tabellentest erstellen
(
col1 varchar (25),
col2 int,
col3 varchar (3),
col4 char (15),
col5 datetime
);
Jetzt müsste die Gesamtzeilengröße bekannt sein, die in einer Zeile entsprechend den Spaltentypen in der Tabelle akkumuliert werden kann.
Ich habe eine ähnliche Lösung in MSSQL gefunden, benötige aber die MySQL-Version
Skript zum Schätzen der Zeilengröße für jede Tabelle
Jede Hilfe wird sehr geschätzt.
quelle
Antworten:
Nach langem Nachdenken und Nachforschen fand man eine Antwort, die wirklich dazu beitrug, das zu erreichen, was erforderlich war. Es ist ein Perl-Skript und Referenzlink ist
http://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html
Vielen Dank für die großartige Hilfe.
quelle
Sie müssen die Größe jedes Felds in Bytes gemäß dem Datentyp kennen ( MySQL-Referenz hier ) und diese Werte dann zusammenfassen.
quelle
Schritt 1:
20 englische Zeichen: 2 + 1 * 20
20 nahöstliche / slawische Zeichen: 2 + 2 * 20
20 asiatische Zeichen: 2 + 3 * 20
20 Emoji-Zeichen: 2 + 4 * 20 (und Sie benötigen
utf8mb4
)Schritt 2: Addieren Sie diese.
Schritt 3: Multiplizieren Sie mit 2 bis 3, um den InnoDB-Overhead zu berücksichtigen. Ich habe festgestellt, dass dieser Faktor normalerweise funktioniert. (Aber nicht für winzige Tabellen und nicht unbedingt gut für partitionierte Tabellen.)
Ich sehe keinen Grund, die maximale Größe jeder Spalte anzunehmen.
Sie können näher als
SHOW TABLE STATUS
oder die entsprechendeninformation_schema
Daten kommen:Schritt 1:
SELECT COUNT(*)
- uns dies anstelle vonRows
Schritt 2: Holen Sie sich
Data_length + Index_length + Data_free
Schritt 3: Teilen.
quelle
SELECT AVG(LENGTH(varchar_col))
- Hinweis:LENGTH
ist bereits Bytes ; Keine Notwendigkeit, mit 2/3/4 zu multiplizieren. (CHAR_LENGTH
Erhält die Länge in Zeichen.)Ich habe ein grobes Bash-Skript erstellt, um die Zeilengröße zu berechnen und zu warnen, wenn das auf dem Schema basierende Limit überschritten wird:
.
quelle
Es gibt bereits einige Fragen dieses Typs, zum Beispiel diese: Wie man die Datengröße und die Indexgröße einer Tabelle in MySQL schätzt / vorhersagt
Ein Unterschied zwischen dieser Frage und Ihrer Tabelle ist das Vorhandensein von Zeichenfolgen variabler Länge in Ihrer - denken Sie daran, die maximale Größe zu berücksichtigen, die sie haben können.
Denken Sie auch daran, dass ab Version 5
varchar(25)
bis zu 25 Zeichen und nicht mehr als 25 Byte vorhanden sind. Wenn Sie also wahrscheinlich Nicht-ASCII-Zeichen in Ihren Zeichenfolgen sehen, kann die Spaltengröße maximal 100 Byte betragen, da einige Zeichen vier Byte benötigen zu repräsentieren - zum Beispiel "Haufen von Poo Emoji" (was, ich scherze nicht, existiert - wenn Ihr aktueller Browser + Schriftart es unterstützt, sieht es so aus: 💩) ist 0xF0 0x9F 0x92 0xA9. Vor v5 zählte mySQL bei der Angabe der Länge des Zeichenfolgentyps Bytes und keine Zeichen.Bearbeiten bezüglich Automatisierung
Um den Prozess zu automatisieren, sollten Sie in der Lage sein, alle erforderlichen Informationen aus den
INFORMATION_SCHEMA
Tabellen auf ähnliche Weise wie das für MS SQL Server gefundene Skript abzuleiten . Unter https://dev.mysql.com/doc/refman/5.0/en/information-schema.html finden Sie eine Dokumentation dazu.quelle
INFORMATION_SCHEMA
Tabellen sollten die benötigten Informationen enthalten. Eine Dokumentation dazu finden Sie unter dev.mysql.com/doc/refman/5.0/de/information-schema.html .