Задавайте вопросы, мы ответим
Вы не зашли.
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мб.
Тогда вопрос - как правильно узнавать размер таблиц? где смотреть?
Неактивен
Правильно смотреть в файловой системе, если Вас интересуют размеры файлов
У InnoDB есть определенные накладные расходы. Можете смотреть их через
SHOW TABLE STATUS LIKE 'table1'. В поле комментария будет innodb table free —
это как раз свободное место, которое выделено в ФС, но не использовано под
данные.
Неактивен
Действительно, уже более похоже на истину, но все же размер data_length+index_length+data_free меньше где-то на 10-20% чем размер файла в файловой системе.
И вот еще вопрос - в файл ibdata1 все равно чтото записывается даже при вкюченной опции table_per_file, может ли это сказаться на точности измерения размера БД? По существу, задача измерить размер БД сводится тогда к задаче узнать размер одноименной директории.
Неактивен
С точностью до байта, к сожалению, все равно посчитать не удастся. Помимо данных,
индексов и data_free есть разнообразная системная информация (например, внешние
ключи — это отдельные таблички внутри InnoDB, которые видны только в tablespace
и из MySQL их получить нельзя, и померять их размер, соответственно, тоже). В ibdata1
InnoDB старается хранить все не привязанные к конкретной таблице данные. Плюс в
отдельных файликах надо понимать, что информация располагается постранично (т.е.
если данных 10кбайт, а страница 16к, то занято будет 16, а в data_size будет написано
10). Этот overhead можно погасить частично, если уменьшить размер страницы (и вклю-
чив тем самым сжатие данных, т.к. в памяти InnoDB все равно работает со страничками
размером в 16к).
Но du -s меня никогда еще не подводил
Неактивен
Понятно
Спасибо за разъяснение.
du -s оно конечно хорошо, просто хотелось узнать точнее некоторые моменты
Неактивен