Wenn zu viele Tabellen (z. B. 200) in einer einzelnen MySQL-Datenbankinstanz vorhanden sind, kann dies die Leistung beeinträchtigen.
mysql
performance
user25704
quelle
quelle
Die Anzahl der Tabellen ist weniger wichtig als:
Übermäßige Tabellen bedeuten Speicher und Festplattenspeicher, der wiedergewonnen und für andere Zwecke verwendet werden kann. Beachten Sie, dass die Denormalisierung Ihrer Tabellen das Risiko fehlerhafter Daten erhöht, da Sie die referenzielle Integrität verlieren.
quelle
Im Allgemeinen sollten 200 Tabellen kein Problem sein, aber es hängt von einer Reihe von Dingen ab.
Dedizierter MySQL-Server gegen Server, der mit anderer Software geteilt wird, 128 MB gegen 128 GB RAM usw., kleine Tabellen mit wenigen Datensätzen gegen Tabellen mit Blobs und Millionen von Zeilen.
MySQL verfügt möglicherweise über Einstellungen und mehrere Engines, die sich jeweils auf unterschiedliche Weise auf die Tabellenleistung auswirken.
MyISAM hat normalerweise drei Dateien pro Tabelle .frm, .MYD, .MYI
INNODB hat im normalen Modus .frm mit allen in der zentralen Datei gespeicherten Daten
INNODB in einer Datei pro Tabellenmodus hat .frm, .idb
table_open_cache ist die Anzahl der Tabellen, die gleichzeitig geöffnet werden können (Standard 64). Dies muss möglicherweise größer sein als die Anzahl der Tabellen in Ihrem Schema, da dies damit zusammenhängt, wie viele Verbindungen die Datenbank abfragen. 100 Verbindungen, die 3 Tabellen verbinden, können bedeuten, dass 300 Tabellen zwischengespeichert sind und temporäre Tabellen vorhanden sind. Im Allgemeinen ist ein Schema oder Verbindungen umso komplexer, je größer die Anzahl ist.
open-files-limit Ich neige dazu, dies auf 4x table_open_cache zu setzen, was großzügig sein sollte, anstatt sich die Mühe zu machen, einen genauen Wert zu ermitteln.
Das Limit für die Dateihandhabung des Betriebssystems für den MySQL-Benutzer kann ebenfalls ein Problem sein (unter Linux kann der Standardwert häufig 1024 sein, ulimit -n, um Benutzerlimits anzuzeigen). Dies kann zu einem Problem mit einer großen Anzahl von Tabellen führen, wenn die Anzahl geringer ist MySQL erfordert. Dies sollte mindestens dem Open-Files-Limit entsprechen.
Wie bei jeder Datenbank gibt es Hunderte von Optimierungsparametern, die Sie anpassen können, um die Datenbank für Ihr bestimmtes Schema zu optimieren. MySQL ist dafür schlechter als die meisten anderen, da Sie zusätzliche Engines anschließen können, wenn Sie möchten, z. B. NDB-Cluster-Engine.
http://dev.mysql.com/doc/refman/5.1/en/table-cache.html
Ich hoffe es hilft
quelle
Für den Index jeder Tabelle hat MySQL einen eigenen Index. Index benötigt Speicher zum Halten und Verwenden, und es gibt ein globales Limit für Indizes. Wenn es viele Tabellen gibt, können sich nicht alle Indizes im RAM befinden, sodass sie auf die Festplatte übertragen werden, was sich direkt auf die Leistung auswirkt. Versuchen Sie erhöhen diese in
my.cnf
:key_buffer_size=256M
: Das ist die Menge an RAM zur Seite legen für Indexinformationen zu halten.quelle
Kann es? Sicher. Aber wie viel hängt stark von Ihrer App und ihren Zugriffsmustern ab und davon, ob Sie myisam oder innodb verwenden und ob sich innodb im Datei-pro-Tabelle-Modus befindet oder nicht, und von der Größe der innodb-Protokolle. Sie müssen uns mehr Details geben.
quelle
Nein - Ich glaube nicht, dass die Anzahl der Tabellen der Leistungsengpass in Ihrem System darstellt. Schließlich handelt es sich nur um Dateien in Ihrem Dateisystem. Es ist nichts Ungewöhnliches, Hunderte von Tabellen in einer Datenbank zu haben.
Viel wahrscheinlicher ist, dass Ihre Abfragen nicht richtig optimiert sind. Ich würde empfehlen, das
log-slow-queries
und einzuschaltenlog-queries-not-using-indexes
. Wenn Sie langsame Abfragen identifizieren, verwenden Sie dieexplain
Option, um den Abfrageplan für diese Abfragen anzuzeigen und die Stellen zu identifizieren, an denen Indizes fehlen.Weitere Informationen finden Sie unter http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html .
quelle