Juster MySQL-kørende parametre, modificerer /etc/my.cnf-filen Juster MySQL-kørende parametre til at træde i kraft efter genstart af MySQL, efter MySQL 4-versionen kan nogle interne variabler sættes ved MySQL-runtime, men det vil være ugyldigt, når MySQL genstartes. MySQLD-program - mapper og filer basedir = sti # Brug den givne mappe som rodmappe (installationsmappe). Datadir = sti # Læs databasefilen fra en given mappe. pid-file = filnavn # Angiv en fil til mysqld-programmet til at gemme proces-ID (kun tilgængeligt for UNIX/Linux-systemer);
[mysqld] socket = /tmp/mysql.sock # Specificerer en socket-fil til lokal kommunikation mellem MySQL-klientprogrammet og serveren (standardfilen er /var/lib/mysql/mysql.sock på Linux) port=3306 # Angiver den port, som MsSQL lytter efter key_buffer = 384M # key_buffer er størrelsen på bufferen, der bruges til indeksering af blokke, hvilket øger det indeks, den håndterer bedre (for alle læsninger og multiskrivninger). Indeksblokken bufferes og deles af alle tråde, og størrelsen på key_buffer afhænger af hukommelsens størrelse. table_cache = 512 # Antallet af åbne tabeller for alle tråde. At øge denne værdi øger antallet af filbeskrivelser, som mysqld kræver. Det undgår overheaden ved hyppig åbning af datatabeller sort_buffer_size = 2M # Alloker en buffer af den størrelse for hver tråd, der skal sorteres. At øge denne værdi accelererer ORDER BY eller GROUP BY-operationer. Bemærk: Den allokerede hukommelse, der svarer til denne parameter, er eksklusiv for hver forbindelse! Hvis der er 100 forbindelser, er den samlede sort-bufferstørrelse faktisk allokeret 100×6 = 600MB read_buffer_size = 2M # Størrelsen på bufferen, der kan bruges til læseforespørgselsoperationen. Som med sort_buffer_size er den allokerede hukommelse, der svarer til denne parameter, også eksklusiv for hver forbindelse. query_cache_size = 32M # Angiver størrelsen på MySQL-forespørgselsresultatbufferen read_rnd_buffer_size = 8M # Ændr parameteren, der skal læses, tilfældigt efter sortering ved hjælp af rækkepointeren. myisam_sort_buffer_size =64M # Buffer kræves for at omarrangere MyISAM-tabeller, når de ændres thread_concurrency = 8 # Det maksimale antal samtidige tråde sættes som antallet af serverens logiske CPU'er ×2, og hvis CPU'en understøtter H.T-hypertråding, × 2 thread_cache = 8 # #缓存可重用的线程数 skip-locking # undgår ekstern låsning af MySQL, reducerer risikoen for fejl og forbedrer stabiliteten. [mysqldump] max_allowed_packet =16M # Den maksimalt mulige informationspakke, der kan sendes mellem serveren og klienten
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Andre valgfrie parametre: back_log = 384 Angiver antallet af mulige forbindelser for MySQL. Når MySQL-hovedtråden modtager et meget stort antal forbindelsesforespørgsler på meget kort tid, træder denne parameter i kraft, og hovedtråden bruger kort tid på at tjekke forbindelsen og starte en ny tråd. Værdien af back_log parameter angiver, hvor mange forespørgsler der kan lagres i stakken i en kort periode, før MySQL midlertidigt stopper med at svare på nye forespørgsler. Hvis systemet har mange forbindelser på kort tid, er det nødvendigt at øge værdien af denne parameter, som angiver størrelsen på lyttekøen for indkommende TCP/IP-forbindelser. At forsøge at sætte en grænse, der back_log højere end dit operativsystem, vil være ineffektivt. Standardværdien er 50. For Linux-systemer anbefales det at sætte et heltal mindre end 512. max_connections = n Det maksimale antal databaseforbindelser, som MySQL-serveren kan håndtere samtidig (standardindstillingen er 100). Hvis grænsen overskrides, rapporteres fejlen 'For mange forbindelser' key_buffer_size = n RMA-værdi for indeksblokke (standardindstilling er 8M), hvilket øger indekset for bedre håndtering (for alle læsninger og multiskrivninger) record_buffer: Hver tråd, der udfører en sekventiel scanning, allokerer en buffer af denne størrelse til hver tabel, den scanner. Hvis du laver mange sekventielle scanninger, kan det være en god idé at øge den værdi. Standardværdien er 131072 (128K) wait_timeout: Antallet af sekunder, hvor serveren venter på handling på en forbindelse, før den lukkes ned. interactive_timeout: Antallet af sekunder, hvor serveren venter på handling på en interaktiv forbindelse, før den lukkes ned. En interagerende kunde defineres som en kunde, der bruger CLIENT_INTERACTIVE-muligheden for mysql_real_connect(). Standardværdien er 28800, du kan ændre den til 3600. spring-navn-resolve Deaktiver MySQL fra DNS-opløsning på eksterne forbindelser, og brug af denne mulighed eliminerer den tid, det tager for MySQL at løse DNS. Det skal dog bemærkes, at hvis denne mulighed er aktiveret, skal al fjernværtforbindelsesautorisation bruge IP-adressemetoden, ellers kan MySQL ikke behandle forbindelsesanmodningen normalt! log-slow-forespørgsler = slow.log Optag langsomme forespørgsler og optimer dem én ad gangen Skip-Innodb SKIP-BDB Luk uønskede bordtyper og tilføj ikke dette, hvis du har brug for det
# > VISER VARIABLE SOM '%query_cache%'; # > VISER STATUS SOM 'Qcache%'; Hvis Qcache_lowmem_prunes-værdien er meget stor, indikerer det, at der ofte er utilstrækkelig buffering; Hvis værdien af Qcache_hits er meget stor, indikerer det, at forespørgselsbufferen bruges meget ofte, og hvis værdien er lille, men vil påvirke effektiviteten, kan du overveje ikke at bruge forespørgselsbuffering. Hvis Qcache_free_blocks-værdien er meget stor, indikerer det, at der er meget affald i bufferen.
########################################## ###### max_allowed_packet ###### ########################################## En kommunikationspakke er en enkelt SQL-sætning, der sendes til MySQL-serveren eller en enkelt linje til klienten. Den maksimale mulige pakke, der kan sendes mellem MySQL 5.1-serveren og klienten, er 1 GB. Når en MySQL-klient eller mysqld-server modtager en pakke større end max_allowed_packet bytes, udsendes en fejl "pakken er for stor", og forbindelsen lukkes. For nogle klienter, hvis kommunikationspakken er for stor, kan du støde på fejlen "Tab af forbindelse til MySQL-server" under forespørgslen. Både klient og server har deres egne max_allowed_packet variabler, så hvis du planlægger at håndtere store pakker, skal du tilføje den variabel både på klienten og serveren. Hvis du bruger et mysql-klientprogram, er max_allowed_packet variabel som standard 16MB. For at sætte en større værdi kan du starte MySQL på følgende måde: mysql> mysql --max_allowed_packet=32M Den sætter størrelsen på informationspakken til 32MB. Standardværdien max_allowed_packet serveren er 1MB. Hvis serveren skal behandle store forespørgsler, kan du øge denne værdi (for eksempel hvis du forbereder dig på at behandle store blob-kolonner). For eksempel, for at sætte den til 16MB, kan du starte serveren som følger: mysql> mysqld --max_allowed_packet=16M
Du kan også bruge optionsfiler til at sætte max_allowed_packet. For at sætte denne variabel for serveren til 16 MB, tilføj nedlink-indhold til optionsfilen: [mysqld] max_allowed_packet=16M Det er sikkert at øge værdien af denne variabel, fordi der kun tildeles ekstra hukommelse, når det er nødvendigt. For eksempel vil mysqld kun allokere mere hukommelse, hvis du laver en lang forespørgsel, eller mysqld skal returnere store resultatlinjer. Den lille standardværdi af denne variabel er en forsigtighedsforanstaltning for at fange fejlpakker mellem klient og server og for at sikre, at hukommelsesoverløb ikke skyldes utilsigtet brug af store pakker. Hvis du bruger store blob-værdier og ikke giver mysqld-tilladelse til at få adgang til nok hukommelse til at behandle forespørgsler, vil du også støde på mærkelige problemer relateret til store pakker. Hvis du mistænker, at det er tilfældet, så prøv at begynde at øge ulimit -d 256000 i mysqld_safe script og genstart mysqld. ########################################## ##### Sådan åbner og lukker man databasetabeller i MySQL ##### ########################################## table_cache, max_connections og max_tmp_tables påvirker det maksimale antal filer, serveren holder åbne. Hvis du øger en eller begge af disse værdier, kan du støde på den grænse, som dit operativsystem sætter for, hvor mange filbeskrivelser hver proces åbner. Dog kan du øge grænsen på mange systemer. Bed din OS-dokumentation om at finde ud af, hvordan man gør dette, da metoderne til at ændre grænserne varierer meget fra system til system. table_cache relateret til max_connections. For eksempel bør du for 200 åbne joins have en tabelbuffer på mindst 200 * n, hvor n er det maksimale antal tabeller i en join. Cachen af åbne tabeller kan øges til maksimalt én table_cache (64 som standard; Dette kan gøres med mysqlds -O table_cache=#选项来改变). En tabel lukkes aldrig, undtagen når cachen er fuld, og en anden tråd prøver at åbne en tabel, eller hvis du bruger mysqladmin refresh eller mysqladmin flush-tables. Når tabelcachen er fuld, bruger serveren følgende procedure til at finde en cachepost at bruge: Tabeller, der ikke aktuelt er i brug, frigives i rækkefølgen af mindst brugte (LRU). Hvis cachen er fuld, og der ikke er tabeller at frigive, men en ny tabel skal åbnes, skal cachen midlertidigt udvides. Hvis cachen er i en midlertidig udvidet tilstand, og en tabel skifter fra aktiv til inaktiv, lukkes den og frigives fra cachen. Åbn en tabel for hver samtidig adgang. Det betyder, at hvis du har 2 tråde, der tilgår den samme tabel eller tilgår tabellen to gange i samme forespørgsel (med AS), skal tabellen åbnes to gange. Den første åbning af en hvilken som helst tabel tager højde for 2 filbeskrivelser; Hver ekstra brug af tabellen tager højde for kun én filbeskrivelse. For den første åbning bruges en ekstra beskrivelse til at indeksere filen; Denne beskrivelse deles mellem alle tråde
|