SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.08.2010 17:14:56

boa
Завсегдатай
Зарегистрирован: 22.06.2010
Сообщений: 38

How to: размер таблицы или БД в байтах

Hi people!

Столкнулся с необходимостью мониторить размер БД на сервере.
Написал такой запрос:
SELECT (sum(data_length)+sum(index_length)) as mybdBytes
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'mybd'

Вроде бы все клево, но посмотрев в директорию где находятся файлы таблиц базы данных, обнаружил что они имеют куда больший объем.

Т.е. например mybd.table1 имеет два файла table1.ibd размером 30мб и table1.frm около 8кб (это определение таблицы, и оно у всех таблиц имеет одинаковый маленький размер), Mysql же показывает для этой таблицы что для нее data_length+index_length примерно равно 20мб.

Тогда вопрос - как правильно узнавать размер таблиц? где смотреть?

Неактивен

 

#2 10.08.2010 17:47:44

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: How to: размер таблицы или БД в байтах

Правильно смотреть в файловой системе, если Вас интересуют размеры файлов smile

У InnoDB есть определенные накладные расходы. Можете смотреть их через
SHOW TABLE STATUS LIKE 'table1'. В поле комментария будет innodb table free —
это как раз свободное место, которое выделено в ФС, но не использовано под
данные.

Неактивен

 

#3 10.08.2010 18:00:20

boa
Завсегдатай
Зарегистрирован: 22.06.2010
Сообщений: 38

Re: How to: размер таблицы или БД в байтах

Действительно, уже более похоже на истину, но  все же размер data_length+index_length+data_free меньше где-то на 10-20% чем размер файла в файловой системе.
И вот еще вопрос - в файл ibdata1 все равно чтото записывается даже при вкюченной опции table_per_file, может ли это сказаться на точности измерения размера БД? По существу, задача измерить размер БД сводится тогда к задаче узнать размер одноименной директории.

Неактивен

 

#4 10.08.2010 18:12:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: How to: размер таблицы или БД в байтах

С точностью до байта, к сожалению, все равно посчитать не удастся. Помимо данных,
индексов и data_free есть разнообразная системная информация (например, внешние
ключи — это отдельные таблички внутри InnoDB, которые видны только в tablespace
и из MySQL их получить нельзя, и померять их размер, соответственно, тоже). В ibdata1
InnoDB старается хранить все не привязанные к конкретной таблице данные. Плюс в
отдельных файликах надо понимать, что информация располагается постранично (т.е.
если данных 10кбайт, а страница 16к, то занято будет 16, а в data_size будет написано
10). Этот overhead можно погасить частично, если уменьшить размер страницы (и вклю-
чив тем самым сжатие данных, т.к. в памяти InnoDB все равно работает со страничками
размером в 16к).

Но du -s меня никогда еще не подводил wink

Неактивен

 

#5 10.08.2010 18:22:09

boa
Завсегдатай
Зарегистрирован: 22.06.2010
Сообщений: 38

Re: How to: размер таблицы или БД в байтах

Понятноsmile
Спасибо за разъяснение.
du -s оно конечно хорошо, просто хотелось узнать точнее некоторые моментыsmile

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson