1. Home
  2. Tehnisks
  3. Datu bāzes izmērs
  1. Home
  2. MariaDB / MySQL
  3. Datu bāzes izmērs

Datu bāzes izmērs

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ī.

Uzmanību!

Pat ja rindu skaits un datu apjoms tabulā ir mazs vai tabula ir pilnībā tukša, tai joprojām var būt neizmantota vieta (virsizmaksas) iepriekšējo darbību dēļ, un līdz ar to tabulas faili, kuros ir šī neizmantotā vieta, joprojām aizņems vietu datu bāzes servera diskā.

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:

phpMyAdmin - Datu bāzes tabulas

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ī:

phpMyAdmin - Tabulas struktūra

phpMyAdmin - Tabulas diska vietas izmantojums

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).

Data_free

Lai gan Data_free vieta netiek izmantota un tieši neatspoguļojas datu bāzes izmērā, tā joprojām fiziski aizņem diska vietu datu bāzes serverī kā datu bāzes tabulas fails.

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.

Lai izpildītu SQL vaicājumu phpMyAdmin, atver cilni SQL, ieraksti vai ielīmē vaicājumu teksta laukā un pēc tam nospied pogu Go, lai izpildītu 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:

phpMyAdmin - SQL vaicājums: SHOW TABLE STATUS

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;

phpMyAdmin - SQL vaicājums: SELECT visu izmēru un kopējā izmēra rezultāti

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!

phpMyAdmin - SQL vaicājums: SELECT visu izmēru un kopējā izmēra vaicājums

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]`;
Uzmanību!

Ļoti lielām tabulām optimizēšana var aizņemt ilgu laiku, kura laikā tabula var tikt bloķēta un tāpēc lietotnei nebūt pieejama.
Tāpēc ieteicams neveikt optimizēšanu pīķa noslodzes laikā.

Lasi vairāk attiecīgās datu bāzes dokumentācijā:
MariaDB: OPTIMIZE TABLE
MySQL: OPTIMIZE TABLE Statement

 

Updated on 13. Nov 2024
Was this article helpful?

Related Articles