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

Откуда:
Сообщений: 6
Есть база на MS SQL Server 2008 R2 (SP1) размером 570 Гб. Свободного места в ней 46 Гб. Но заодно в таблицах есть куча свободного места, например:

namerowsreserveddataindex_sizeunused
N34_28667505 KB10717400 KB2126048 KB56 KB8591296 KB
N347525930 KB6033704 KB798480 KB88 KB5235136 KB
32Note259521 KB1180336 KB199480 KB56 KB 980800 KB
N802 171842 KB1104232 KB168328 KB8496 KB927408 KB

т.е. уже только в этих таблицах из 19 Гб занятого места данные+индексы занимают 3 Гб, а остальное (16 Гб) - свободное место (unused). А всего можно освободить где-то 50 Гб.

Пробовал по разному:
1) сжатие базы не помогло;
2) dbcc checkdb и dbcc checkcatalog ошибок не выявили;
3) перестройка всех индексов не помогла;
4) DBCC OPENTRAN - нет открытых транзакций;
5) пробовал сжимать (Compression) эти таблицы - данные чуть-чуть сжимаются, свободное место - не изменяется;
6) dbcc sqlperf (logspace) - в логе из 20 Гб занято 0.45 %.

Подскажите, пожалуйста, как освободить свободное место из этих таблиц?
9 окт 18, 13:17    [21699190]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
fat-fag
перестройка всех индексов не помогла
Для куч бесполезно перестраивать индексы в целях удаления неиспользуемого места в таблице. Перестраивать нужно саму таблицу.
9 окт 18, 13:33    [21699219]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
fat-fag,

1) создать-удалить кластерный индекс
2) alter table rebuild
3) переписать данные в новую таблицу, удалить старую, переименовать новую
9 окт 18, 13:39    [21699229]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
fat-fag
Member

Откуда:
Сообщений: 6
Владислав Колосов
fat-fag,

1) создать-удалить кластерный индекс
2) alter table rebuild
3) переписать данные в новую таблицу, удалить старую, переименовать новую

т.е. надо сделать вот так по пунктам, или любой из трех вариантов подойдет?
9 окт 18, 15:02    [21699366]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Джонни Кейдж
Member

Откуда: стольный град Киев
Сообщений: 31
fat-fag
Владислав Колосов
fat-fag,

1) создать-удалить кластерный индекс
2) alter table rebuild
3) переписать данные в новую таблицу, удалить старую, переименовать новую

т.е. надо сделать вот так по пунктам, или любой из трех вариантов подойдет?


п. 3 - самодостаточный

Если у таблицы есть кластерный индекс, то его REBUILD должен помочь.
9 окт 18, 15:54    [21699435]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
fat-fag
Member

Откуда:
Сообщений: 6
Пробовал перестроить кластерный индекс, пробовал удалить кластерный индекс, затем снова его создать, пробовал alter table rebuild - пока не помогает.
9 окт 18, 16:14    [21699457]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
выполните, например, для первой таблицы:
select object_name(p.object_id) as tbl, 
       p.index_id,
	   au.total_pages,
	   au.used_pages,
	   au.type_desc,
	   cast((au.total_pages - au.used_pages) * 8. / 1024  as decimal(10,3)) as unused_Mb
from sys.allocation_units au
     join sys.partitions p
	    on au.container_id = p.hobt_id
where object_name(p.object_id) = 'N34_28'
order by au.total_pages - au.used_pages desc;

чтобы уж понять, куча там, кластерный ли, LOB-ы может какие...
9 окт 18, 17:08    [21699509]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
fat-fag
Member

Откуда:
Сообщений: 6
Yasha123, выполнил, вот результат:

tblindex_idtotal_pagesused_pagestype_descunused_Mb
FN1534_2811337201263275LOB_DATA8390.047
FN1534_28124732465IN_ROW_DATA0.063
9 окт 18, 17:39    [21699546]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
fat-fag,

Выполните
alter index all on FN1534_28 reorganize;
9 окт 18, 17:47    [21699553]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3247
fat-fag,

Посмотрите, какой у этого индекса fill factor. Можно в sys.indexes, можно в SSMS в дереве правой кнопкой -> SCRIPT AS -> ...
9 окт 18, 17:48    [21699556]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
fat-fag
Member

Откуда:
Сообщений: 6
invm, выполнил, все осталось по прежнему.
9 окт 18, 17:53    [21699562]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
fat-fag
Member

Откуда:
Сообщений: 6
Ennor Tiegael, fill factor = 0
9 окт 18, 18:01    [21699571]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
fat-fag,

Сделайте DBCC CLEANTABLE, проблема известная.
9 окт 18, 18:07    [21699575]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Ennor Tiegael
fat-fag,

Посмотрите, какой у этого индекса fill factor. Можно в sys.indexes, можно в SSMS в дереве правой кнопкой -> SCRIPT AS -> ...

это не FF, это LOB data, вон же 8Гб unused там и есть
9 окт 18, 18:08    [21699577]     Ответить | Цитировать Сообщить модератору
 Re: В таблице в БД большой объем свободного места. Как его освободить?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
fat-fag
Есть база на MS SQL Server 2008 R2 (SP1)
Таки пропатчите уже сервер. Последний сервис пак (SP3) вышел 4 года назад.

FIX: Cannot reclaim unused space by using shrink operation in the table that contains a LOB column in SQL Server
9 окт 18, 21:21    [21699755]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить