Streng genommen zählt nur RAM?


4

Ich muss an einem Projekt arbeiten, das eine extragroße Tabelle mit Milliarden Datensätzen hätte, aber nur zwei Felder, eines ist id und ein anderes ist text.

Und id würde auf BIGINT und PK gesetzt werden, wenn 8 + 2 (zusätzliche 2 Bytes für Overhead) Bytes pro Zeile zum Indexieren herangezogen werden, dann sollten in meiner Berechnung 64 GB RAM ausreichen, um mindestens 5 Milliarden Datensätze zu indexieren.

Aber es ist der einzige Faktor, den ich in Betracht ziehe.

Denken Sie, dass es noch andere Faktoren gibt, die ich berücksichtigen sollte?

Bei Bedarf kann auch die RAM-Größe erhöht werden. Und diese Tabelle ist mit wenigen Schreibvorgängen und vielen Lesevorgängen die am stärksten ausgelastete Tabelle.

+1

Darf ich um ein bisschen mehr Information über dieses Projekt bitten?Wofür soll dieser Tisch verwendet werden?Welches Problem versuchen Sie zu lösen? 15 sep. 112011-09-15 07:14:14

3

Sie müssen die Speicher-Engine berücksichtigen, die Sie für Ihr Projekt verwenden, da MySQL für jede Speicher-Engine unterschiedlich zwischengespeichert wird.

MyISAM speichert nur Indexseiten.InnoDB speichert Daten und Indexseiten zwischen.

Angesichts der Tatsache, dass Sie eine Tabelle mit großen IDs haben, hoffe ich, dass Sie MyISAM verwenden.

Hier ist eine Abfrage, mit deren Hilfe Sie die beste key_buffer_size ermitteln können:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Dies gibt die empfohlene Einstellung für den MyISAM-Schlüsselcache (key_buffer_size) in Anbetracht Ihres aktuellen Datensatzes (the query will cap the recommendation at 4G (4096M). Für 32-Bit-Betriebssysteme sind 4 GB die Obergrenze.

UPDATE 2011-09-16 14:49 EDT

Wenn Sie InnoDB verwenden, hilft die Größenanpassung von key_buffer_size nicht.InnoDB and MyISAM cache differently .

Hier ist die gleiche Art von Abfrage, um die Größe Ihres InnoDB-Pufferpools zu bestimmen:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;
  0

Interessanterweise denke ich an InnoDB, weil es unter Last besser funktioniert.Also, was ich aus Ihrer Antwort gelernt habe, ist, dass es genug Schlüssel-Cache gibt.DB-Größe spielt keine Rolle? 16 sep. 112011-09-16 16:56:43

  0

Ich habe meine Antwort mit InnoDB auf die Adresse aktualisiert 16 sep. 112011-09-16 18:49:40

  0

Aber wie Sie bereits erwähnt haben, dass die maximale Kapazität für MyISAM 8 GB beträgt, bedeutet dies, dass RAM-Ressourcen nicht effizient genutzt werden?{Entschuldigen Sie, dass Sie diese Frage zu spät gestellt haben ..} 01 okt. 112011-10-01 22:14:09

+1

@ Gary: Du hast recht.Speicher, der mehr als 8 GB für key_buffer_size zugewiesen ist, wird verschwendet.Dies ist wichtig, da nur Indexseiten für MyISAM zwischengespeichert werden.Sie können Schlüssel-Caches für bestimmte MyISAM-Tabellen erstellen: http://dev.mysql.com/doc/refman/5.5/en/cache-index.html 01 okt. 112011-10-01 22:41:42