Wie optimiere ich MySQL Server für eine bessere Leistung?

889
pippi longstocking

Vor kurzem musste ich mit einem Altsystem arbeiten. Die Arbeit damit hat viel Zeit in Anspruch genommen, da viele Tabellen nicht ordnungsgemäß normalisiert wurden. Aufgrund von Wartungsproblemen ist eine Änderung nicht möglich. Mein leitender Ingenieur sagte mir, ich solle den MySQL-Server für eine bessere Leistung und Geschwindigkeit optimieren.

Ich habe meine C:\Program Files\MySQL\MySQL Server 5.6\my.iniDatei folgendermaßen geändert :

key_buffer_size = 128M 30% of your memory (Max 4GB) max_allowed_packet = 5M table_open_cache = 256 sort_buffer_size = 10M read_buffer_size = 20M read_rnd_buffer_size = 10M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 30M thread_concurrency = 8 bulk_insert_buffer_size = 256 innodb_buffer_pool_size = 5G to 50% - 70% of your ram. innodb_additional_mem_pool_size = 1G to to 10% of ram innodb_log_buffer_size = 1G innodb_log_file_size = 1G (Max 4GB) larger the file recovery slow. innodb_file_per_table = 1 

Es funktioniert zunächst gut. Nach einigen Stunden konnte ich MySQL jedoch nicht starten und musste MySQL Server neu installieren.

Was habe ich falsch gemacht und wie kann ich das beheben?

