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

Откуда:
Сообщений: 1161
На SQL 2005 SP3 есть большая таблица с BLOB (text) полями.

С целью освобождения места, часть данных в BLOB полях была удалена UPDATE myTable SET myText=NULL where...
Затем был выполнен REORGANIZE WITH (LOB_COMPACTION=ON)

К сожалению, свободное место в файле данных почти не увеличилось.
Согласно отчёту, таблица занимает почти столько же места, как и до очистки.

В чём может быть причина?
Как вернуть освобождённое место для использования?
26 авг 11, 12:47    [11184274]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
DBCC CLEANTABLE reclaims space after a variable-length column is dropped. A variable-length column can be one of the following data types: varchar, nvarchar, varchar(max), nvarchar(max), varbinary, varbinary(max), text, ntext, image, sql_variant, and xml. The command does not reclaim space after a fixed-length column is dropped.
26 авг 11, 12:50    [11184312]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory,

Сбасибо, Вы считаете поможет? Ведь там есть оговорка: after a variable-length column is dropped.

В нашем случае столбец не удалялся. Был сделан только UPDATE myTable SET myText=NULL where year(...) < 2007
26 авг 11, 13:06    [11184524]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ну можно же дропнуть столбец и добавить его снова
Все равно же вы его зануллили
26 авг 11, 13:07    [11184539]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
Alexander Us,

Не уверен, что прокатит, но можно попробовать
- создать новый столбец
- сделать туда UPDATE myTable SET myNewColumnText=NULL where year(...) < 2007
- удалить старый
- переименовать новый в старый
26 авг 11, 13:09    [11184556]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Затем был выполнен REORGANIZE WITH (LOB_COMPACTION=ON)

На всякий случай - это для кластерного индекса было сделано ?
26 авг 11, 13:13    [11184591]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory,

Для всех, в том числе для кластерного.
26 авг 11, 13:21    [11184659]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Начинающий SQL 2008,

Спасибо, но желательны варианты без длительной блокировки.
А предложенный Вами вариант требует пересоздания таблицы (при сохранении порядка столбцов).
26 авг 11, 13:28    [11184742]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Ну можно же дропнуть столбец и добавить его снова
Все равно же вы его зануллили


Не весь: только для where year(...) < 2007
26 авг 11, 13:46    [11184944]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Alexander Us
Начинающий SQL 2008,

Спасибо, но желательны варианты без длительной блокировки.
А предложенный Вами вариант требует пересоздания таблицы (при сохранении порядка столбцов).


Вам шашечки или ехать?:)

поля типа text и varchar(max) требуют правильного обращения и соответственно, чтобы они вас радовали, надо было учитывать при проектировании базы что, вы в будущем будете чистить их содержимое под ноль, например делать отдельную таблицу только с этой колонкой (ну и ключем конечно) которую можно было бы без проблем и быстро обрабатывать командой DELETE. но так как вы этого заранее не предусмотрели (или до вас не предусмотрели) то выбор способов заметно ограничился.
26 авг 11, 14:35    [11185368]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Glory
Ну можно же дропнуть столбец и добавить его снова
Все равно же вы его зануллили


Не весь: только для where year(...) < 2007

А как вы замеряли размер занимаемого этими полями пространства до и после REORGANIZE ?
26 авг 11, 14:37    [11185386]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
А как вы замеряли размер занимаемого этими полями пространства до и после REORGANIZE ?


Изменённые столбцы были скопированы командой UPDATE .. OUTPUT... INTO в отдельные таблицы.
Их размер и есть размер удалённых данных.
26 авг 11, 14:55    [11185587]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Glory
А как вы замеряли размер занимаемого этими полями пространства до и после REORGANIZE ?


Изменённые столбцы были скопированы командой UPDATE .. OUTPUT... INTO в отдельные таблицы.
Их размер и есть размер удалённых данных.

Размер таблицы до и после REORGANIZE как проверялся ?
26 авг 11, 14:57    [11185605]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
А как вы замеряли размер занимаемого этими полями пространства до и после REORGANIZE ?


Продолжение:
Замеряли размера занимаемого этими полями пространства до и после REORGANIZE отдельно не призводился: только размер всей таблицы стандартным отчётом, ну и размер выгруженных данных.
26 авг 11, 14:59    [11185626]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Размер таблицы до и после REORGANIZE как проверялся ?

Стандартным отчётом
26 авг 11, 15:00    [11185635]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Замеряли размера занимаемого этими полями пространства до и после REORGANIZE отдельно не призводился

Откуда вы тогда знаете, что "свободное место в файле данных почти не увеличилось" ?
26 авг 11, 15:01    [11185652]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Glory
Member

Откуда:
Сообщений: 104751
Alexander Us
Glory
Размер таблицы до и после REORGANIZE как проверялся ?

Стандартным отчётом

Что за команда/скрипт этот "стандартный отчет" ?
26 авг 11, 15:07    [11185710]     Ответить | Цитировать Сообщить модератору
 Re: очистка таблицы без освободжения места  [new]
Alexander Us
Member

Откуда:
Сообщений: 1161
Glory
Что за команда/скрипт этот "стандартный отчет" ?

Правой кнопкой на базу, отчёты, стандартные отчёты, "использование дисковой памяти таблицами". (примерный перевод на русский)
26 авг 11, 16:01    [11186307]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить