Определите, какая таблица занимает больше всего места на диске в MySQL

Как проще всего определить, какая таблица занимает больше всего места на диске?

Помеха: у меня нет MySQL сервера, только файл со всеми данными (dump.sql)


person astropanic    schedule 16.03.2010    source источник


Ответы (3)


Вы можете захотеть загрузить сервер MySQL, установить его на свой локальный хост, импортируйте файл дампа, а затем используйте:

SELECT   table_schema, 
         table_name, 
         data_length, 
         index_length 
FROM     information_schema.tables
ORDER BY data_length DESC;
person Daniel Vassallo    schedule 16.03.2010
comment
Я сказал, что ищу решение без сервера MySQL, меня интересуют только идеи обработки текста - person astropanic; 16.03.2010
comment
@astropanic: Это правда, но почему вы не можете установить его на свой локальный компьютер? Для каждой платформы существует своя версия MySQL, и она устанавливается за считанные минуты. Вы также можете установить его на виртуальную машину. - person Daniel Vassallo; 16.03.2010

Если вы работаете в Linux, вы можете сканировать файл дампа на предмет самой длинной строки, которая может (а может и не быть!) Быть самой большой таблицей в зависимости от индексов, структуры и т. Д., Но это будет неплохим предположением, если вы не можете получить сервер.

awk ' { if ( length > L ) { L=length ;s=$0 } }END{ print L,"\""s"\"" }' /root/sql/_common.all.301009.sql  | cut -c 1-100

Это покажет вам первые 100 символов самой длинной строки. Это может не сработать, если у вас есть, например, несколько вставок для каждой таблицы в вашем файле дампа (с параметрами --extended-insert или --opt).

person Andy    schedule 16.03.2010

Быстрое решение может заключаться в том, чтобы сделать что-то подобное для каждой таблицы в дампе:

cat dump.sql | grep -i '^INSERT INTO `table1`' | wc -c

(Я надеюсь, что вы используете Linux, в противном случае вы можете установить Cygwin, чтобы получить некоторые функциональные возможности командной строки Linux в системе Windows)

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

person tux21b    schedule 16.03.2010
comment
Вам нужно будет предварительно обработать файл дампа в отдельные таблицы, чтобы использовать эту команду - она ​​выведет только общее количество символов в этой форме. - person Andy; 16.03.2010
comment
Вот почему между cat и wc -c находится команда grep. Это на лету создаст вот такой индивидуальный дамп ... - person tux21b; 16.03.2010
comment
Я не понимаю, как это работает, когда я выполняю, я получаю только сумму символов из всех строк? - person Andy; 16.03.2010
comment
Когда вы выполняете только первую часть команды cat dump.sql | grep -i '^INSERT INTO table1', вы должны видеть только строки, начинающиеся с INSERT INTO table1, и никаких строк, начинающихся с INSERT INTO table2 или что-то в этом роде. Эти заявления фильтруются. wc -c затем отобразите байты только совпадающих строк. - person tux21b; 16.03.2010