Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление из кучи в виде связного списка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7332
Случался недавно инцидент - начало пропадать место на диске. Оказалось, что проблема в пользовательской таблице-куче, которая должна была очищаться при помощи Delete tbl WITH (TABLOCK). Однако, эта конструкция не освобождает страницы. При ближайшем рассмотрении, оказалось, что это не просто куча, а куча в виде связного списка. Такие кучи упоминаются в http://www.queryprocessor.ru/heap-table-vs-fragmentation/ с комментарием, что такими могут быть системные таблицы.

Однако, это не системная таблица, но legacy, по всей видимости со времён SQL2005. Сейчас же (SQL2017) мне не удалось создать кучу в виде связного списка, создается чисто IAM. Связная куча очищается только при помощи более грубой силы вроде ALTER TABLE.

Кто-нибудь знает - был ли такой кунстштюк на более ранних версиях? Достаточно ли будет пересоздать таблицы?
9 фев 20, 14:01    [22076285]     Ответить | Цитировать Сообщить модератору
 Re: Удаление из кучи в виде связного списка  [new]
invm
Member

Откуда: Москва
Сообщений: 9079
Владислав Колосов,

https://www.sqlskills.com/blogs/paul/when-heap-data-pages-become-linked/

Для избавления от списка достаточно будет
alter table ... rebuild with (online = on);
9 фев 20, 14:45    [22076294]     Ответить | Цитировать Сообщить модератору
 Re: Удаление из кучи в виде связного списка  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7332
Связи были удалены, однако после delete (tablock)/insert (tablock) снова появились на новых страницах. И нет уверенности - почему не освобождаются страницы. Может по другой причине?

После truncate таблица также заполняется в ссылочной манере.

PS после проведения экспериментов выяснил, что "виновником" появления связанных страниц является INSERT ... WITH (TABLOCK) SELECT ... .
9 фев 20, 23:25    [22076412]     Ответить | Цитировать Сообщить модератору
 Re: Удаление из кучи в виде связного списка  [new]
invm
Member

Откуда: Москва
Сообщений: 9079
Владислав Колосов,

Проблема с delete воспроизводится только на унаследованных БД и от связанности страниц не зависит.
10 фев 20, 10:32    [22076556]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить