Назад | Перейти на главную страницу

Как получить оценку размера дампа таблицы mysql

Всем привет, кто-нибудь знает, как оценить размер одной таблицы mysql? Я имею в виду, что я планирую сделать резервную копию всей таблицы mysql на всем моем сервере, но я хотел бы знать, насколько большой должна быть каждая таблица дампа без физического дампа. Есть какая-то команда, которая разрешает это делать? Я использую mysql 5.1 на debian 6 Cheers

Как видно Вот, вы можете запускать эти запросы в своей базе данных (были украдены из комментариев на странице, а затем изменены).

  • По базе данных:

SELECT table_schema 'database', concat( round( sum( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) size FROM information_schema.TABLES WHERE ENGINE=('MyISAM' || 'InnoDB' ) GROUP BY table_schema;

  • По таблице:

SELECT concat( table_schema, '.', table_name ) table_name, concat( round( data_length / ( 1024 *1024 ) , 2 ) , 'M' ) data_length, concat( round( index_length / ( 1024 *1024 ) , 2 ) , 'M' ) index_length, concat( round( round( data_length + index_length ) / ( 1024 *1024 ) , 2 ) , 'M' ) total_size FROM information_schema.TABLES ORDER BY ( data_length + index_length ) DESC;

Поскольку mysqldump является логическим представлением базы данных, вы найдете только фактические данные. Индексы никогда не хранятся в mysqldump, но определение таблицы будет указывать, как заполнять индексы.

Трудно выбрать точное число для mysqldump из-за того, что записано в mysqldump:

  • Расширенные команды INSERT с десятками, сотнями или тысячами строк
    • десятки или сотни скобок и запятых на INSERT
  • Команды создания таблицы
  • Директивы для
    • Отключение внешних ключей и уникальных ключей на время работы mysqldump
    • Запись файла журнала и положение mysqldump
    • Отключение / включение индексов (только MyISAM)
    • Блокировка всей таблицы для записи
    • Сохранение / восстановление глобальных переменных

То, что вы можете измерить как фактор, - это просто сумма data_lengths:

SELECT SUM(data_length)/POWER(1024,2) TotalDB_MB
FROM information_schema.tables;

Чтобы увидеть сумму по базе данных и общую сумму:

SELECT table_schema,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema
WITH ROLLUP;

Чтобы просмотреть промежуточные итоги каждой таблицы и баз данных:

SELECT table_schema,table_name,SUM(data_length)/POWER(1024,2) DB_MB
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY table_schema,table_name
WITH ROLLUP;

Вы можете использовать следующие

  • POWER(1024,1) отчеты в КБ
  • POWER(1024,2) отчеты в МБ
  • POWER(1024,3) отчеты в ГБ
  • POWER(1024,4) отчеты по туберкулезу
  • POWER(1024,5) отчеты в PB
    • Это PetaBytes
    • Если вам нужно использовать это, я беру разумную плату за консультации

Вы можете использовать эту формулу

  • NOC = количество столбцов в таблице
  • NumCommas = NOC - 1
  • NumQuotes = NumCharacterColumnsInTable X 2
  • NumRows = Количество строк в таблице
  • NumParens = NumRows X 2
  • CharactersForSQLPerTable = NumRows X (NumCommas + NumQuotes) + NumParens

Окончательная формула приблизительного размера mysqldump

  • CharactersForSQLPerTable X NumberOfTables
  • + Characters for "INSERT INTO tblname VALUES "
  • + TotalDB_MB