NFsec Logo

Przewidywanie przestrzeni dyskowej dla bazy danych MySQL

22/08/2012 w Administracja 1 komentarz.  (artykuł nr 364, ilość słów: 273)

M

ożliwość obserwacji tendencji wzrostu danych jest bardzo ważnym elementem dalszego planowania pojemności przestrzeni dyskowej. Na przykład dla baz MySQL 5.0+ informacje o wielkości tabel wybranych baz danych są utrzymywane są w INFORMATION_SCHEMA. W celu ich analizy wystarczy stworzyć bazę danych stats, w której będziemy okresowo umieszczać interesujące nas informacje:

create database stats;
use stats;
CREATE TABLE `tables` (
`DAY` date not null,
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`ENGINE` varchar(64) DEFAULT NULL,
`TABLE_ROWS` bigint(21) unsigned DEFAULT NULL,
`DATA_LENGTH` bigint(21) unsigned DEFAULT NULL,
`INDEX_LENGTH` bigint(21) unsigned DEFAULT NULL,
`DATA_FREE` bigint(21) unsigned DEFAULT NULL,
`AUTO_INCREMENT` bigint(21) unsigned DEFAULT NULL,
PRIMARY KEY(DAY,TABLE_SCHEMA,TABLE_NAME),
KEY(TABLE_SCHEMA,TABLE_NAME)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

Kolejnym korkiem jest umieszczenie informacji o wybranej bazie danych:

INSERT INTO stats.TABLES
SELECT DATE(NOW()),
       TABLE_SCHEMA,
       TABLE_NAME,
       ENGINE,
       TABLE_ROWS,
       DATA_LENGTH,
       INDEX_LENGTH,
       DATA_FREE,
       AUTO_INCREMENT
FROM   INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'BAZA_DANYCH';

Powyższe zapytanie możemy wyzwalać za pomocą dowolnego skryptu lub jeśli dysponujemy bazą w wersji co najmniej 5.1 skorzystać z wewnętrznego mechanizmu zdarzeń w interesujących nasz odstępach czasowych np. raz na dzień, tydzień lub miesiąc. Dzięki w/w czynnością możemy z bazy stats otrzymywać dane dotyczące szybkości przyrostu wybranych tabel naszej bazy (DATA_LENGTH), a z nich rysować wykresy przewidujące dalszą modernizację przestrzeni.

Więcej informacji: Polecenie: SHOW CREATE TABLE INFORMATION_SCHEMA.TABLES \G;, Getting History of Table Sizes in MySQL

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , , ,

1 komentarz.

  1. Należy mieć na uwadze, że zgodnie z dokumentacją wartość table_rows dla silnika InnoDB jest orientacyjna. Podziękowania dla użytkownika o nicku krogon za przesłanie informacji.