Может ли фрагментация таблицы сохраняться даже после того, как я ее уронил? - PullRequest
0 голосов
/ 06 февраля 2020

Я создал таблицу extract_table в Oracle 11, содержащую около 130 столбцов, все nvarchar () и ограничение максимального размера каждого столбца, равное 255, проиндексированное для определенного столбца. Было выполнено несколько операций вставки и удаления таблицы (удалено, например, 50 000 строк за один раз), вследствие чего после определенного момента времени операция чтения и записи в таблице стала очень медленной. Я запускаю следующий запрос, чтобы проверить фрагментированное пространство.

select table_name,avg_row_len,round(((blocks*16/1024)),2)||'MB' "TOTAL_SIZE",
round((num_rows*avg_row_len/1024/1024),2)||'Mb' "ACTUAL_SIZE",
round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2) ||'MB' "FRAGMENTED_SPACE",
(round(((blocks*16/1024)-(num_rows*avg_row_len/1024/1024)),2)/round(((blocks*16/1024)),2))*100 "percentage"
from all_tables WHERE table_name like 'EXTRACTION_TABLE';

Процент фрагментированного пространства, который я получил, составлял около 64%.

Чтобы освободить освобожденное пространство, я сбросил таблицу и заново создал таблица и снова выполнить тот же запрос и снова получил те же результаты, т. е. процент фрагментированного пространства будет одинаковым. Я не знаю, почему команда DROP в базе данных Oracle не освободила место, и фрагментация сохраняется даже после того, как я отбросил таблицу.

...