0
Was sagten die Protokolle? Oh und ist das der eigentliche Inhalt? `1G (Max 4GB) größer, die Dateiwiederherstellung langsam.` sieht aus wie eine eingefügte Kopie, ohne sich darüber Gedanken zu machen, was sie sagt. Seth vor 8 Jahren 0
Ja, es war eine Kopie einfügen. Der Prozess meines Freundes wurde schneller als zuvor, nachdem ich diese Werte in my.ini geändert hatte pippi longstocking vor 8 Jahren 0
Auch ohne weitere Informationen zu den Spezifikationen der Maschine, der Engine, die die DB verwendet, und dem tatsächlichen Fehler, der verhindert hat, dass MySQL auftaucht, erhalten Sie (wahrscheinlich) keine nützlichen Informationen. Wie Sie gerade sagten, ist dies nicht einmal das Live Aufbau. Warum haben Sie die Konfiguration auf diese Weise geändert? Insbesondere "Neuinstallieren des Servers" sollte nicht erforderlich sein, wenn es sich um einen Konfigurationsfehler handelt. Außerdem sieht es so aus, als hätten Sie [derselbe] Beitrag bei Stackoverflow ebenfalls erstellt (http://stackoverflow.com/questions/40231896/how-to-optimize-mysql-server-for-better-performance). Seth vor 8 Jahren 0
Ja, das ist eine Kopie davon. Ich wollte eine schnelle Antwort darauf bekommen. Da der letzte Beitrag keine Antwort erhielt, habe ich mich entschlossen, ihn hier zu posten. Es zeigt, dass die Db-Engine InnoDB ist. Und es gab keine Fehler. @seth pippi longstocking vor 8 Jahren 0
Wie haben Sie festgestellt, dass Sie MySQL nicht starten können, wenn keine Fehler aufgetreten sind? Warum haben Sie sich für eine Neuinstallation entschieden? Bitte geben Sie auch Antworten auf die anderen Fragen. Wie ist das Nutzungsmuster der DB? Seth vor 8 Jahren 0
Der einzige Fehler war, während ich auf den localhost doppelklicke, dass in navicat eine Fehlermeldung mit der Meldung angezeigt wird, dass keine Verbindung zum MySQL-Server unter 'localhost' (10061) hergestellt werden kann. pippi longstocking vor 8 Jahren 0

1 Antwort auf die Frage

2
Seth

Um nur einen Einblick in den Auszug Ihrer Konfigurationsdatei zu erhalten, habe ich einen Vergleich mit dem Standardwert ( 1, 2 ) durchgeführt. In der Notation wird der Parameter gefolgt von Ihrem Wert und dem Standardwert in Klammern angezeigt.

key_buffer_size = 128M (8M) max_allowed_packet = 5M (4M) table_open_cache = 256 (2000) sort_buffer_size = 10M (2M) read_buffer_size = 20M (1M) read_rnd_buffer_size = 10M (2M) myisam_sort_buffer_size = 64M (8M) thread_cache_size = 8 (-1) query_cache_size= 30M (0/1M) thread_concurrency = 8 (10) bulk_insert_buffer_size = 256 (8M) innodb_buffer_pool_size = 5G (128M) innodb_additional_mem_pool_size = 1G (8M) innodb_log_buffer_size = 1G (8M) innodb_log_file_size = 1G (5M) innodb_file_per_table = 1 (Off/On) 

Wie Sie sehen, haben Sie die meisten Caches erheblich erhöht. Aber macht das Sinn? Sie sagten, dass Ihre Datenbank die InnoDB-Engine verwendet. Gemäß der obigen Dokumentation key_buffer_size, read_buffer_size, bulk_insert_buffer_sizegilt nur für MyISAM - Datenbanken. Ich bin mir nicht sicher, wann temporäre Räume darauf laufen würden.

Die Verwendung myisam_sort_buffer_sizescheint rückständig zu sein, zumal die Dokumentation besagt: The size of the buffer that is allocated when sorting MyISAM indexes during a REPAIR TABLE or when creating indexes with CREATE INDEX or ALTER TABLE.In den meisten normalen Anwendungsfällen würde sie selten verwendet.

Darüber hinaus verwenden Sie die folgenden Einstellungen, die auf Ihrem DB Nutzungsmuster verlassen zu stark scheint max_allowed_packet, table_open_cache, thread_cache_size, innodb_log_buffer_sizeaber sie sagte nichts über die Nutzungsmuster. Betrachten Sie die obige Dokumentation, um zu sehen, was sie tatsächlich tun, und vergleichen Sie sie mit dem Verwendungsmuster der Datenbank.

Hüten Sie sich vor dem sort_buffer_sizeund read_rnd_buffer_sizeist pro Sitzung reserviert. Einige der MyISAM-Parameter können ebenfalls gut sein, so dass Sie für jede Sitzung einen erheblichen Overhead haben. Wieder müssen Sie das tatsächliche Nutzungsmuster auswerten.

Nun zu den InnoDB-Einstellungen, die Sie angegeben haben. innodb_additional_mem_pool_sizeist veraltet. Es ist nicht klar, warum Sie Änderungen vornehmen innodb_log_file_sizeund innodb_file_per_tablenicht sicher sind, aus welchen Gründen Sie diese Änderung vornehmen. Letzteres könnte nur ein Ausfall von sein On? Wenn Sie die verbleibende Einstellung innodb_buffer_pool_sizeauf einen so hohen Wert setzen, sollten Sie auch die Verwendung in Betracht ziehen innodb_buffer_pool_instances.

Insgesamt sieht es so aus, als hätten Sie gerade etwas versucht und es hat nicht funktioniert. Laut Ihren Anmerkungen haben Sie nicht einmal die MySQL-Protokolldateien angesehen, um herauszufinden, was dafür verantwortlich war, dass der Dienst keine Verbindungen akzeptierte oder überhaupt nicht zustande kam. Wenn Sie die DB-Leistung wirklich optimieren möchten, müssen Sie dies tun. Erwägen Sie gegebenenfalls die Verwendung zusätzlicher Indizes für Tabellen, um die Abfrageleistung zu erhöhen, und prüfen Sie, welche Abfragen tatsächlich in der Datenbank ausgeführt werden. Versuchen Sie außerdem zu verstehen, welches Verwendungsmuster der DB in Bezug auf die Anzahl der Verbindungen und die Größe der Abfragen hat.

Guter Rat hier. `table_open_cache` ist ein besonders heikler Wert, der wahrscheinlich aus der Konfigurationsberechtigung entfernt werden sollte, es sei denn, es gibt einen bestimmten Grund und begleitende Tests, um die Änderung zu rechtfertigen. Erwähnt [hier] (http://dba.stackexchange.com/a/45570/11651) zusammen mit meinem Lieblingszitat aller Zeiten: * "'Tuning' Ihres Servers kann eine verblüffende Zeitverschwendung sein." * Michael - sqlbot vor 8 Jahren 1