Kas veido datu bāzes izmēru?
Datu bāzes kopējais izmērs ir tās tabulu izmēru summa.
Tabulas izmērs nav tikai tabulā redzamo rindu izmērs — tas ietver arī tabulas papildu funkcijas (dažādu veidu atslēgas un indeksus) un neizmantotu vietu, kas palikusi iepriekšējo pieprasījumu un darbību rezultātā.
Datu bāzes tabulas izmērs sastāv no trim daļām:
- dati
- indeksi
- virsizmaksas
Dati katram datu tipam tiek glabāti datu bāzes serverī failos, kas aizņem brīvo diska vietu serverī.
Kā apskatīt datu bāzes un tās tabulu izmēru?
Datu bāzes un tās tabulu izmēru var apskatīt, izmantojot dažādas klientprogrammas un phpMyAdmin, vai arī tieši no SSH termināļa.
Šeit izmantosim phpMyAdmin.
Pēc pieteikšanās phpMyAdmin kreisajā kolonnā izvēlies nepieciešamo datu bāzi — pirmajā cilnē Structure tiks parādītas visas tabulas, un pašās beigās, tabulas pēdējā rindā, būs redzams tabulu kopējais izmērs. Tomēr tas neietver tabulu virsizmaksas:

Lai redzētu tabulas faktisko izmēru (dati + indeksi + virsizmaksas), atver tabulas cilni Structure un apakšsadaļā Information atrodi tabulu Space usage. Rinda Effective tajā ir tabulas faktiskais izmērs datu bāzes serverī:


Kas ir tabulas virsizmaksas?
Virsizmaksas ir neatbrīvota MySQL / MariaDB datu bāzes tabulas vieta, kas ir piešķirta tabulai, bet netiek izmantota.
To var redzēt tabulā information_schema.TABLES kolonnā Data_free. Izmērs tiek rādīts baitos.
Data_free rodas neizmantotas un fragmentētas vietas dēļ, kas veidojas, dzēšot rindas no tabulas (DELETE), atjauninot rindas (UPDATE) ar lielākām vērtībām, samazinot un pārkārtojot tabulas vietu, kā arī rezervējot vietu nākotnes vaicājumiem (INSERT, UPDATE).
Kā atrast tabulas ar lielām virsizmaksām?
Ja datu bāzē ir daudz tabulu un tu nezini, kurām no tām varētu būt lielas virsizmaksas, tad, nevis skatoties katras tabulas cilni Structure, ātrāks veids, kā atrast problemātisko tabulu, ir izmantot šādu SQL vaicājumu.
SHOW TABLE STATUS WHERE `Data_free` > 0;
Vaicājuma rezultātu tabulas kolonna Data_free parāda tabulas virsizmaksas; izmēri tiek rādīti baitos:

Detalizētāks SQL vaicājums, kas parāda izmērus megabaitos katram no trim datu tipiem atsevišķi un tabulas kopējo faktisko izmēru (dati + indeksi + virsizmaksas).
Aizstāj [DATABASE_NAME] ar reālo datu bāzes nosaukumu komandā:
SELECT `TABLE_SCHEMA` AS "Database", `TABLE_NAME` AS "Table", `ENGINE`, `ROW_FORMAT`, `TABLE_ROWS`, ROUND(((`DATA_LENGTH`) / 1024 / 1024), 2) AS "Data Size (MiB)", ROUND(((`INDEX_LENGTH`) / 1024 / 1024), 2) AS "Index Size (MiB)", ROUND(((`DATA_FREE`) / 1024 / 1024), 2) AS "Overhead (MiB)", ROUND(((`DATA_LENGTH` + `INDEX_LENGTH` + `DATA_FREE`) / 1024 / 1024), 2) AS "Total Size (MiB)" FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '[DATABASE_NAME]' AND `DATA_FREE` > 0 ORDER BY `DATA_FREE` DESC;

Var redzēt, ka šīs WordPress options tabulas izmērs ir 113,3 MiB, bet neatbrīvotajā vietā ir “iestrēguši” 8337 MiB jeb 8,1 GiB — tas ir vairāk nekā 70 reizes lielāks apjoms nekā tabulas dati!

Neizmantotās vietas atbrīvošana — tabulas optimizēšana
Lai atbrīvotu tabulas neizmantoto vietu, ir jāveic tabulas optimizēšana.
Lai optimizētu tabulu, tabulas cilnē Structure sadaļā Space usage ir saite Optimize table, kā arī tā ir pieejama cilnē Operations.
Alternatīvi tabulas optimizēšanai var izpildīt SQL vaicājumu (aizstāj [DATABASE_NAME] un [TABLE_NAME] komandā ar datu bāzes un tabulas nosaukumu):
OPTIMIZE TABLE `[DATABASE_NAME]`.`[TABLE_NAME]`;