Как получить истинный размер базы данных MySQL?

144

Я хотел бы знать, сколько места использует моя база данных MySQL для выбора веб-хостинга. Я нашел команду, SHOW TABLE STATUS LIKE 'table_name'поэтому, когда я делаю запрос, я получаю что-то вроде этого:

Name       | Rows | Avg. Row Length | Data_Length | Index Length
----------   ----   ---------------   -----------   ------------
table_name   400          55            362000        66560
  • числа округлены.

Итак, у меня есть 362000 или 400 * 362000 = 144800000 байт данных для этой таблицы? А что означает длина индекса? Спасибо !

Марвин
источник
у вас 362000 + 66560. Длина_длина + длина индекса
мандза
Возможный дубликат Как получить размер базы данных MySQL?
Мухаммед
Эта страница даст вам точный ответ rathishkumar.in/2017/12/…
Ратиш

Ответы:

281

От С. Пракаша, найденного на форуме MySQL :

SELECT table_schema "database name",
    sum( data_length + index_length ) / 1024 / 1024 "database size in MB",
    sum( data_free )/ 1024 / 1024 "free space in MB"
FROM information_schema.TABLES
GROUP BY table_schema; 

Или в одну строку для облегчения копирования:

SELECT table_schema "database name", sum( data_length + index_length ) / 1024 / 1024 "database size in MB", sum( data_free )/ 1024 / 1024 "free space in MB" FROM information_schema.TABLES GROUP BY table_schema; 
ron_dobley
источник
7
Что такое свободное пространство в МБ? У меня есть 100 ГБ свободного места, но он сообщает менее 1 ГБ свободного.
Барт
1
@Barth согласно документации означает «свободное место в байтах для таблиц InnoDB». К сожалению, нет объяснения, что это значит: - \
ckujau
13
Свободное пространство в байтах означает именно это - это означает, что объем пространства может быть возвращен, если вы ОПТИМИЗИРУЕТЕ таблицу или восстанавливаете ее с нуля. Когда базы данных хранят информацию на дисках, они распределяют ее по блокам; удаление записи часто освобождает блок между используемыми блоками, и очень дорого перемещать все остальные блоки, чтобы использовать это пространство, чтобы оно было помечено как «свободное». Пространство может позже использоваться самим механизмом базы данных, или может быть восстановлено с помощью OPTIMIZE TABLE foo(MyISAM), или пересоздать + проанализировать для таблиц InnoDB.
прятался
92

Вы можете получить размер базы данных Mysql, выполнив следующую команду в клиенте Mysql

SELECT  sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2))  as "Size in GB"
FROM information_schema.TABLES
WHERE table_schema = "<database_name>"
minhas23
источник
30

Если вы используете phpMyAdmin, он может сообщить вам эту информацию.

Просто зайдите в «Базы данных» (меню сверху) и нажмите «Включить статистику».

Вы увидите что-то вроде этого:

скриншот phpMyAdmin

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

Раду Мурзеа
источник
В настоящее время я использую 000webhost. У него есть phpMyAdmin, но я не смог найти флажок «включить статистику». Есть ли (может быть) запрос на это?
Марвин
1
@marvin Ну, возможно, на веб-хосте установлена ​​более старая версия phpMyAdmin. Я не знаю, в какой версии эта функция была представлена.
Раду Мурзеа
На боковой панели щелкните значок «Домой» вверху, чтобы перейти на домашнюю страницу. Там в правом окне нажмите «Базы данных». Он отображает таблицу баз данных в один столбец, ниже которой находится ссылка «Включить статистику»
VeeK
8

если вы хотите найти его в МБ, сделайте это

SELECT table_schema                                        "DB Name", 
   Round(Sum(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" 
FROM   information_schema.tables 
GROUP  BY table_schema; 
Яксон
источник
Фрагмент SQL этого ответа представляется копией stackoverflow.com/a/1733523/1200542
Ариэль Аллон,
3

В основном есть два способа: запросить базу данных (длина данных + длина индекса) или проверить размер файлов. Длина индекса связана с данными, хранящимися в индексах.

Здесь все описано:

http://www.mkyong.com/mysql/how-to-calculate-the-mysql-database-size/

MiGro
источник
Ну, эта страница является источником моего вопроса. Но согласно этому запросу у меня есть 0,5 МБ, что оставляет меня в безопасности. Я надеюсь, что это правда :) Спасибо!
Марвин
0

Ни один из ответов не включает размер служебных данных и размеры метаданных таблиц.

Вот более точная оценка «дискового пространства», выделенного базой данных.

SELECT ROUND((SUM(data_length+index_length+data_free) + (COUNT(*) * 300 * 1024))/1048576+150, 2) AS MegaBytes FROM information_schema.TABLES WHERE table_schema = 'DATABASE-NAME'
Semra
источник
5
Не могли бы вы уточнить? Особенно ваши константы 300а 150?
Мелебиус
Пожалуйста, не могли бы вы уточнить?
Аллан Андраде
0

SUM(Data_free) может или не может быть действительным . Это зависит от истории innodb_file_per_table. Больше обсуждения найдено здесь .

Рик Джеймс
источник
0

Если вы используете MySql Workbench, очень легко получить все детали размера базы данных, каждого размера таблицы, размера индекса и т. Д.

  1. Щелкните правой кнопкой мыши по схеме
  2. Выберите опцию инспектора схемы

    введите описание изображения здесь

  3. Показывает все детали размера схемы

  4. Выберите Tabs Tab, чтобы увидеть размер каждой таблицы.

    введите описание изображения здесь

  5. Размер таблицы отображается в столбце Длина данных

Вирадж Дхамал
источник
0

Если вы хотите узнать размер всех баз данных MySQL, используйте эту команду, и они покажут их соответствующие размеры в мегабайтах;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" FROM information_schema.TABLES GROUP BY table_schema;

Если у вас большие базы данных, вы можете использовать следующую команду, чтобы показать результат в гигабайтах;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;

Например YOUR_DATABASE_NAME, если вы хотите показать размер только конкретной базы данных , вы можете использовать следующий запрос;

SELECT table_schema "database", sum(data_length + index_length)/1024/1024/1024 "size in GB" FROM information_schema.TABLES WHERE table_schema='YOUR_DATABASE_NAME' GROUP BY table_schema;
Арбаб Назар
источник