Angenommen, ich habe eine MyISAM-Tabelle mit einer Datenlänge von 4,8 GB und einer Indexlänge von 6,2 GB. Also eine Gesamtdatengröße von elf Gig. Wie viel Speicher würde dies erfordern, wenn ich ihn in eine MEMORY
Tabelle konvertieren würde ? 11 Gig oder mehr?
7
SHOW CREATE TABLE
Ausgabe in Ihrer Frage posten ?Antworten:
Der genaue Speicherbedarf einer Zeile wird nach folgender Formel berechnet:
[src]
Ersetzen Sie also auf einem 64-Bit-Computer durch
sizeof(char*)
8.Sie können eine Schätzung der
length_of_row
aus dem Informationsschema erhalten:Dann addieren Sie alle Ihre BTREE-Schlüssel und dann die HASH-Schlüssel. Beachten Sie, dass es sich aus Platzgründen möglicherweise lohnt, Schlüssel in HASH zu konvertieren, da sie weniger Speicher benötigen.
Ich wollte die Begrenzung der maximalen Speichergröße erwähnen, die davon abhängt
max_heap_table_size
, aber gbn hat mich geschlagen.quelle
@gbn und @DTest lieferten bereits hervorragende Antworten zur Verwendung von MEMORY-Tabellen in Bezug auf Indizes und Größenbeschränkungen.
Hier ist noch eine andere Perspektive zu beachten:
Die MEMORY-Speicher-Engine
Obwohl Sie Daten im RAM haben, schlägt mysqld immer auf die .frm-Datei zu, um nach der als Referenzpunkt vorhandenen Tabelle zu suchen, wodurch immer eine kleine Festplatten-E / A entsteht. Proportional führt ein starker Zugriff auf eine MEMORY-Speicher-Engine-Tabelle zu spürbaren Festplatten-E / A.
Sie müssen auch daran denken, ein ausgewogenes Verhältnis zwischen der Verwendung von MEMORY-Tabellen und zu finden
quelle
Es kann keine MEMORY- Tabelle sein (selektives Anführungszeichen unten), wenn sie "max_heap_table_size" überschreitet . Dies sind maximal 4 GB für 32 Bit
Sie können dies pro Tabelle festlegen, indem Sie max_heap_table_size pro Sitzung festlegen.
Aber 12 GB oder so sind viel Speicher für eine Caching-Tabelle ...
quelle
max_heap_table_size
ist 4 GB für 32-Bit (und 16 Exabyte für 64-Bit).