Viena no visizplatītākajām un populārākajām relāciju datubāzēm ir MySQL. Tīmekļa lietojumprogrammas un pakalpojumi bieži tiek veidoti uz šīs datubāzes pamata. Tomēr, lai nodrošinātu stabilu darbību un augstu veiktspēju, ir nepieciešama pareiza MySQL konfigurācija, īpaši, ja to palaiž uz VPS. MySQL servera optimizācija ļauj efektīvi izmantot resursus un uzlabot atbildes laiku pie pieprasījumiem, kas ir īpaši svarīgi augstas slodzes lietojumprogrammām.
MySQL: instalācija uz VPS
MySQL instalācija jūsu serverī ir nepieciešama pirms optimizācijas uzsākšanas. Lai saprastu, kā to izdarīt, sniegsim jums soli pa solim instrukciju šim procesam divām operētājsistēmām.
Instalācijas process Ubuntu/Debian
-
Instalējiet jaunāko pakotņu pārvaldnieka versiju:
sudo apt update
2. Veiciet MySQL instalāciju:
sudo apt install mysql-server
3. Nākamais solis ir MySQL iedarbināšana, pēc kuras jāiestata automātiska palaišana, kad jūsu operētājsistēma tiek ielādēta:
sudo systemctl start mysql
sudo systemctl enable mysql
Instalācijas process CentOS/RHEL
-
Nepieciešams instalēt MySQL no repozitorija:
sudo yum install mysql-server -
Tālāk nepieciešams iedarbināt MySQL un iestatīt automātisko palaišanu:
sudo systemctl start mysqld
sudo systemctl enable mysqld -
Palaidiet sākotnējo konfigurāciju, lai uzlabotu drošību:
sudo mysql_secure_installation
MySQL: optimizācijas process
Lai uzlabotu veiktspēju, ir jāveic MySQL konfigurācijas izmaiņas pēc instalācijas procesa pabeigšanas. Optimizācija ietver vairākus virzienus: kešatmiņu, indeksēšanu un konfigurācijas iestatījumus.
1. Kešatmiņas iestatījumi
Kešatmiņa MySQL ļauj saglabāt datus, kas bieži tiek pieprasīti, tādējādi samazinot slodzi uz datubāzi un paātrinot atbildes laiku. Tālāk sniegsim sarakstu ar galvenajiem parametriem kešatmiņas iestatīšanai:
-
query_cache_size — pieprasījumu kešatmiņas apjoms. Lielāks apjoms uzlabo veiktspēju.
-
query_cache_limit — ierobežojums kešojamā rezultāta izmēram.
-
innodb_buffer_pool_size — galvenais parametrs InnoDB, kas nosaka atmiņas daudzumu, kas paredzēta datu un indeksu glabāšanai kešatmiņā.
Kešatmiņas konfigurēšanas brīdī izmaiņas visbiežāk tiek veiktas failā my.cnf, kas atrodas direktorijā /etc/mysql/ vai /etc/ lielākajā daļā Linux serveru.
Šeit ir detalizēta rokasgrāmata kešatmiņas parametru piemērošanai:
1. solis: Atveriet MySQL konfigurācijas failu
Atveriet failu my.cnf rediģēšanai. Atkarībā no sistēmas var būt nepieciešams izpildīt komandu administratora vārdā:
sudo nano /etc/mysql/my.cnf
2. solis: Atrodiet sadaļu [mysqld]
Lai kešatmiņas parametri darbotos MySQL serverī, tie jāiekļauj sadaļā [mysqld].
3. solis: Ievadiet kešatmiņas parametrus
Kopējiet zemāk norādītās konfigurācijas un piemērojiet tās dokumentā my.cnf sadaļā [mysqld]:
[mysqld]
query_cache_type = 1 # Pieprasījumu kešatmiņas aktivizēšana
query_cache_size = 64M # Kešatmiņas apjoma noteikšana
query_cache_limit = 1M # Maksimālais rezultāta apjoms pieprasījumam kešatmiņā
table_open_cache = 2000 # Kopējais tabulu skaits, kas tiek glabātas kešatmiņā
thread_cache_size = 50 # Kešā var glabāties pavedienu skaits
Pievērsiet uzmanību: Iestatītās vērtības, piemēram, 64M query_cache_size, var mainīt atbilstoši jūsu vajadzībām.
4. solis: Pārstartējiet MySQL, lai izmaiņas stātos spēkā
Pēc rediģēšanas saglabājiet failu un iziet no redaktora. Lai to izdarītu, jāveic MySQL pārstartēšana, izmantojot komandu:
sudo systemctl restart mysql
Kešatmiņas iestatījumu pārbaude
Lai pārbaudītu, vai izmaiņas ir stājušās spēkā, jāizpilda komanda:
SHOW VARIABLES LIKE 'query_cache%';
SHOW VARIABLES LIKE 'table_open_cache';
SHOW VARIABLES LIKE 'thread_cache_size';
Šīs komandas parādīs pašreizējo parametru stāvokli, ļaujot pārbaudīt to pareizību un, ja nepieciešams, precizēt iestatījumus.
2. Tabulu indeksēšana
Indeksēšana MySQL — tas ir veids, kā uzlabot veiktspēju, kas ļauj optimizēt meklēšanu un informācijas iegūšanu no datubāzes. Indeksi tiek izveidoti tabulu kolonnām un palīdz MySQL serverim ātrāk atrast rindas, kas atbilst pieprasījuma nosacījumiem, samazinot pārskatāmo rindu skaitu. Līdzīgi kā grāmatas satura rādītājs, indekss norāda, kur var atrast nepieciešamos datus, neizskatot visu informācijas masīvu.
Kāpēc nepieciešama indeksēšana?
-
Pieprasījumu paātrināšana: indeksi nodrošina ātrāku informācijas atklāšanu un iegūšanu no MySQL servera, kas būtiski palielina pieprasījumu apstrādes efektivitāti.
-
Slodzes samazināšana uz serveri: ievades-izvades skaits, pateicoties indeksēšanai, kļūst mazāks, atvieglojot pieprasījumu apstrādi un tādējādi samazinot servera slodzi.
-
Savienojumu (JOIN) operāciju optimizācija: indeksi palīdz ātrāk atrast un salīdzināt rindas, apvienojot vairākas tabulas.
-
Sakārtošanas un grupēšanas uzlabošana: izmantojot indeksus, MySQL var ātrāk veikt ORDER BY un GROUP BY operācijas.
Kad un kādus indeksus izmantot?
-
Pamatslēga (PRIMARY KEY): tiek izveidota unikālam katras ieraksta identifikatoram (piemēram, lietotāja identifikators). MySQL automātiski izveido indeksu pamatslēgai.
-
Unikālie indeksi (UNIQUE): tiek izmantoti laukiem, kuru vērtībām jābūt unikālām (piemēram, e-pasts).
-
Parastie indeksi (INDEX): noderīgi kolonnām, kas bieži tiek izmantotas WHERE meklēšanas nosacījumos vai JOIN savienojumos.
-
Kompozītmateriālu indeksi: indeksē vairākas kolonnas, kas ir ērti, lai optimizētu sarežģītus pieprasījumus ar vairākiem nosacījumiem.
Indeksēšanas piemēri
Apskatīsim dažus reālus gadījumus, kur tiek izmantoti indeksi.
1. Indeksēšana kolonnai ar biežiem pieprasījumiem
Pieņemsim, ka mums ir tabula orders, kas satur kolonnas id, customer_id un status. Ja pieprasījumi bieži izvēlas pasūtījumus pēc status, tad, lai būtiski paātrinātu šādu pieprasījumu izpildi, jums ir jāizveido indekss kolonnai status.
CREATE INDEX idx_status ON orders(status);
Pēc pieprasījuma izpildes:
SELECT * FROM orders WHERE status = 'completed';
MySQL izmantos indeksu, lai ātri atrastu rindas ar status = 'completed', neapskatot visas tabulas rindas.
2. Unikālie indeksi datu ierobežošanai
Ja mēs vēlamies ierobežot dublēšanos e-pasta laukā tabulā users, varam izveidot unikālu indeksu:
CREATE UNIQUE INDEX idx_email ON users(email);
Tagad mēģinājums ievietot atkārtotu e-pastu izraisīs kļūdu, jo unikālais indekss aizliedz dublikātus.
3. Indeksi sarežģītiem pieprasījumiem, kas sastāv no vairākiem komponentiem
Kad mums ir pieprasījumi, kas bieži izvēlas datus pēc vairākiem laukiem, piemēram, pēc firstname un lastname tabulā employees, tad varam izveidot kompozītmateriālu indeksu:
CREATE INDEX idx_name ON employees(firstname, lastname);
Tagad, izpildot komandu:
SELECT * FROM employees WHERE firstname = 'John' AND lastname = 'Doe';
Izvēle tiks veikta ātrāk, jo MySQL izmantos kompozītmateriālu indeksu un vairs nav nepieciešams pārbaudīt visus ierakstus.
Indeksi: uzturēšana un aktualizācija
Jāatceras, ka galvenā rekomendācija ir tāda, ka ir lietderīgi veikt indeksēšanu tikai kolonnām, kas bieži piedalās pieprasījumos, kā arī laiku pa laikam pārskatīt to aktualitāti. Galu galā indeksi aktīvi izmanto diska vietu, būtiski palēnina atjaunināšanas, dzēšanas ierakstu un ievietošanas procesu. Iemesls tam ir nepieciešamība pārrēķināt pie katras datu izmaiņas.
Indeksi: piemērs monitorēšanai
Jūs varat izmantot sekojošo komandu, lai apskatītu indeksus:
SHOW INDEX FROM orders;
Tas sniedz mums informāciju par to, kādi indeksi ir izveidoti, to veidu un uz kādām kolonnām tie attiecas.
3. Savienojumu parametru iestatīšana
Parametri, kas atbild par vienlaicīgu savienojumu skaitu, ļauj elastīgi pārvaldīt slodzi uz serveri. Galvenie parametri:
-
max_connections — maksimālais savienojumu skaits.
-
wait_timeout — gaidīšanas laiks neaktīviem savienojumiem.
[mysqld]
max_connections = 200
wait_timeout = 600
MySQL atbalsts un monitorings
Lai uzturētu MySQL veiktspēju, ir svarīgi sekot tā stāvoklim un periodiski veikt optimizāciju. Izmantojiet šādus pieejas veidus:
-
MySQL procesu monitorings: lai novērotu izpildāmās komandas, varat izmantot komandas SHOW PROCESSLIST vai specializētas utilītas.
Regulāri veiciet tabulu optimizācijas procesu, izmantojot atbilstošo komandu:
OPTIMIZE TABLE table_name;
-
Monitoringa automatizācija: Iestatiet monitoringu, izmantojot tādus rīkus kā MySQL Workbench, Percona Monitoring and Management vai Grafana, lai pastāvīgi uzraudzītu veiktspēju.
Secinājums
MySQL konfigurācija un optimizācija uz VPS palīdz uzlabot lietojumprogrammu efektivitāti un stabilitāti. Izmantojot aprakstītās metodes, jūs varat uzlabot datu apstrādes ātrumu, samazināt aiztures un palielināt MySQL servera uzticamību. Regulāra iestatījumu atjaunināšana un monitorings palīdz saglabāt augstu veiktspēju ilgtermiņā.
Indeksēšana — svarīga tehnika MySQL veiktspējas optimizācijai. Tā iegūst īpašu efektivitāti, strādājot ar pieprasījumiem, kas satur filtrēšanu un sakārtošanu, kā arī ar lielām tabulām. Pareizi piemērojot indeksus, ievērojami uzlabojas datubāzes darbības ātrums. Tomēr ir svarīgi atcerēties par piesardzīgu to pielietošanu, koncentrējoties uz patiešām svarīgām kolonnām, kas nepieciešamas meklēšanas, sakārtošanas vai apvienošanas nosacījumu izpildei.