MySQL: Определение размера таблицы
Рубрика: MySQL | 8 January 2009, 18:11 |
Vadim Voituk
Вот такой вот интересный запрос случайно выудил из документации MySQL:
SELECT
table_name AS table_name,
engine,
ROUND(data_length/1024/1024,2) AS total_size_mb,
table_rows
FROM
information_schema.tables
WHERE
table_schema=DATABASE();
Показывает обьем и количество строк в таблицах MySQL.
Результат выглядит приблизительно так:
+-------------------+--------+---------------+------------+
| table_name | engine | total_size_mb | table_rows |
+-------------------+--------+---------------+------------+
| categories | MyISAM | 0.00 | 17 |
| downloadlinks | InnoDB | 13.02 | 19158 |
| errors | InnoDB | 15.02 | 84104 |
| lastdownloads | MEMORY | 3.19 | 524 |
| providers | MyISAM | 0.00 | 17 |
| starstags | InnoDB | 1.52 | 14323 |
| tagids | InnoDB | 35.59 | 759694 |
| tags | InnoDB | 2036.00 | 21971934 |
| vars | InnoDB | 0.02 | 51 |
| videocategories | InnoDB | 49.58 | 1583675 |
| videos | InnoDB | 1864.00 | 1954427 |
| videos_deleted | MyISAM | 56.33 | 75889 |
| videostats2 | InnoDB | 271.88 | 3417776 |
| videostats2_daily | InnoDB | 0.02 | 266 |
+-------------------+--------+---------------+------------+
Правда есть один нюанс: на InnoDB-таблицах показывает количество незалоченных в данный момент строк.
P.S. А кто-то пробовал использовать ARCHIVE storage engine?
Как он в плане fail-over и repair?
Поделитесь good/bad experience?

Использую, уже больше года ARCHIVE как раз для архивов :)
+ Данные хорошо сжимаются. По сравниению с gzip дампа, больше в 1.5-2 раза.
+ Очень быстро проходит fullscan таблицы, для тяжелых запросов по которым сложно собрать правильный индекс работает значительно быстрее, чем myisam
- Очень долго выполняется проверка таблиц, у меня архивных таблиц на 20гиг при рестарте сервера это 1-1.5 проверки.
- Нельзя удалять данные из таблицы.
Если использовать по прямому предназначению, то это великолепное решение, в остальных случаях надо хорошо думать и все взвешивать.
* при рестарте сервера 1-1.5 часа проверка идет
Спасибо за отзыв – теперь обязательно буду пробовать.
Тоесть я так понял что если вдруг нужно перезапустить MySQL – получаем полторачасовой downtime?
Хм, а я вот как узнаю размер:
SHOW TABLE STATUS;А потом:
Вроде так :)
Skaizer,
А вам не кажется что ваш способ немного неэффективен? :)
Возможно, применить его приходилось только 1 раз, работал адекватно :)
Знаю ще кльовий спосіб – в SQLite створити базу в неї скопіювати всі дані з мускуля і в фарі подивитися розмір фалійка %))
Спосіб номер два – зробити select * from по всім таблицям і поміряти трафік %))
corsair,
Мсье знает толк в извратах.
corsair, пишешь на украинском, а примеры индусские:))))
Автор поста сам немного извращенец. Я всегда пользуюсь (и всем советую) командой:
mysqlshow -i имя_бд
Сравнил результаты – одно и тоже.
Enjoy!