Passen Sie die Laufzeitparameter von MySQL an, ändern Sie die Datei /etc/my.cnf, passen Sie die ausführenden MySQL-Parameter so an, dass sie nach dem Neustart von MySQL wirksam werden; nach der Version MySQL 4 können einige interne Variablen zur MySQL-Laufzeit gesetzt werden, aber diese sind ungültig, wenn MySQL neu gestartet wird. MySQLD-Programm – Verzeichnisse und Dateien basedir = Pfad # Verwenden Sie das gegebene Verzeichnis als Root-Verzeichnis (Installationsverzeichnis). Datadir = Pfad # Lesen Sie die Datenbankdatei aus einem bestimmten Verzeichnis. pid-file = Dateiname # Gib eine Datei an, die das mysqld-Programm speichert, um die Prozess-ID zu speichern (nur für UNIX/Linux-Systeme verfügbar);
[mysqld] socket = /tmp/mysql.sock # Spezifiziert eine Socket-Datei für die lokale Kommunikation zwischen dem MySQL-Client-Programm und dem Server (standardmäßig ist die /var/lib/mysql/mysql.sock-Datei unter Linux) port=3306 # Spezifiziert den Port, nach dem MsSQL hört key_buffer = 384M # key_buffer ist die Größe des Puffers, der für die Indexierung von Blöcken verwendet wird, wodurch der Index, den er besser handhabt (für alle Lese- und Multiwrites), erhöht. Der Indexblock wird von allen Threads gepuffert und geteilt, und die Größe der key_buffer hängt von der Größe des Speichers ab. table_cache = 512 # Die Anzahl der für alle Threads geöffneten Tabellen. Erhöht man diesen Wert, erhöht sich die Anzahl der von mysqld benötigten Dateideskriptoren. Es vermeidet den Overhead durch häufig öffnende Datentabellen sort_buffer_size = 2M # Für jeden Thread, der sortiert werden muss, einen Puffer dieser Größe zuweisen. Erhöht man diesen Wert, beschleunigt man die Operationen ORDER BY oder GROUP BY. Hinweis: Der zugewiesene Speicher, der diesem Parameter entspricht, ist exklusiv für jede Verbindung! Wenn es 100 Verbindungen gibt, beträgt die tatsächlich zugeteilte Gesamtgröße des Sortierpuffers 100×6 = 600 MB read_buffer_size = 2M # Die Größe des Puffers, der für die Leseabfrage verwendet werden kann. Wie bei sort_buffer_size ist der zugewiesene Speicher, der diesem Parameter entspricht, ebenfalls exklusiv für jede Verbindung. query_cache_size = 32M # Spezifiziert die Größe des MySQL-Abfrageergebnispuffers read_rnd_buffer_size = 8M # Ändere den zu lesenden Parameter zufällig nach der Sortierung mit dem Zeilenzeiger. myisam_sort_buffer_size =64M # Puffer erforderlich, um MyISAM-Tabellen neu zu ordnen, wenn sie sich ändern thread_concurrency = 8 # Die maximale Anzahl gleichzeitiger Threads wird als die Anzahl der logischen CPUs des Servers ×2 festgelegt, und wenn die CPU H.T. Hyperthreading unterstützt, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # vermeidet externe Sperrungen von MySQL, verringert die Fehlerwahrscheinlichkeit und erhöht die Stabilität. [mysqldump] max_allowed_packet =16M # Das maximal mögliche Informationspaket, das zwischen Server und Client gesendet werden kann
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Weitere optionale Parameter: back_log = 384 Spezifiziert die Anzahl der möglichen Verbindungen für MySQL. Wenn der MySQL-Hauptthread in sehr kurzer Zeit eine sehr große Anzahl von Verbindungsanfragen erhält, tritt dieser Parameter in Kraft, und der Hauptthread benötigt kurze Zeit, um die Verbindung zu überprüfen und einen neuen Thread zu starten. Der Wert back_log Parameter gibt an, wie viele Anfragen für einen kurzen Zeitraum im Stack gespeichert werden können, bevor MySQL vorübergehend aufhört, auf neue Anfragen zu reagieren. Wenn das System in kurzer Zeit viele Verbindungen hat, ist es notwendig, den Wert dieses Parameters zu erhöhen, der die Größe der Hörwarteschlange für eingehende TCP/IP-Verbindungen angibt. Zu versuchen, ein Limit zu setzen, das höher back_log als dein Betriebssystem, wird wirkungslos sein. Der Standardwert beträgt 50. Für Linux-Systeme wird empfohlen, eine ganze Zahl kleiner als 512 zu setzen. max_connections = n Die maximale Anzahl von Datenbankverbindungen, die der MySQL-Server gleichzeitig verarbeiten kann (die Standardeinstellung beträgt 100). Wenn das Limit überschritten wird, wird der Fehler "Zu viele Verbindungen" gemeldet key_buffer_size = n RMA-Wert für Indexblöcke (Standardeinstellung ist 8M), wodurch der Index für eine bessere Handhabung erhöht wird (für alle Reads und Multiwrites) record_buffer: Jeder Thread, der einen sequentiellen Scan durchführt, weist jeder gescannten Tabelle einen Puffer dieser Größe zu. Wenn du viele sequentielle Scans machst, solltest du diesen Wert vielleicht erhöhen. Der Standardwert ist 131072 (128K) wait_timeout: Die Anzahl der Sekunden, die der Server auf eine Verbindung wartet, bevor er sie abschaltet. interactive_timeout: Die Anzahl der Sekunden, die der Server auf eine Aktion bei einer interaktiven Verbindung wartet, bevor er sie abschaltet. Ein interagierender Kunde wird definiert als ein Kunde, der die CLIENT_INTERACTIVE-Option für mysql_real_connect() verwendet. Der Standardwert ist 28800, du kannst ihn auf 3600 ändern. skip-name-resolve Deaktivieren Sie MySQL von der DNS-Auflösung auf externen Verbindungen; diese Option vermeidet die Zeit, die MySQL benötigt, um DNS aufzulösen. Es sollte jedoch beachtet werden, dass, wenn diese Option aktiviert ist, alle entfernten Host-Verbindungsautorisierungen die IP-Adress-Methode verwenden müssen, andernfalls kann MySQL die Verbindungsanfrage nicht normal bearbeiten! log-slow-queries = slow.log Trage langsame Anfragen auf und optimiere sie einzeln skip-innodb SKIP-BDB Schließe unerwünschte Tabellentypen und füge das nicht hinzu, falls nötig.
# > ZEIGEN VARIABLEN WIE '%query_cache%'; # > ZEIGT STATUS WIE 'Qcache%'; Wenn der Qcache_lowmem_prunes-Wert sehr groß ist, deutet dies oft auf unzureichende Pufferung hin; Wenn der Wert des Qcache_hits sehr groß ist, zeigt das, dass der Abfragepuffer sehr häufig verwendet wird, und wenn der Wert klein ist, aber die Effizienz beeinflusst, kann man in Erwägung ziehen, kein Abfragepuffer zu verwenden. Wenn der Qcache_free_blocks Wert sehr groß ist, deutet das darauf hin, dass sich viel Ablagerung im Puffer befindet.
########################################## ###### max_allowed_packet ###### ########################################## Ein Kommunikationspaket ist eine einzelne SQL-Anweisung, die an den MySQL-Server oder eine einzelne Zeile an den Client gesendet wird. Das maximal mögliche Paket, das zwischen dem MySQL 5.1-Server und dem Client gesendet werden kann, beträgt 1 GB. Wenn ein MySQL-Client oder Mysqld-Server ein Paket größer als max_allowed_packet Bytes erhält, wird der Fehler "Paket ist zu groß" ausgegeben und die Verbindung wird geschlossen. Bei einigen Clients kann bei zu großem Kommunikationspaket während der Abfrage der Fehler "Verbindungsverlust zum MySQL-Server" auftreten. Sowohl Client als auch Server haben jeweils eigene max_allowed_packet Variablen, daher müssen Sie, wenn Sie große Pakete bearbeiten möchten, diese Variable sowohl beim Client als auch am Server hinzufügen. Wenn du ein MySQL-Client-Programm verwendest, ist max_allowed_packet Variable standardmäßig auf 16 MB eingestellt. Um einen größeren Wert zu setzen, können Sie MySQL wie folgt starten: mysql> mysql --max_allowed_packet=32M Es stellt die Größe des Informationspakets auf 32 MB fest. Der Standardwert max_allowed_packet für den Server beträgt 1 MB. Wenn der Server große Abfragen verarbeiten muss, können Sie diesen Wert erhöhen (zum Beispiel, wenn Sie große Blob-Spalten verarbeiten). Zum Beispiel kannst du, um ihn auf 16 MB zu stellen, den Server wie folgt starten: mysql> mysqld --max_allowed_packet=16M
Du kannst auch Optionsdateien verwenden, um max_allowed_packet einzustellen. Um diese Variable für den Server auf 16 MB zu setzen, fügen Sie Downlink-Inhalte in die Optionsdatei ein: [mysqld] max_allowed_packet=16M Es ist sicher, den Wert dieser Variablen zu erhöhen, da zusätzlicher Speicher nur bei Bedarf zugewiesen wird. Mysqld weist zum Beispiel mehr Speicher nur zu, wenn man eine lange Abfrage erstellt oder MySQLD große Ergebniszeilen zurückgeben muss. Der kleine Standardwert dieser Variablen ist eine Vorsichtsmaßnahme, um Fehlerpakete zwischen Client und Server zu erkennen und sicherzustellen, dass Speicherüberläufe nicht durch versehentliche Nutzung großer Pakete verursacht werden. Wenn du große Blob-Werte verwendest und mysqld keine Berechtigung gibst, um auf genügend Speicher zuzugreifen, um Abfragen zu verarbeiten, wirst du auch auf seltsame Probleme im Zusammenhang mit großen Paketen stoßen. Wenn du das vermutest, versuche, ulimit -d 256000 in mysqld_safe Skript zu erhöhen und mysqld neu zu starten. ########################################## ##### Wie man Datenbanktabellen in MySQL öffnet und schließt ##### ########################################## table_cache, max_connections und max_tmp_tables beeinflussen die maximale Anzahl der Dateien, die der Server offen hält. Wenn du einen oder beide dieser Werte erhöhst, kannst du auf die vom Betriebssystem gesetzte Grenze für die Anzahl der Dateideskriptoren stoßen, die jeder Prozess öffnet. Allerdings können Sie das Limit auf vielen Systemen erhöhen. Fragen Sie Ihre Betriebssystemdokumentation, wie das geht, da die Methoden zur Änderung der Limits von System zu System stark variieren. table_cache mit max_connections verwandt. Zum Beispiel sollte man für 200 offene Joins einen Tabellenpuffer von mindestens 200 * n haben, wobei n die maximale Anzahl der Tabellen in einem Join ist. Der Cache der offenen Tabellen kann auf maximal einen table_cache erhöht werden (standardmäßig 64; Dies kann mit mysqlds -O table_cache=#选项来改变) gemacht werden. Eine Tabelle wird nie geschlossen, außer wenn der Cache voll ist und ein anderer Thread versucht, eine Tabelle zu öffnen, oder wenn du mysqladmin refresh oder mysqladmin flush-tables verwendest. Wenn der Tabellencache voll ist, verwendet der Server folgendes Verfahren, um einen Cache-Eintrag zu finden: Tabellen, die derzeit nicht verwendet werden, werden veröffentlicht, in der Reihenfolge der am wenigsten verwendeten (LRU). Wenn der Cache voll ist und keine Tabellen freigegeben werden können, aber eine neue Tabelle geöffnet werden muss, muss der Cache vorübergehend vergrößert werden. Befindet sich der Cache in einem temporären erweiterten Zustand und eine Tabelle wechselt von aktiv zu inaktiv, wird er geschlossen und aus dem Cache freigegeben. Öffne für jeden gleichzeitigen Zugriff eine Tabelle. Das bedeutet, wenn du zwei Threads hast, die auf dieselbe Tabelle zugreifen oder die Tabelle zweimal in derselben Abfrage (mit AS) aufrufen, muss die Tabelle zweimal geöffnet werden. Das erste Öffnen einer Tabelle berücksichtigt zwei Dateideskriptoren; Jede zusätzliche Verwendung der Tabelle berücksichtigt nur einen Dateideskriptor. Für die erste Öffnung wird ein zusätzlicher Deskriptor verwendet, um die Datei zu indexieren; Diese Beschreibung wird von allen Threads geteilt
|