Wie groß kann eine MySQL-Datenbank werden, bevor sich die Leistung verschlechtert?

Translate

Ab wann verliert eine MySQL-Datenbank an Leistung?

  • Ist die Größe der physischen Datenbank wichtig?
  • Ist die Anzahl der Datensätze wichtig?
  • Ist eine Leistungsverschlechterung linear oder exponentiell?

Ich habe eine meiner Meinung nach große Datenbank mit ungefähr 15 Millionen Datensätzen, die fast 2 GB belegen. Gibt es aufgrund dieser Zahlen einen Anreiz für mich, die Daten zu bereinigen, oder kann ich sicher sein, dass sie noch einige Jahre weiter skaliert werden?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Die Größe der physischen Datenbank spielt keine Rolle. Die Anzahl der Datensätze spielt keine Rolle.

Nach meiner Erfahrung ist das größte Problem, auf das Sie stoßen werden, nicht die Größe, sondern die Anzahl der Abfragen, die Sie gleichzeitig bearbeiten können. Höchstwahrscheinlich müssen Sie zu einer Master / Slave-Konfiguration wechseln, damit die Leseabfragen für die Slaves und die Schreibabfragen für den Master ausgeführt werden können. Wenn Sie jedoch noch nicht dazu bereit sind, können Sie Ihre Indizes jederzeit für die von Ihnen ausgeführten Abfragen optimieren, um die Antwortzeiten zu verkürzen. Außerdem können Sie unter Linux viele Anpassungen am Netzwerkstapel und am Kernel vornehmen, die Ihnen helfen werden.

Ich hatte meine bis zu 10 GB, mit nur einer moderaten Anzahl von Verbindungen und es hat die Anfragen gut behandelt.

Ich würde mich zuerst auf Ihre Indizes konzentrieren und dann einen Serveradministrator auf Ihr Betriebssystem untersuchen lassen. Wenn all dies nicht hilft, ist es möglicherweise an der Zeit, eine Master / Slave-Konfiguration zu implementieren.

Quelle
Translate

Im Allgemeinen ist dies ein sehr subtiles Thema und überhaupt nicht trivial. Ich ermutige Sie zu lesenmysqlperformanceblog.comundHochleistungs-MySQL. Ich denke wirklich, dass es dafür keine allgemeine Antwort gibt.

Ich arbeite an einem Projekt mit einer MySQL-Datenbank mit fast 1 TB Daten. Der wichtigste Skalierbarkeitsfaktor ist RAM. Wenn die Indizes Ihrer Tabellen in den Speicher passen und Ihre Abfragen stark optimiert sind, können Sie mit einem durchschnittlichen Computer eine angemessene Anzahl von Anforderungen bearbeiten.

Die Anzahl der Datensätze spielt eine Rolle, je nachdem, wie Ihre Tabellen aussehen. Es ist ein Unterschied, viele Varchar-Felder oder nur ein paar Ints oder Longs zu haben.

Auch die physische Größe der Datenbank spielt eine Rolle: Denken Sie beispielsweise an Backups. Abhängig von Ihrer Engine wachsen Ihre physischen Datenbankdateien weiter, aber schrumpfen nicht, zum Beispiel mit innodb. Das Löschen vieler Zeilen hilft also nicht, Ihre physischen Dateien zu verkleinern.

Es gibt viel zu diesem Thema und wie in vielen Fällen steckt der Teufel im Detail.

Quelle
Translate

Die Datenbankgrößeist wichtig. Wenn Sie mehr als eine Tabelle mit mehr als einer Million Datensätzen haben, nimmt die Leistung tatsächlich ab. Die Anzahl der Datensätze wirkt sich natürlich auf die Leistung aus:MySQL kann bei großen Tabellen langsam sein. Wenn Sie eine Million Datensätze erreichen, treten Leistungsprobleme auf, wenn die Indizes nicht richtig eingestellt sind (z. B. keine Indizes für Felder in "WHERE-Anweisungen" oder "ON-Bedingungen" in Joins). Wenn Sie 10 Millionen Datensätze erreichen, werden Sie Leistungsprobleme bekommen, selbst wenn Sie alle Ihre Indizes richtig haben. Hardware-Upgrades - Hinzufügen von mehr Speicher und mehr Prozessorleistung, insbesondere Speicher - tragen häufig dazu bei, die schwerwiegendsten Probleme zu reduzieren, indem die Leistung zumindest bis zu einem gewissen Grad erneut erhöht wird. Zum Beispiel37 Signale gingen von 32 GB RAM auf 128 GB RAMfür den Basecamp-Datenbankserver.

Quelle
Translate

Ich würde mich zuerst auf Ihre Indizes konzentrieren, dann einen Serveradministrator auf Ihr Betriebssystem schauen lassen, und wenn all das nicht hilft, könnte es Zeit für eine Master / Slave-Konfiguration sein.

Das stimmt. Eine andere Sache, die normalerweise funktioniert, besteht darin, nur die Datenmenge zu reduzieren, mit der wiederholt gearbeitet wird. Wenn Sie "alte Daten" und "neue Daten" haben und 99% Ihrer Abfragen mit neuen Daten arbeiten, verschieben Sie einfach alle alten Daten in eine andere Tabelle - und sehen Sie sie sich nicht an;)

-> Schau mal reinPartitionierung.

Quelle
ian
Translate

2 GB und ungefähr 15 Millionen Datensätze sind eine sehr kleine Datenbank - ich habe viel größere auf einem Pentium III (!) Ausgeführt und alles ist immer noch ziemlich schnell gelaufen. Wenn Ihre langsam ist, handelt es sich um ein Datenbank- / Anwendungsdesignproblem, nicht um ein MySQL einer.

Quelle
Translate

Es ist irgendwie sinnlos, von "Datenbankleistung" zu sprechen, "Abfrageleistung" ist hier ein besserer Begriff. Die Antwort lautet: Dies hängt von der Abfrage, den Daten, den Indizes, der Hardware usw. ab. Sie können sich ein Bild davon machen, wie viele Zeilen gescannt werden und welche Indizes mit der EXPLAIN-Syntax verwendet werden.

2 GB zählen nicht wirklich als "große" Datenbank - sie sind eher mittelgroß.

Quelle
Translate

Achten Sie auch auf komplexe Verknüpfungen. Die Transaktionskomplexität kann neben dem Transaktionsvolumen ein wichtiger Faktor sein.

Das Refactoring schwerer Abfragen bietet manchmal einen großen Leistungsschub.

Quelle
Translate

Ich wurde einmal aufgefordert, mir ein MySQL anzusehen, das "nicht mehr funktioniert". Ich habe festgestellt, dass sich die DB-Dateien auf einem mit NFS2 gemounteten Network Appliance-Filer mit einer maximalen Dateigröße von 2 GB befinden. Und tatsächlich war die Tabelle, die keine Transaktionen mehr akzeptierte, genau 2 GB groß. Aber in Bezug auf die Leistungskurve wurde mir gesagt, dass es wie ein Champion funktioniert hat, bis es überhaupt nicht funktioniert hat! Diese Erfahrung dient mir immer als nette Erinnerung daran, dass es immer Dimensionen über und unter denen gibt, die Sie natürlich vermuten.

Quelle
Translate

Ein zu berücksichtigender Punkt ist auch der Zweck des Systems und der Daten im Alltag.

Beispielsweise sind für ein System mit GPS-Überwachung von Autos keine relevanten Abfragedaten von den Positionen des Autos in den Vormonaten.

Daher können die Daten zur möglichen Abfrage an andere historische Tabellen übergeben und die Ausführungszeiten der täglichen Abfragen verkürzt werden.

Quelle
Translate

Ich verwalte derzeit eine MySQL-Datenbank in der Cloud-Infrastruktur von Amazon, die auf 160 GB angewachsen ist. Die Abfrageleistung ist in Ordnung. Was zu einem Albtraum geworden ist, sind Backups, Wiederherstellungen, Hinzufügen von Slaves oder alles andere, was sich mit dem gesamten Dataset oder sogar DDL in großen Tabellen befasst. Ein sauberer Import einer Dump-Datei ist problematisch geworden. Um den Prozess stabil genug für die Automatisierung zu machen, mussten verschiedene Entscheidungen getroffen werden, um Stabilität vor Leistung zu priorisieren. Wenn wir uns jemals mithilfe einer SQL-Sicherung von einer Katastrophe erholen müssten, wären wir tagelang außer Betrieb.

Die horizontale Skalierung von SQL ist ebenfalls sehr schmerzhaft und führt in den meisten Fällen dazu, dass SQL auf eine Weise verwendet wird, die Sie wahrscheinlich nicht beabsichtigt hatten, als Sie sich entschieden haben, Ihre Daten überhaupt in SQL zu speichern. Shards, Read Slaves, Multi-Master usw. sind allesamt wirklich beschissene Lösungen, die alles, was Sie jemals mit der DB tun, komplexer machen, und keiner von ihnen löst das Problem. mildert es nur in gewisser Weise. Ich würde dringend empfehlen, einige Ihrer Daten aus MySQL (oder wirklich jedem SQL) zu entfernen, wenn Sie sich einem Datensatz einer Größe nähern, bei dem diese Art von Dingen zu einem Problem wird.

Quelle
Translate

Die Leistung kann sich in wenigen tausend Zeilen verschlechtern, wenn die Datenbank nicht ordnungsgemäß entworfen wurde.

Wenn Sie über geeignete Indizes verfügen, geeignete Engines verwenden (verwenden Sie MyISAM nicht, wenn mehrere DMLs erwartet werden), Partitionierung verwenden, je nach Verwendung den richtigen Speicher zuweisen und natürlich eine gute Serverkonfiguration haben, kann MySQL Daten sogar in Terabyte verarbeiten!

Es gibt immer Möglichkeiten, die Datenbankleistung zu verbessern.

Quelle
Translate

Dies hängt von Ihrer Anfrage und Validierung ab.

Zum Beispiel habe ich mit einer Tabelle von 100 000 Medikamenten gearbeitet, die einen generischen Spaltennamen hat, in dem mehr als 15 Zeichen für jedes Medikament in dieser Tabelle enthalten sind. Ich habe eine Abfrage gestellt, um den generischen Namen von Medikamenten zwischen zwei Tabellen zu vergleichen. Die Abfrage dauert Weitere Minuten zum Ausführen. Wenn Sie die Arzneimittel anhand des Arzneimittelindex und einer ID-Spalte (wie oben angegeben) vergleichen, dauert dies nur wenige Sekunden.

Quelle
Translate

Die Datenbankgröße spielt eine Rolle in Bezug auf Bytes und die Zeilennummer der Tabelle. Sie werden einen großen Leistungsunterschied zwischen einer Light-Datenbank und einer mit Blobs gefüllten feststellen. Einmal blieb meine Anwendung hängen, weil ich Binärbilder in Felder einfügte, anstatt Bilder in Dateien auf der Festplatte zu speichern und nur Dateinamen in die Datenbank aufzunehmen. Das Iterieren einer großen Anzahl von Zeilen ist dagegen nicht kostenlos.

Quelle
Translate

Nein, es spielt keine Rolle. Die MySQL-Geschwindigkeit beträgt ungefähr 7 Millionen Zeilen pro Sekunde. Sie können es also ziemlich skalieren

Quelle