Zauzetost InnoDB tablespace-a

InnoDB … odličan storage engine u vlasništvu ORACLE-a, jedini native transakcioni engine u MySQL-u (a toliko frke oko toga da “ORCL” oće da kupi “JAVA” a već je vlasnik najbitnijeg dela) ima osobinu da po default-u, tj ako nije odabrano file-per-table, drži sve tabele u jednom fajlu, tj u nekoliko (taj jedan moze da dobije svoju braću). I taj fajl se NIKADA ne smanjuje… nemamo pojma koji deo tog fajla je iskoršten, koliko naše tabele stvarno zauzimaju mesta, koliko imamo slobodno etc.. Kada uradimo delete iz tabele, taj prostor se posle koristi za neke druge podatke i nikada se ne vraća fajl sistemu (opet, osim ako ne koristimo file per table).

Dakle, kako da saznamo koliko mesta ima u tom tablespace-u, koliko zauzetog, koliko slobodnog?

Prva stvar koja nam treba je InnoDB monitor. Da bi ga upalili potrebno je da kreiramo jednu tabelu:

CREATE TABLE  innodb_tablespace_monitor ENGINE=InnoDB;

Ovo neće kreirati nikakvu tabelu već će dojaviti InnoDB-u da kresne innodb monitor. Dotični će se pojaviti u log fajlu i kada u istom primetimo:

================================================
YYMMDD HH:MM:SS INNODB TABLESPACE MONITOR OUTPUT
================================================

možemo da ugasimo InnoDB monitor (tako što ćemo obrisati onu tabelu)

DROP TABLE  innodb_tablespace_monitor;

Sada treba da ždraknemo log file i tamo pronađemo:

FILE SPACE INFO: id 0
size #####, free limit ####, free extents ###

ovde nas zanima ova vrednost za size. To će nam reći veličinu tablespace-a u stranicama. Jedna stranica je 16 kilobajta.

Brzo zatim, treba da naiđemo na gomilu podataka o segmentima:

SEGMENT id 0 14 space 0; page 2; res 0 used 0; full ext 0
fragm pages 0; free extents 0; not full extents 0: pages 0
SEGMENT id 0 15 space 0; page 2; res 160 used 160; full ext 2
fragm pages 32; free extents 0; not full extents 0: pages 0
SEGMENT id 0 25 space 0; page 2; res 4161 used 4115; full ext 64
fragm pages 1; free extents 0; not full extents 1: pages 18

Ako saberemo vrednosti za “used” dobićemo koliko tačno stranica imamo zauzeto u tablespace-u. Naravno ako pomnožimo to sa 16 kilobajta …

Na MySQL Forge možemo naći odličan skript koji će ove podatke o segmentima izvaditi i izmnožiti kako mi ne bi slučajno izgubili koji minut računajući sami …. čemu služe računari ako ne tome…

VN:F [1.9.22_1171]
Rating: +1 (from 3 votes)
November 4, 2009 • Tags:  • Posted in: Support

Leave a Reply