Sureguliuokite MySQL veikimo parametrus, pakeiskite failą /etc/my.cnf Sureguliuokite MySQL veikimo parametrus, kad jie įsigaliotų iš naujo paleidus MySQL, po MySQL 4 versijos kai kuriuos vidinius kintamuosius galima nustatyti MySQL vykdymo metu, tačiau jie bus negaliojantys, kai MySQL bus paleistas iš naujo. mysqld programa - katalogai ir failai basedir = kelias # Naudokite nurodytą katalogą kaip šakninį katalogą (diegimo katalogą). datadir = kelias # Perskaitykite duomenų bazės failą iš tam tikro katalogo. pid-file = failo pavadinimas # Nurodykite failą, skirtą mysqld programai saugoti proceso ID (galima tik UNIX/Linux sistemoms);
[mysqld] socket = /tmp/mysql.sock # Nurodo lizdo failą, skirtą vietiniam ryšiui tarp MySQL kliento programos ir serverio (numatytasis yra /var/lib/mysql/mysql.sock failas "Linux") port=3306 # Nurodo prievadą, kurio klausosi MsSQL key_buffer = 384M # key_buffer yra blokams indeksuoti naudojamo buferio dydis, padidinant indeksą, kurį jis tvarko geriau (visiems skaitymams ir daugkartiniams rašymams). Indekso blokas yra buferinis ir bendrinamas visose gijose, o key_buffer dydis priklauso nuo atminties dydžio. table_cache = 512 # Visų gijų atidarytų lentelių skaičius. Padidinus šią reikšmę, padidėja mysqld reikalingų failų aprašų skaičius. Taip išvengiama papildomų išlaidų, susijusių su dažnai atidaromomis duomenų lentelėmis sort_buffer_size = 2M # Paskirstykite tokio dydžio buferį kiekvienai gijai, kurią reikia rūšiuoti. Padidinus šią vertę, pagreitėja ORDER BY arba GROUP BY operacijos. Pastaba: Šį parametrą atitinkanti atmintis yra išskirtinė kiekvienam ryšiui! Jei yra 100 ryšių, tada bendras rūšiavimo buferio dydis yra 100×6 = 600 MB read_buffer_size = 2M # Buferio, kurį galima naudoti skaitymo užklausos operacijai, dydis. Kaip ir sort_buffer_size, priskirta atmintis, atitinkanti šį parametrą, taip pat yra išskirtinė kiekvienam ryšiui. query_cache_size = 32M # Nurodo MySQL užklausos rezultatų buferio dydį read_rnd_buffer_size = 8M # Pakeiskite parametrą, kuris bus skaitomas atsitiktinai po rūšiavimo naudojant eilutės žymeklį. myisam_sort_buffer_size =64M # Buferis, reikalingas MyISAM lentelėms pertvarkyti, kai jos keičiasi thread_concurrency = 8 # Maksimalus vienu metu vykstančių gijų skaičius nustatomas kaip serverio loginių procesorių skaičius ×2, o jei procesorius palaiko H.T hipergiją, × 2 thread_cache = 8 # #缓存可重用的线程数 praleidimo užrakinimas # išvengia išorinio MySQL užrakinimo, sumažina klaidų tikimybę ir padidina stabilumą. [mysqldump] max_allowed_packet =16M # Maksimalus galimas informacijos paketas, kurį galima siųsti tarp serverio ir kliento
[myisamchk] key_buffer = 256M sort_buffer = 256M read_buffer = 2M write_buffer = 2M
Kiti neprivalomi parametrai: back_log = 384 Nurodo galimų MySQL ryšių skaičių. Kai MySQL pagrindinė gija per labai trumpą laiką gauna labai daug prisijungimo užklausų, šis parametras įsigalioja, o pagrindinė gija užtrunka trumpą laiką, kol patikrina ryšį ir pradeda naują giją. Parametro back_log reikšmė nurodo, kiek užklausų galima saugoti krūvoje trumpą laiką, kol MySQL laikinai nustos atsakyti į naujas užklausas. Jei sistema turi daug ryšių per trumpą laiką, būtina padidinti šio parametro vertę, kuri nurodo įeinančių TCP/IP ryšių klausymosi eilės dydį. Bandymas nustatyti ribą, kuri back_log didesnė už jūsų operacinę sistemą, bus neveiksminga. Numatytoji reikšmė yra 50. "Linux" sistemose rekomenduojama nustatyti mažesnį nei 512 sveikąjį skaičių. max_connections = n Maksimalus duomenų bazės ryšių, kuriuos MySQL serveris gali apdoroti vienu metu, skaičius (numatytasis nustatymas yra 100). Jei limitas viršijamas, bus pranešta apie klaidą Per daug ryšių key_buffer_size = n RMA reikšmė indekso blokams (numatytasis nustatymas yra 8M), indekso didinimas geresniam valdymui (visiems skaitymams ir daugkartiniams rašymams) record_buffer: Kiekviena gija, atliekanti nuoseklų nuskaitymą, kiekvienai nuskaitytai lentelei paskiria tokio dydžio buferį. Jei atliekate daug nuoseklių nuskaitymų, galbūt norėsite padidinti šią vertę. Numatytoji vertė yra 131072 (128K) wait_timeout: Sekundžių skaičius, per kurį serveris laukia veiksmo su ryšiu prieš jį išjungdamas. interactive_timeout: Sekundžių skaičius, per kurį serveris laukia veiksmo interaktyviame ryšyje, prieš jį išjungdamas. Sąveikaujantis klientas apibrėžiamas kaip klientas, kuris naudoja mysql_real_connect() parinktį CLIENT_INTERACTIVE. Numatytoji vertė yra 28800, galite ją pakeisti į 3600. praleisti-pavadinimas-išspręsti Išjunkite "MySQL" iš DNS skiriamosios gebos išoriniuose ryšiuose, naudojant šią parinktį pašalinamas laikas, per kurį "MySQL" išsprendžia DNS. Tačiau reikia pažymėti, kad jei ši parinktis įjungta, visi nuotolinio pagrindinio kompiuterio ryšio autorizavimai turi naudoti IP adreso metodą, kitaip MySQL negalės normaliai apdoroti ryšio užklausos! log-slow-queries = slow.log Įrašykite lėtas užklausas ir optimizuokite jas po vieną praleisti-innodb praleisti-bdb Uždarykite nepageidaujamus lentelių tipus ir nepridėkite jų, jei reikia
# > RODYTI KINTAMUOSIUS, PVZ., '%query_cache%'; # > RODYTI BŪSENĄ, PVZ., 'Qcache%'; Jei Qcache_lowmem_prunes vertė yra labai didelė, tai rodo, kad dažnai yra nepakankamas buferis; Jei Qcache_hits reikšmė yra labai didelė, tai rodo, kad užklausos buferis naudojamas labai dažnai, o jei reikšmė yra maža, bet turės įtakos efektyvumui, galite apsvarstyti galimybę nenaudoti užklausos buferio. Jei Qcache_free_blocks vertė yra labai didelė, tai rodo, kad buferyje yra daug šiukšlių.
########################################## ###### max_allowed_packet ###### ########################################## Ryšio paketas yra vienas SQL sakinys, siunčiamas į MySQL serverį arba viena eilutė klientui. Didžiausias galimas paketas, kurį galima siųsti tarp MySQL 5.1 serverio ir kliento, yra 1 GB. Kai MySQL klientas arba mysqld serveris gauna didesnį nei max_allowed_packet baitų paketą, išduodama klaida "paketas per didelis" ir ryšys nutraukiamas. Kai kuriems klientams, jei ryšio paketas yra per didelis, užklausos metu galite susidurti su klaida "Ryšio su MySQL serveriu praradimas". Tiek klientas, tiek serveris turi savo max_allowed_packet kintamuosius, todėl jei planuojate tvarkyti didelius paketus, turite pridėti tą kintamąjį tiek kliente, tiek serveryje. Jei naudojate mysql kliento programą, jos max_allowed_packet kintamasis yra 16 MB. Norėdami nustatyti didesnę vertę, galite paleisti mysql tokiu būdu: mysql> mysql --max_allowed_packet=32M Jis nustato informacijos paketo dydį iki 32 MB. Numatytoji serverio max_allowed_packet reikšmė yra 1 MB. Jei serveriui reikia apdoroti dideles užklausas, galite padidinti šią reikšmę (pvz., jei ruošiatės apdoroti didelius BLOB stulpelius). Pavyzdžiui, norėdami nustatyti 16 MB, galite paleisti serverį taip: mysql> mysqld --max_allowed_packet=16M
Taip pat galite naudoti parinkčių failus, kad nustatytumėte max_allowed_packet. Norėdami nustatyti šį serverio kintamąjį į 16 MB, pridėkite žemyn saito turinį į parinkčių failą: [mysqld] max_allowed_packet=16M Saugu padidinti šio kintamojo vertę, nes papildoma atmintis skiriama tik tada, kai reikia. Pavyzdžiui, mysqld skirs daugiau atminties tik tuo atveju, jei pateiksite ilgą užklausą arba mysqld turi grąžinti dideles rezultatų eilutes. Maža numatytoji šio kintamojo reikšmė yra atsargumo priemonė, skirta sugauti klaidų paketus tarp kliento ir serverio ir užtikrinti, kad atminties perpildymas neatsirastų dėl atsitiktinio didelių paketų naudojimo. Jei naudojate dideles BLOB reikšmes ir nesuteikiate mysqld leidimo pasiekti pakankamai atminties užklausoms apdoroti, taip pat susidursite su keistomis problemomis, susijusiomis su dideliais paketais. Jei įtariate, kad taip yra, pabandykite pradėti didinti ulimit -d 256000 mysqld_safe scenarijuje ir iš naujo paleiskite mysqld. ########################################## ##### Kaip atidaryti ir uždaryti duomenų bazės lenteles MySQL ##### ########################################## table_cache, max_connections ir max_tmp_tables turi įtakos maksimaliam failų, kuriuos serveris laiko atidarytų, skaičiui. Jei padidinsite vieną ar abi šias reikšmes, galėsite pasiekti operacinės sistemos nustatytą kiekvieno proceso atidaromų failų aprašų skaičiaus ribą. Tačiau galite padidinti daugelio sistemų limitą. Paprašykite savo OS dokumentacijos, kad išsiaiškintumėte, kaip tai padaryti, nes ribų keitimo būdai įvairiose sistemose labai skiriasi. table_cache susiję su max_connections. Pavyzdžiui, 200 atvirų sujungimų lentelės buferis turėtų būti ne mažesnis kaip 200 * n, kur n yra didžiausias lentelių skaičius sujungime. Atidarytų lentelių talpyklą galima padidinti iki vieno table_cache (pagal numatytuosius nustatymus 64; Tai galima padaryti naudojant mysqld -O table_cache=#选项来改变). Lentelė niekada neuždaroma, išskyrus atvejus, kai talpykla yra pilna ir kita gija bando atidaryti lentelę arba jei naudojate mysqladmin atnaujinti arba mysqladmin flush-tables. Kai lentelės talpykla pilna, serveris naudoja šią procedūrą, kad rastų talpyklos įrašą: Šiuo metu nenaudojamos lentelės skelbiamos mažiausiai naudojamų lentelės (LRU) tvarka. Jei talpykla pilna ir nėra lentelių, kurias būtų galima išleisti, bet reikia atidaryti naują lentelę, talpyklą reikia laikinai padidinti. Jei talpykla yra laikinai išplėsta ir lentelė pasikeičia iš aktyvios į neaktyvią, ji uždaroma ir paleidžiama iš talpyklos. Atidaryti kiekvienos lygiagrečios prieigos lentelę. Tai reiškia, kad jei turite 2 gijas, pasiekiančias tą pačią lentelę arba du kartus pasiekiančias lentelę toje pačioje užklausoje (su AS), lentelę reikia atidaryti du kartus. Pirmasis bet kurios lentelės atidarymas sudaro 2 failų deskriptorius; Kiekvienas papildomas lentelės naudojimas apima tik vieną failo deskriptorių. Pirmajam atidarymui failui indeksuoti naudojamas papildomas deskriptorius; Šis aprašas yra bendras visose gijose
|