Pas MySQL-parameters aan, pas het /etc/my.cnf-bestand aan. Pas MySQL-parameters aan zodat ze van kracht worden na het herstarten van MySQL; na MySQL 4-versie kunnen sommige interne variabelen worden ingesteld tijdens MySQL-runtime, maar deze zijn ongeldig wanneer MySQL opnieuw wordt opgestart. MySQLD-programma - Mappen en bestanden basedir = pad # Gebruik de gegeven map als de rootmap (installatiemap). Datadir = pad # Lees het databasebestand uit een bepaalde map. pid-file = bestandsnaam # Specificeer een bestand voor het mysqld-programma om de proces-ID op te slaan (alleen beschikbaar voor UNIX/Linux-systemen);
[mysqld] socket = /tmp/mysql.sock # Specificeert een socketbestand voor lokale communicatie tussen het MySQL-clientprogramma en de server (de standaard is het bestand /var/lib/mysql/mysql.sock op Linux) port=3306 # Specificeert de poort waar MsSQL naar luistert key_buffer = 384M # key_buffer is de grootte van de buffer die wordt gebruikt voor het indexeren van blokken, waardoor de index die hij beter hanteert (voor alle reads en multiwrites) toeneemt. Het indexblok wordt gebuffreerd en gedeeld door alle threads, en de grootte van de key_buffer hangt af van de grootte van het geheugen. table_cache = 512 # Het aantal tabellen dat open is voor alle threads. Het verhogen van deze waarde verhoogt het aantal bestandsbeschrijvingen dat door mysqld vereist is. Het voorkomt de overhead van het vaak openen van datatabellen sort_buffer_size = 2M # Wijs een buffer van die grootte toe voor elke thread die gesorteerd moet worden. Het verhogen van deze waarde versnelt de ORDER BY- of GROUP BY-operaties. Opmerking: Het toegewezen geheugen dat bij deze parameter hoort, is exclusief voor elke verbinding! Als er 100 verbindingen zijn, dan is de totale toegewezen sorteerbuffergrootte 100×6 = 600MB read_buffer_size = 2M # De grootte van de buffer die gebruikt kan worden voor de leesquery-operatie. Net als bij sort_buffer_size is het toegewezen geheugen dat bij deze parameter hoort ook exclusief voor elke verbinding. query_cache_size = 32M # Specificeert de grootte van de MySQL-queryresultaatbuffer read_rnd_buffer_size = 8M # Verander de parameter die gelezen moet worden willekeurig na sortering met de rijwijzer. myisam_sort_buffer_size =64M # Buffer nodig om MyISAM-tabellen te herschikken wanneer ze veranderen thread_concurrency = 8 # Het maximale aantal gelijktijdige threads wordt ingesteld als het aantal logische CPU's van de server ×2, en als de CPU H.T-hyperthreading ondersteunt, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # voorkomt externe vergrendeling van MySQL, vermindert de kans op fouten en verbetert de stabiliteit. [mysqldump] max_allowed_packet =16M # Het maximaal mogelijke informatiepakket dat tussen de server en de client kan worden verzonden
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Andere optionele parameters: back_log = 384 Specificeert het aantal mogelijke verbindingen voor MySQL. Wanneer de hoofdthread van MySQL in zeer korte tijd een zeer groot aantal verbindingsverzoeken ontvangt, treedt deze parameter in werking, en de hoofdthread doet er kort over om de verbinding te controleren en een nieuwe thread te starten. De waarde van back_log parameter geeft aan hoeveel verzoeken er gedurende een korte periode in de stack kunnen worden opgeslagen voordat MySQL tijdelijk stopt met reageren op nieuwe verzoeken. Als het systeem in korte tijd veel verbindingen heeft, is het noodzakelijk de waarde van deze parameter te verhogen, die de grootte van de luisterwachtrij voor binnenkomende TCP/IP-verbindingen specificeert. Proberen een limiet te stellen die hoger back_log dan je besturingssysteem zal niet effectief zijn. De standaardwaarde is 50. Voor Linux-systemen wordt aanbevolen een geheel getal kleiner dan 512 in te stellen. max_connections = n Het maximale aantal databaseverbindingen dat de MySQL-server tegelijk kan verwerken (de standaardinstelling is 100). Als de limiet wordt overschreden, wordt de fout 'Te veel verbindingen' gerapporteerd key_buffer_size = n RMA-waarde voor indexblokken (standaardinstelling is 8M), waarbij de index wordt verhoogd voor een betere afhandeling (voor alle reads en multiwrites) record_buffer: Elke thread die een sequentiële scan uitvoert, wijst een buffer van deze grootte toe aan elke tabel die hij scant. Als je veel sequentiële scans doet, wil je die waarde misschien verhogen. De standaardwaarde is 131072 (128K) wait_timeout: Het aantal seconden waarop de server wacht op actie bij een verbinding voordat deze wordt afgesloten. interactive_timeout: Het aantal seconden dat de server wacht op actie op een interactieve verbinding voordat deze wordt uitgeschakeld. Een interactieve klant wordt gedefinieerd als een klant die de CLIENT_INTERACTIVE-optie gebruikt voor mysql_real_connect(). De standaardwaarde is 28800, je kunt die veranderen naar 3600. skip-naam-resolve Schakel MySQL uit voor DNS-resolutie op externe verbindingen; met deze optie wordt de tijd geëlimineerd die MySQL nodig heeft om DNS op te lossen. Het moet echter worden opgemerkt dat als deze optie is ingeschakeld, alle externe hostverbindingen de IP-adresmethode moeten gebruiken, anders kan MySQL het verbindingsverzoek niet normaal verwerken! log-slow-queries = slow.log Neem langzame queries op en optimaliseer ze één voor één skip-innodb Skip-BDB Sluit ongewenste tafeltypes en voeg dit niet toe als dat nodig is
# > TOONT VARIABELEN ZOALS '%query_cache%'; # > TOONT STATUS ZOALS 'Qcache%'; Als de Qcache_lowmem_prunes waarde erg groot is, geeft dit aan dat er vaak onvoldoende buffering is; Als de waarde van de Qcache_hits erg groot is, geeft dit aan dat de querybuffer zeer vaak wordt gebruikt, en als de waarde klein is maar de efficiëntie beïnvloedt, kun je overwegen geen querybuffering te gebruiken. Als de Qcache_free_blocks waarde erg groot is, geeft dat aan dat er veel puin in de buffer zit.
########################################## ###### max_allowed_packet ###### ########################################## Een communicatiepakket is een enkele SQL-instructie die naar de MySQL-server of een enkele regel naar de client wordt gestuurd. Het maximaal mogelijke pakket dat tussen de MySQL 5.1-server en de client kan worden verzonden, is 1 GB. Wanneer een MySQL-client of mysqld-server een pakket groter dan max_allowed_packet bytes ontvangt, wordt een foutmelding "pakket is te groot" gegeven en wordt de verbinding gesloten. Bij sommige clients, als het communicatiepakket te groot is, kun je tijdens de query de foutmelding "Verlies van verbinding met MySQL-server" tegenkomen. Zowel de client als de server hebben hun eigen max_allowed_packet variabelen, dus als je van plan bent om grote pakketten te verwerken, moet je die variabele zowel op de client als op de server toevoegen. Als je een MySQL-clientprogramma gebruikt, staat de max_allowed_packet variabele standaard op 16MB. Om een grotere waarde in te stellen, kun je MySQL op de volgende manier starten: MySQL> MySQL --max_allowed_packet=32M Het stelt de grootte van het informatiepakket in op 32MB. De standaard max_allowed_packet waarde voor de server is 1MB. Als de server grote queries moet verwerken, kun je deze waarde verhogen (bijvoorbeeld als je je voorbereidt om grote blob-kolommen te verwerken). Om bijvoorbeeld 16MB in te stellen, kun je de server als volgt starten: mysql> mysqld --max_allowed_packet=16M
Je kunt ook optiebestanden gebruiken om max_allowed_packet in te stellen. Om deze variabele voor de server op 16MB in te stellen, voeg je downlink-inhoud toe aan het optiebestand: [mysqld] max_allowed_packet=16M Het is veilig om de waarde van deze variabele te verhogen omdat extra geheugen alleen wordt toegewezen wanneer dat nodig is. Mysqld zal bijvoorbeeld alleen meer geheugen toewijzen als je een lange query uitvoert of MySQLD grote resultaatregels moet teruggeven. De kleine standaardwaarde van deze variabele is een voorzorgsmaatregel om foutpakketten tussen client en server op te vangen en om te waarborgen dat geheugenoverlopen niet worden veroorzaakt door per ongeluk gebruik van grote pakketten. Als je grote blobwaarden gebruikt en geen mysqld-toestemming geeft om genoeg geheugen te benaderen voor het verwerken van queries, krijg je ook vreemde problemen met betrekking tot grote pakketten. Als je vermoedt dat dit het geval is, probeer dan ulimit -d 256000 in mysqld_safe script te verhogen en herstart mysqld. ########################################## ##### Hoe je databasetabellen opent en sluit in MySQL ##### ########################################## table_cache, max_connections en max_tmp_tables beïnvloeden het maximale aantal bestanden dat de server open houdt. Als je één of beide van deze waarden verhoogt, kun je tegen de limiet aanlopen die je besturingssysteem oplegt op het aantal bestandsdescriptors dat elk proces opent. Je kunt echter de limiet op veel systemen verhogen. Vraag de documentatie van je besturingssysteem om uit te zoeken hoe je dit doet, want de methoden om de limieten te wijzigen verschillen sterk per systeem. table_cache gerelateerd aan max_connections. Bijvoorbeeld, voor 200 open joins moet je een tabelbuffer van minstens 200 * n hebben, waarbij n het maximale aantal tabellen in een join is. De cache van open tabellen kan worden verhoogd tot maximaal één table_cache (standaard 64; Dit kan worden gedaan met mysqld's -O table_cache=#选项来改变). Een tabel wordt nooit gesloten, behalve wanneer de cache vol is en een andere thread probeert een tabel te openen, of als je mysqladmin refresh of mysqladmin flush-tables gebruikt. Wanneer de tabelcache vol is, gebruikt de server de volgende procedure om een cache-entry te vinden om te gebruiken: Tabellen die momenteel niet in gebruik zijn, worden vrijgegeven, in de volgorde van minst gebruikt (LRU). Als de cache vol is en er geen tabellen zijn om vrij te geven, maar een nieuwe tabel moet worden geopend, moet de cache tijdelijk worden vergroot. Als de cache zich in een tijdelijke uitgebreide toestand bevindt en een tabel verandert van actief naar inactief, wordt deze gesloten en uit de cache vrijgegeven. Open een tabel voor elke gelijktijdige toegang. Dit betekent dat als je 2 threads hebt die dezelfde tabel openen of de tabel twee keer openen in dezelfde query (met AS), de tabel twee keer geopend moet worden. De eerste opening van een tabel houdt rekening met 2 bestandsdescriptors; Elke extra toepassing van de tabel is slechts rekening met één bestandsdescriptor. Voor de eerste opening wordt een extra descriptor gebruikt om het bestand te indexeren; Deze beschrijving wordt gedeeld door alle threads
|