Логотип

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL?

Настройка производительности SQL - Советы по оптимизации запросов MySQL
  • Думаете, фрагментация таблицы будет происходить только с DELETE?
  • Верите ли вы, что INSERT также приведет к фрагментации таблицы?

Да, INSERT с ROLLBACK также может создавать фрагментацию таблицы. В этой статье мы собираемся объяснить, как INSERT вызывает фрагментацию таблицы.

Как происходит фрагментация таблицы с INSERT и ROLLBACK?

Когда вы запустите INSERT, он начнет записывать данные в файл табличного пространства (.ibd). Правильно?

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL

Из образа мы создали таблицу и начали транзакцию (НАЧАЛО) с INSERT. В рамках транзакции INSERT была завершена, но мы не зафиксировали/откатили транзакцию.

Вы можете проверить рост файла табличного пространства до 1,2 ГБ.

Теперь мы собираемся откатить транзакцию.

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL

После завершения ROLLBACK размер файла табличного пространства по-прежнему составляет 1,2 ГБ (дисковое пространство не уменьшается). Вы можете увидеть, что в таблице нет записей в разделе COUNT(*).

Есть смысл?

Теперь мы хотели бы проверить фрагментацию таблицы. Обычный запрос с INFORMATION_SCHEMA.TABLES не даст точного размера фрагментации. Используем запрос чтобы вычислить фрагментировано/неиспользуемое дисковое пространство. Запрос будет дополнительно использовать таблицу IINFORMATION_SCHEMA.NNODB_TABLESPACES.

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL

 

Запрос:

SELECT NAME, TABLE_ROWS, format_bytes(data_length) DATA_SIZE,
format_bytes(index_length) INDEX_SIZE,
format_bytes(data_length+index_length) TOTAL_SIZE,
format_bytes(data_free) DATA_FREE,
format_bytes(FILE_SIZE) FILE_SIZE,
format_bytes((FILE_SIZE/10 – (data_length/10 + index_length/10))*10) WASTED_SIZE
FROM information_schema.TABLES as t
JOIN information_schema.INNODB_TABLESPACES as it
ON it.name = concat(table_schema,”/”,table_name) WHERE t.table_schema=’jc’ and t.table_name=’test_frag_Ins’;

 

Итак, теперь нам нужно восстановить таблицу для восстановления дискового пространства?

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL

 

Да, дисковое пространство восстановлено.

Является ли фрагментированное дисковое пространство пригодным для повторного использования?

Да, его можно использовать повторно, приведенный ниже пример объяснит это.

Может ли иметь таблица пространство WASTED/FRAGMENTED без удаления данных (DELETE) в MySQL

 

Из приведенного выше снимка сначала мы создали фрагментированное пространство (1,2 ГБ) с помощью INSERT/ROLLBACK. Затем мы снова запустили тот же INSERT, но на этот раз он совершил транзакцию. Тем не менее дисковое пространство составляет 1,2 ГБ.

Читать  Начало работы с системой управления доступом MySQL

Есть смысл?

Надеюсь, что этот блог дает дополнительную информацию и поможет понять фрагментацию таблицы в MySQL!

Спасибо что были с нами!!! Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь комментировать ниже.

Редактор: AndreyEx

Рейтинг: 4 (1 голос)
Если статья понравилась, то поделитесь ей в социальных сетях:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три + 5 =

Это может быть вам интересно


Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала