Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья5 мин чтенияПросмотры1

Как узнать размер базы и самых больших таблиц в MySQL 8.0

Диагностические SELECT-запросы к INFORMATION_SCHEMA для оценки размера баз, данных и индексов в MySQL 8.0 с объяснением ограничений InnoDB.

Комментарии 0

Стойка хранения данных и аккуратно разложенные накопители без надписей
В этой статье

Размер каталога MySQL на диске и сумма таблиц в отчёте могут различаться. База использует журналы, временные файлы, системные таблицы и свободное место внутри табличных пространств. Поэтому запрос к INFORMATION_SCHEMA отвечает на конкретный вопрос: сколько данных и индексов движок учитывает для таблиц, а не сколько гигабайт занимает весь экземпляр сервера.

Руководство предназначено для MySQL 8.0. Запросы только читают метаданные и не изменяют таблицы. Проверено 25 сентября 2026 года по официальному справочнику MySQL 8.0. Живого экземпляра MySQL в изолированном окружении не было, поэтому синтаксис и поведение сверены с документацией, но фактический план и время выполнения на стенде не измерялись. Для крупного рабочего сервера запросы выполняйте в период умеренной нагрузки и под учётной записью с минимальными правами на нужные схемы.

Посмотрите размеры пользовательских баз

Запрос суммирует объём данных и индексов, исключая системные схемы. Результат округляется до мегабайт.

SELECT table_schema AS database_name, ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb FROM information_schema.tables WHERE table_schema NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) GROUP BY table_schema ORDER BY SUM(data_length + index_length) DESC;

Столбец data_length отражает данные, а index_length — индексы. Для InnoDB оба значения приблизительные: они основаны на выделенных страницах. Это нормально для планирования и поиска крупных объектов, но не является точным счётом полезных байтов.

Найдите самые большие таблицы выбранной базы

Замените заглушку YOUR_DATABASE на имя нужной схемы. Заглушку не оставляют в рабочем запросе и не подставляют вместе с кавычками из внешнего непроверенного ввода.

SELECT table_name, engine, table_rows, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(index_length / 1024 / 1024, 2) AS index_mb, ROUND((data_length + index_length) / 1024 / 1024, 2) AS total_mb FROM information_schema.tables WHERE table_schema = 'YOUR_DATABASE' AND table_type = 'BASE TABLE' ORDER BY (data_length + index_length) DESC LIMIT 20;

Условие table_type = 'BASE TABLE' исключает представления. Ограничение LIMIT 20 оставляет первые двадцать таблиц и не влияет на данные. Поле table_rows для InnoDB — приблизительная оценка и может заметно отличаться от точного количества строк.

Отделите данные от индексов

Большой индекс не обязательно лишний. Он может ускорять критичные запросы. Но таблица, где индексы значительно тяжелее данных, заслуживает отдельной проверки: какие индексы используются, нет ли повторяющихся составных ключей и как меняется запись.

SELECT table_name, ROUND(data_length / 1024 / 1024, 2) AS data_mb, ROUND(index_length / 1024 / 1024, 2) AS index_mb, ROUND( index_length / NULLIF(data_length, 0), 2 ) AS index_to_data_ratio FROM information_schema.tables WHERE table_schema = 'YOUR_DATABASE' AND table_type = 'BASE TABLE' ORDER BY index_length DESC LIMIT 20;

Функция NULLIF защищает расчёт от деления на ноль. Коэффициент помогает сортировать кандидатов, но не доказывает избыточность индекса. Решение об удалении требует анализа запросов, ограничений уникальности и резервной копии; это уже отдельная работа, которой в руководстве нет.

Почему цифры могут быть не свежими

MySQL кэширует статистику таблиц. По умолчанию срок её действия может составлять 24 часа. Запрос к INFORMATION_SCHEMA способен показать прежнюю оценку после большой загрузки или удаления данных.

Команда ANALYZE TABLE обновляет статистику, но это уже операция изменения служебных данных и может влиять на нагрузку и планы запросов. Не запускайте её автоматически только ради красивого отчёта. Если нужны свежие оценки, согласуйте окно и последствия с администратором.

Что не входит в сумму таблиц

  • Бинарные журналы и relay log репликации.

  • Redo и undo, системное табличное пространство и служебные файлы InnoDB.

  • Временные таблицы и временные файлы запросов.

  • Резервные копии, дампы и журналы приложения рядом с каталогом базы.

  • Свободное место внутри общего табличного пространства, которое нельзя однозначно приписать одной таблице.

Поэтому для задачи «почему заканчивается диск» запрос дополняют проверкой файловой системы и конфигурации MySQL. Для задачи «какие таблицы растут» полезнее сохранять результаты одинакового запроса по датам и сравнивать прирост.

Критерий завершённой проверки

  1. Зафиксирована версия MySQL и имя анализируемой схемы.

  2. Получены размеры баз и первые двадцать таблиц.

  3. Отдельно просмотрены данные и индексы, но выводы об удалении не сделаны по одному коэффициенту.

  4. Отмечено время получения и возможная давность статистики.

  5. Свободное место диска проверено отдельно от оценки таблиц.

  6. Если рост неожиданный, определён владелец таблицы и период, за который нужно сравнить данные.

Диагностические SELECT-запросы безопаснее, чем попытка сразу уменьшать таблицу, но на большом экземпляре даже чтение метаданных может занять время. Если сервер уже перегружен или реплика отстаёт, остановитесь после минимального запроса и согласуйте продолжение с администратором базы.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.