Wie kann die Speichernutzung in MySQL Server erhöht werden, um die Geschwindigkeit zu verbessern?

28

Ich besitze einen Windows 2008-Server mit 8 GB RAM, auf dem IIS7 und MySQL ausgeführt werden. Ich habe die Speicher-, CPU- und Datenträgerverwendung auf dem Server verfolgt und festgestellt, dass MySQL nur 250 MB RAM verwendet, wodurch die Datenträger sehr ausgelastet sind, obwohl genügend freier Arbeitsspeicher zur Verfügung steht.

In SQL Server kann ich einfach die Größe des Speichers einstellen, den ich verwenden möchte. Ich suche nach der gleichen Einstellung in MySQL.

Wie kann ich MySQL so konfigurieren, dass mehr Speicher verwendet und die CPU- und Festplattennutzung reduziert wird?

holiveira
quelle

Antworten:

20

table_cacheist die nützlichste Konfigurationsanweisung zum Ändern. Jedes Mal, wenn MySQL auf eine Tabelle zugreift, wird die Tabelle in den Cache geladen. Wenn Sie eine große Anzahl von Tabellen haben, ist es schneller, sie zwischenzuspeichern.

Sehen Sie sich Ihre Servervariablen an, indem Sie Folgendes ausführen:

show status;

und schauen Sie sich die Variable an open_tables. Wenn dies mit Ihrem table_cacheWert übereinstimmt und opened_tablesständig steigt, müssen Sie den table_cacheWert in Ihrer Konfigurationsdatei erhöhen . Sie finden ein Gleichgewicht, indem Sie in Spitzenzeiten mit diesen Variablen experimentieren. Sie möchten es so konfigurieren, dass es zu Spitzenzeiten eine geringe Menge gibt, opened_tablesauch nachdem der Server für eine lange Zeit in Betrieb war.

key_buffer_sizeist auch eine gute Variable zum Experimentieren. Diese Variable wirkt sich auf die Größe des Indexpuffers aus. Wenn Sie diese Variable vergrößern, erhöht sich die Geschwindigkeit der Indexverarbeitung in MySQL. Sie können mit dem an den Variablen aussehen show variables;Befehl erneut und vergleichen key_read_requestszu key_reads. Idealerweise möchten Sie, dass das Verhältnis zwischen diesen beiden Variablen so gering wie möglich ist. Dies erreichen Sie, indem Sie die Größe der Variablen erhöhen key_buffer_size. Wenn Sie diese Variable höher einstellen, haben Sie weniger Schreib- und Lesevorgänge direkt auf und von der Festplatte, was Ihr Hauptanliegen war.

James
quelle
11
Eigentlich soll der Befehl show status; Statusvariablen wie Open_tablesund sehen Opened_tables. table_cachescheint in neueren MySQL-Versionen entfernt worden zu sein.
Matt Fenwick
5

Sie müssen Werte in der my.cnfDatei ändern und MySQL neu starten, obwohl Sie viele davon auch während der Ausführung von MySQL ändern können ('SET GLOBAL VARIABLE = value ').

Sie werden wahrscheinlich auf die Erhöhung aussehen wollen key_buffer_size, sort_buffer, read_bufferund table_cachefür den Anfang und wahrscheinlich innodb_buffer_pool_size, wenn Sie InnoDB - Tabellen haben. Einige dieser Werte können Sie vor allem mit Ihrer Hardware erheblich steigern (sogar um zwei Größenordnungen). Die Standardeinstellungen von MySQL sind äußerst konservativ und zielten anscheinend auf gängige, gemischt genutzte Desktops vor etwa zehn Jahren ab. Oh, und seien Sie gewarnt, dass die 32-Bit-Version Probleme haben wird, mehr als 2 GB RAM zu verwenden.

Weitere Informationen und Anleitungen finden Sie im MySQL-Handbuch .

staticsan
quelle