Як отримати справжній розмір бази даних 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. Data_Length + Довжина індексу
мандза


Ця сторінка дасть точну відповідь rathishkumar.in/2017/12/…
Rathish

Відповіді:


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; 

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>"

30

Якщо ви використовуєте phpMyAdmin, він може повідомити вам цю інформацію.

Просто перейдіть до "Бази даних" (меню вгорі) і натисніть "Увімкнути статистику".

Ви побачите щось подібне:

скриншот phpMyAdmin

Це, ймовірно, втратить певну точність у міру збільшення розмірів, але це повинно бути досить точним для ваших цілей.


Зараз я використовую 000webhost. Він має phpMyAdmin, але я не зміг знайти прапорець "включити статистику". Чи є запит щодо цього?
marvin

1
@marvin Ну, можливо, у веб-хості встановлена ​​старіша версія phpMyAdmin. Я не знаю, в якій версії ця функція була введена.
Radu Murzea

На бічній панелі клацніть піктограму «Головна» вгорі, яка переведе вас на домашню сторінку. Там у правому вікні натисніть "Бази даних". Він відображає таблицю баз даних у одному стовпчику, нижче - посилання під назвою "Увімкнути статистику"
VeeK


3

В основному є два способи: запит БД (довжина даних + довжина індексу) або перевірка розміру файлів. Довжина індексу пов'язана з даними, що зберігаються в індексах.

Тут все описано:

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


Ну, ця сторінка є джерелом мого запитання. Але відповідно до цього запиту, у мене є 0,5 Мб, що залишає мене досить безпечним. Я сподіваюся, що це правда :) Дякую!
marvin

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'

5
Не могли б ви детальніше? Особливо ваші константи 300і 150?
Мелебій

Будь ласка, не могли б ви детальніше?
Аллан Андраде

0

SUM(Data_free) може чи не може бути дійсним . Це залежить від історії Росії innodb_file_per_table. Більше дискусій можна знайти тут .



0

Якщо ви використовуєте MySql Workbench, дуже легко отримати всі деталі розміру бази даних, кожного розміру таблиці, розміру індексу тощо.

  1. Клацніть правою кнопкою миші на схемі
  2. Виберіть Інспектор схеми параметр

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

  3. Він показує всі деталі розміру схеми

  4. Виберіть вкладку « Таблиці », щоб побачити розмір кожної таблиці.

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

  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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.