1. Home
  2. Техническое
  3. MariaDB / MySQL
  4. Размер базы данных
  1. Home
  2. Техническое
  3. Размер базы данных

Размер базы данных

Что определяет размер базы данных?

Общий размер базы данных – это сумма размеров ее таблиц.

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

Размер таблицы базы данных состоит из трех частей:

  • данные
  • индексы
  • оверхед

Данные для каждого типа данных хранятся на сервере базы данных в файлах, которые занимают свободное дисковое пространство на сервере.

Внимание!

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

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

Размер базы данных и ее таблиц можно посмотреть с помощью различных клиентских программ и phpMyAdmin или непосредственно из SSH-терминала.

Инструкция

Как войти в phpMyAdmin?

Для этого мы будем использовать phpMyAdmin.

Войдя в phpMyAdmin, выберите нужную базу данных в левой колонке, для которой на первой вкладке Structure отобразятся все таблицы, а в самом конце, в последней строке таблицы, будет показан общий размер таблиц. Однако это не включает оверхед таблиц:

phpMyAdmin - Database Tables

Чтобы узнать реальный размер таблицы (данные + индексы + оверхед), нужно перейти на вкладку Structure таблицы и найти таблицу Space usage в подразделе Information. В строке Effective – фактический размер таблицы на сервере базы данных:

phpMyAdmin - Structure of the table

phpMyAdmin - Space usage of the table

Что такое оверхед таблицы?

Оверхед – это неосвобожденное пространство таблицы базы данных MySQL / MariaDB, которое выделено для таблицы, но не используется.

Это можно увидеть в таблице information_schema.TABLES в столбце Data_free. Размер отображается в байтах.

Причиной Data_free является неиспользованное и фрагментированное пространство из-за удаления строк из таблицы (DELETE), обновления строк (UPDATE) с большими значениями, уменьшения и перегруппировки пространства таблицы, резервирования места для будущих запросов (INSERT, UPDATE).

Data_free

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

Как найти таблицы с большими оверхед?

Если в базе данных имеется большое количество таблиц и вы не знаете, какая из них может иметь большие оверхед, вместо того чтобы просматривать вкладку Structure для каждой таблицы, более быстрый способ найти проблемную таблицу – использовать следующий SQL-запрос.

Чтобы сделать SQL-запрос в phpMyAdmin, вам нужно перейти на вкладку SQL, написать или вставить запрос в текстовое поле, а затем нажать кнопку Go, чтобы выполнить запрос.

SHOW TABLE STATUS WHERE `Data_free` > 0;

Столбец Data_free таблицы результатов запроса показывает объем таблицы, размеры отображаются в байтах:

phpMyAdmin - SQL query: SHOW TABLE STATUS

Более подробный SQL-запрос, показывающий размеры в мегабайтах каждого из трех типов данных в отдельности и общий фактический размер таблицы (данные + индексы + оверхед).
Замените в команде [DATABASE_NAME] на фактическое имя базы данных:

SELECT `TABLE_SCHEMA` AS "Database", `TABLE_NAME` AS "Table", `ENGINE`, `ROW_FORMAT`, `TABLE_ROWS`, ROUND(((`DATA_LENGTH`) / 1024 / 1024), 2) AS "Data Size (MiB)", ROUND(((`INDEX_LENGTH`) / 1024 / 1024), 2) AS "Index Size (MiB)", ROUND(((`DATA_FREE`) / 1024 / 1024), 2) AS "Overhead (MiB)", ROUND(((`DATA_LENGTH` + `INDEX_LENGTH` + `DATA_FREE`) / 1024 / 1024), 2) AS "Total Size (MiB)" FROM `information_schema`.`TABLES` WHERE `TABLE_SCHEMA` = '[DATABASE_NAME]' AND `DATA_FREE` > 0 ORDER BY `DATA_FREE` DESC;

phpMyAdmin - SQL query: SELECT all sizes and total size results

Видно, что размер таблицы опций WordPress составляет 113,3 MiB, а под неосвобожденное пространство засунуто 8337 MiB или 8,1 GiB – это более чем в 70 раз больше, чем размер данных таблицы!

phpMyAdmin - SQL query: SELECT al sizesl and total size

Освобождение неиспользуемого пространства – оптимизация таблиц

Чтобы освободить неиспользуемое пространство таблицы, необходимо провести оптимизацию таблицы.

Для оптимизации таблицы существует ссылка Optimize table в таблице Space usage на странице вкладки Structure, а также на странице вкладки Operations.

В качестве альтернативы можно составить SQL-запрос для оптимизации таблицы (замените [DATABASE_NAME] и [TABLE_NAME] в команде на название базы данных и таблицы):

OPTIMIZE TABLE `[DATABASE_NAME]`.`[TABLE_NAME]`;
Внимание!

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

Более подробную информацию можно найти в документации к соответствующей базе данных:
MariaDB: OPTIMIZE TABLE
MySQL: OPTIMIZE TABLE Statement

Updated on 14. Nov 2024
Was this article helpful?

Related Articles