Ajustează parametrii de rulare MySQL, modifică fișierul /etc/my.cnf Ajustează parametrii de rulare MySQL pentru a intra în vigoare după repornirea MySQL, după versiunea MySQL 4, unele variabile interne pot fi setate la runtime MySQL, dar vor fi invalide când MySQL este repornit. Programul MySQL - Directori și fișiere basedir = path # Folosește directorul dat ca director rădăcină (director de instalare). datadir = path # Citește fișierul de bază de date dintr-un anumit director. pid-file = nume fișier # Specifică un fișier pentru programul mysqld care să stocheze ID-ul procesului (disponibil doar pentru sisteme UNIX/Linux);
[mysqld] socket = /tmp/mysql.sock # Specifică un fișier socket pentru comunicarea locală între programul client MySQL și server (implicit este fișierul /var/lib/mysql/mysql.sock pe Linux) port=3306 # Specifică portul pentru care ascultă MsSQL key_buffer = 384M # key_buffer este dimensiunea bufferului folosit pentru indexarea blocurilor, crescând mai bine indexul pe care îl gestionează (pentru toate citirile și scrierile multiple). Blocul index este bufferizat și partajat de toate firele de execuție, iar dimensiunea key_buffer depinde de dimensiunea memoriei. table_cache = 512 # Numărul de tabele deschise pentru toate firele de execuție. Creșterea acestei valori crește numărul de descriptori de fișier necesari de mysqld. Evită costul de a deschide frecvent tabele de date sort_buffer_size = 2M # Alocă un buffer de acea dimensiune pentru fiecare fir care trebuie sortat. Creșterea acestei valori accelerează operațiunile ORDER BY sau GROUP BY. Notă: Memoria alocată corespunzătoare acestui parametru este exclusivă fiecărei conexiuni! Dacă există 100 de conexiuni, atunci dimensiunea totală a buffer-ului de sortare alocată este 100×6 = 600MB read_buffer_size = 2M # Dimensiunea bufferului care poate fi folosit pentru operația de citire a interogării. Ca și în cazul sort_buffer_size, memoria alocată corespunzătoare acestui parametru este, de asemenea, exclusivă fiecărei conexiuni. query_cache_size = 32M # Specifică dimensiunea bufferului de rezultate al interogării MySQL read_rnd_buffer_size = 8M # Schimbă parametrul să fie citit aleatoriu după sortare folosind pointerul rând. myisam_sort_buffer_size =64M # Buffer necesar pentru a reordona tabelele MyISAM când acestea se schimbă thread_concurrency = 8 # Numărul maxim de fire concurente este setat ca numărul procesoarelor logice ale serverului ×2, iar dacă CPU-ul suportă hyperthreading H.T, × 2 thread_cache = 8 # #缓存可重用的线程数 Skip-locking # evită blocarea externă a MySQL, reduce riscul de erori și îmbunătățește stabilitatea. [mysqldump] max_allowed_packet =16M # Pachetul maxim de informații care poate fi trimis între server și client
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Alți parametri opționali: back_log = 384 Specifică numărul de conexiuni posibile pentru MySQL. Când firul principal MySQL primește un număr foarte mare de cereri de conexiune într-un interval foarte scurt de timp, acest parametru intră în vigoare, iar firul principal are nevoie de un timp scurt pentru a verifica conexiunea și a începe un fir nou. Valoarea parametrului back_log indică câte cereri pot fi stocate în stivă pentru o perioadă scurtă de timp înainte ca MySQL să înceteze temporar să răspundă la cereri noi. Dacă sistemul are multe conexiuni într-un interval scurt de timp, este necesar să se mărească valoarea acestui parametru, care specifică dimensiunea cozii de ascultare pentru conexiunile TCP/IP de intrare. Încercarea de a stabili o limită care să back_log mai mare decât sistemul tău de operare va fi ineficientă. Valoarea implicită este 50. Pentru sistemele Linux, se recomandă setarea unui număr întreg mai mic de 512. max_connections = n Numărul maxim de conexiuni la baza de date pe care serverul MySQL le poate gestiona simultan (setarea implicită este 100). Dacă limita este depășită, eroarea de prea multe conexiuni va fi raportată key_buffer_size = n Valoarea RMA pentru blocurile de index (setarea implicită este 8M), creșterea indexului pentru o gestionare mai bună (pentru toate citirile și scrierile multiple) record_buffer: Fiecare fir care efectuează o scanare secvențială alocă un buffer de această dimensiune fiecărui tabel pe care îl scanează. Dacă faci multe scanări secvențiale, poate vrei să crești acea valoare. Valoarea implicită este 131072 (128K) wait_timeout: Numărul de secunde în care serverul așteaptă o acțiune pe o conexiune înainte să o închidă. interactive_timeout: Numărul de secunde pe care serverul le așteaptă pentru o acțiune pe o conexiune interactivă înainte de a o opri. Un client care interacționează este definit ca un client care folosește opțiunea CLIENT_INTERACTIVE pentru mysql_real_connect(). Valoarea implicită este 28800, o poți schimba la 3600. Sari-nume-rezolvă Dezactivează MySQL din rezoluția DNS pe conexiuni externe, folosind această opțiune elimini timpul necesar pentru MySQL să rezolve DNS-ul. Totuși, trebuie menționat că, dacă această opțiune este activată, toată autorizarea conexiunii la distanță a gazdei trebuie să folosească metoda adresei IP, altfel MySQL nu va putea procesa cererea de conexiune în mod normal! log-slow-interogări = slow.log Înregistrează interogările lente și optimizează-le una câte una Skip-innodb Skip-BDB Închide tipurile de tabele nedorite și nu adăuga asta dacă ai nevoie
# > AFIȘEAZĂ VARIABILE PRECUM '%query_cache%'; # > AFIȘEAZĂ STAREA CA 'Qcache%'; Dacă valoarea Qcache_lowmem_prunes este foarte mare, indică faptul că adesea există un buffering insuficient; Dacă valoarea Qcache_hits este foarte mare, indică faptul că buffer-ul de interogare este folosit foarte frecvent, iar dacă valoarea este mică, dar va afecta eficiența, atunci poți lua în considerare să nu folosești buffering-ul interogărilor. Dacă valoarea Qcache_free_blocks este foarte mare, indică faptul că există multe resturi în tampon.
########################################## ###### max_allowed_packet ###### ########################################## Un pachet de comunicare este o singură instrucțiune SQL trimisă către serverul MySQL sau o singură linie către client. Pachetul maxim posibil care poate fi trimis între serverul MySQL 5.1 și client este de 1 GB. Când un client MySQL sau un server mysqld primește un pachet mai mare de max_allowed_packet octeți, se emite o eroare "pachetul este prea mare" și conexiunea este închisă. Pentru unii clienți, dacă pachetul de comunicare este prea mare, este posibil să întâmpini eroarea "Pierderea conexiunii la serverul MySQL" în timpul interogării. Atât clientul, cât și serverul au propriile max_allowed_packet variabile, așa că dacă plănuiești să gestionezi pachete mari, trebuie să adaugi acea variabilă atât pe client, cât și pe server. Dacă folosești un program client Mysql, variabila max_allowed_packet are implicit 16MB. Pentru a stabili o valoare mai mare, poți începe mysql în următorul mod: mysql> mysql --max_allowed_packet=32M Setează dimensiunea pachetului de informații la 32MB. Valoarea implicită a max_allowed_packet serverului este 1MB. Dacă serverul trebuie să proceseze interogări mari, poți crește această valoare (de exemplu, dacă te pregătești să procesezi coloane mari de blob). De exemplu, pentru a-l seta la 16MB, poți porni serverul astfel: mysql> mysqld --max_allowed_packet=16M
Poți folosi și fișiere de opțiuni pentru a seta max_allowed_packet. Pentru a seta această variabilă pentru server la 16MB, adăugați conținut downlink în fișierul de opțiuni: [mysqld] max_allowed_packet=16M Este sigur să crești valoarea acestei variabile deoarece memoria suplimentară este alocată doar când este necesar. De exemplu, mysqld va aloca mai multă memorie doar dacă lansezi o interogare lungă sau mysqld trebuie să returneze linii de rezultat mari. Valoarea mică implicită a acestei variabile este o măsură de precauție pentru a prinde pachetele de eroare între client și server și pentru a se asigura că depășirile de memorie nu sunt cauzate de utilizarea accidentală a pachetelor mari. Dacă folosești valori mari de blob și nu acorzi permisiunea mysqld de a accesa suficientă memorie pentru a procesa interogări, vei întâmpina și probleme ciudate legate de pachete mari. Dacă bănuiești că este cazul, încearcă să începi să crești ulimit -d la 256000 în mysqld_safe script și repornește mysqld. ########################################## ##### Cum să deschizi și să închizi tabele de baze de date în MySQL ##### ########################################## table_cache, max_connections și max_tmp_tables afectează numărul maxim de fișiere pe care serverul le păstrează deschise. Dacă mărești una sau ambele dintre aceste valori, poți ajunge la limita impusă de sistemul tău de operare privind numărul de descriptori de fișier pe care îi deschide fiecare proces. Totuși, poți crește limita pentru multe sisteme. Cere documentației sistemului de operare să afle cum să faci asta, deoarece metodele de schimbare a limitelor variază foarte mult de la un sistem la altul. table_cache legat de max_connections. De exemplu, pentru 200 de join deschise, ar trebui să ai un buffer de cel puțin 200 * n, unde n este numărul maxim de tabele într-o join. Cache-ul tabelelor deschise poate fi mărit la maximum un table_cache (64 implicit; Acest lucru se poate face cu -O table_cache=#选项来改变) de pe mysqld. Un tabel nu este niciodată închis decât atunci când cache-ul este plin și un alt thread încearcă să deschidă un tabel sau dacă folosești mysqladmin refresh sau mysqladmin flush-tables. Când cache-ul tabelului este plin, serverul folosește următoarea procedură pentru a găsi o intrare cache de folosit: Tabelele care nu sunt folosite în prezent sunt publicate, în ordinea celui mai puțin folosit (LRU). Dacă cache-ul este plin și nu există tabele de eliberat, dar trebuie deschis un tabel nou, cache-ul trebuie mărit temporar. Dacă cache-ul este într-o stare extinsă temporară și un tabel trece de la activ la inactiv, acesta este închis și eliberat din cache. Deschide un tabel pentru fiecare acces concurent. Asta înseamnă că, dacă ai 2 fire care accesează același tabel sau accesează tabelul de două ori în aceeași interogare (cu AS), tabelul trebuie deschis de două ori. Prima deschidere a oricărui tabel conține 2 descriptori de fișier; Fiecare utilizare suplimentară a tabelului reprezintă doar un singur descriptor de fișier. Pentru prima deschidere, se folosește un descriptor suplimentar pentru indexarea fișierului; Acest descriptor este împărtășit între toate firele de discuție
|