Поиск по сайту:
Великой эпохе нужны великие люди (Я. Гашек).

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

FavoriteLoadingДобавить в избранное
12.05.2020
Настройка производительности 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

 

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

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

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

Читать  Как изменить пароль root MySQL в Ubuntu 20.04

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

 

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

Есть смысл?

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:



Добавить комментарий

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

четыре − три =

**ссылки nofollow

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

Рекомендуемое
Node.js - это кроссплатформенная среда выполнения JavaScript, созданная на основе…

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: