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 Änderungen 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.
Im Allgemeinen ist dies ein sehr subtiles Thema und überhaupt nicht trivial. Ich empfehle Ihnen, mysqlperformanceblog.com und High Performance MySQL zu lesen . 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
Die Datenbankgröße spielt eine Rolle . 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. Beispielsweise37 Signale gingen von 32 GB RAM auf 128 GB RAM für den Basecamp-Datenbankserver über.
quelle
Das ist richtig. 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;)
-> Schauen Sie sich die Partitionierung an .
quelle
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
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
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 den gesamten Datensatz oder sogar DDL in großen Tabellen betrifft. 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 Ihre Daten überhaupt in SQL ablegten. 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
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
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
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 früheren Monaten.
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
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
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
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
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
Die Abfrageleistung hängt hauptsächlich von der Anzahl der zu scannenden Datensätze ab, Indizes spielen eine große Rolle und die Größe der Indexdaten ist proportional zur Anzahl der Zeilen und zur Anzahl der Indizes.
Abfragen mit indizierten Feldbedingungen zusammen mit dem vollen Wert werden im Allgemeinen in 1 ms zurückgegeben, aber Starts_with, IN, Between enthält offensichtlich Bedingungen, die möglicherweise mehr Zeit in Anspruch nehmen, wenn mehr Datensätze gescannt werden.
Außerdem treten bei DDL viele Wartungsprobleme auf, wie z. B. ALTER. DROP ist langsam und schwierig, da mehr Live-Datenverkehr vorhanden ist, selbst wenn ein Index oder neue Spalten hinzugefügt werden.
Im Allgemeinen ist es ratsam, die Datenbank in so viele Cluster wie erforderlich zu gruppieren (500 GB wären ein allgemeiner Maßstab, wie von anderen gesagt, hängt von vielen Faktoren ab und kann je nach Anwendungsfall variieren), um eine bessere Isolation und Unabhängigkeit bei der Skalierung zu erzielen Cluster (besser geeignet für B2B)
quelle