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

Откуда:
Сообщений: 81
Таблица здоровая.

К примеру
create table abc(a int, b varchar(255), c image)
6 миллионов записей и везде есть image

Оказалось, что поле image содержит какой-то временный бред, но жрет кучу места.
Надо его убить.

alter table abc drop column c
go
alter table abc add c image null
go

Прокатило ...

Проблема: space used остался неизменным, невозможно сделать shrink.

Какие соображения на эту тему?
1 дек 05, 09:21    [2128901]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
doubleJ
Member

Откуда: Новосибирск
Сообщений: 420
без Shrink не получится...
1 дек 05, 09:40    [2128966]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
Выполните команду:
автор
dbcc shrinkfile(fileid)
.

С уважением,
Мартин Рахманов
http://jimmers.russia.webmatrixhosting.net/
1 дек 05, 09:48    [2129011]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
очень полезный ответ ...
а я думал можно ластиком стереть ...

почему spase used не изменился?
1 дек 05, 09:51    [2129030]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
EXEC sp_spaceused abc, true

выдает один и тот же результат до

alter table abc drop column c
go
alter table abc add c image null
go

и после ...

В чем проблема?
1 дек 05, 10:06    [2129125]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
jimmers
Member

Откуда: Санкт-Петербург - New York City
Сообщений: 5072
Хотел было ответить, но после такого хамского пассажа не буду. Научитесь себя вести прилично.
1 дек 05, 10:10    [2129139]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
jimmers
Хотел было ответить, но после такого хамского пассажа не буду. Научитесь себя вести прилично.


Мусорить ответами уровня детского сада, считая что всех вокруг только вчера компьютер увидели - вот это хамство ...
1 дек 05, 10:17    [2129169]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
Berg
Member

Откуда: Кр-ск
Сообщений: 3480
test
jimmers
Хотел было ответить, но после такого хамского пассажа не буду. Научитесь себя вести прилично.


Мусорить ответами уровня детского сада, считая что всех вокруг только вчера компьютер увидели - вот это хамство ...


Вы ошибаетесь. Настоящий детсад - это обижаться на людей, готовых вам помочь.
1 дек 05, 10:22    [2129203]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
Рад за вас товарищ Berg ...

Вы тоже наверное знаете команду dbcc shrinkfile ...
1 дек 05, 10:31    [2129266]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
Crimean
Member

Откуда:
Сообщений: 13147
а что за проблемы со spaceused и с shrink?

или не все параметры рассмотрели? так таво, вперед BOL почитать вместо того, чем друг в друга какашками кадацо - оно (БОЛ читать) никада не вредно

2 test - фу

ну и по делу - хорошо, изменится used, а толку? страницы останутся распределенными, пусть даже и уйдут "в корзину"

в итоге файлы данных сколько жрали, столько и будут жрать и без перераспределения места тут не обойтись

сам по себе прием drop / add манипулирует только обписанием занимаемого места. хорошо, ты его поменял. а мусор кто разгребет? если бы сиквел в это время разгребал мусор - выполнение этих команд на "здоровых" (да и на больных) таблицах занимало бы... эээ... скажем так, некоторое время. а так они выполняются мгновенно, что не может не наводить на размышления

собственно, я достаточно сказал, чтобы УВИДЕТЬ изменение used уже описанными средствами. без шринка, надеюсь :)
1 дек 05, 10:46    [2129382]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
Ради ответов shrinkfile и читайте BOL можно было сюда и не писать.

Для тех кто знает чуть больше:

Запускаем скрипт. Наблюдаем результат.

Вопросы:
1. Как сжать файл test_Data?
2. Почему не изменился spaceused и как заставить его имениться (DBCC UPDATEUSAGE не помогает)?

Итак ...

-- Темная, темная ночь .... Пустая database test ...

USE test
GO

EXEC sp_helpdb test

-- files
-- test_Data 1024 KB
-- test_Log 1024 KB
GO
create table abc(a int, b varchar(255), c image null)
GO
EXEC sp_spaceused abc
-- 0 used
GO
insert abc(a,b,c) values (1,'b', REPLICATE ( 'qwerty' , 100 ) )
while(@@rowcount < 100000) insert abc(a,b,c) select a,b,c from abc
GO
EXEC sp_spaceused abc
-- rows: 262144, reserved: 205328 KB, data: 205216 KB
GO
alter table abc drop column c
GO
alter table abc add c image null
GO
EXEC sp_spaceused abc
-- rows: 262144, reserved: 205328 KB, data: 205216 KB
GO
EXEC sp_helpdb test
-- db_size: 503MB
-- test_Data: 206848 KB
-- test_Log: 308224 KB
GO
dbcc shrinkfile(test_Data)
GO
EXEC sp_spaceused abc
-- rows: 262144, reserved: 205328 KB, data: 205216 KB
GO
EXEC sp_helpdb test
-- db_size: 503MB
-- test_Data: 205952 KB
-- test_Log: 308224 KB
GO
1 дек 05, 19:56    [2132954]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
Glory
Member

Откуда:
Сообщений: 104751
Придется все таки отослать в BOL прочитать про DBCC CLEANTABLE

reclaims space after a variable length column or a text column is dropped using the ALTER TABLE DROP COLUMN statement. It does not reclaim space after a fixed length column is dropped.
1 дек 05, 20:33    [2133020]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
Спасибо Glory ...

Но не помогло ...

DBCC CLEANTABLE ( 'test', 'abc' )
GO
EXEC sp_spaceused abc
-- rows: 262144, reserved: 205328 KB, data: 205216 KB
GO
1 дек 05, 20:44    [2133037]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
Glory
Member

Откуда:
Сообщений: 104751
test
Спасибо Glory ...

Но не помогло ...

DBCC CLEANTABLE ( 'test', 'abc' )
GO
EXEC sp_spaceused abc
-- rows: 262144, reserved: 205328 KB, data: 205216 KB
GO

Разумеется. Нужно сделать CLEANTABLE между двумя alter table
1 дек 05, 20:45    [2133041]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
test
Member

Откуда:
Сообщений: 81
Работает ...

Большой, большой thanks, Glory ...
1 дек 05, 20:52    [2133050]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
Crimean
Member

Откуда:
Сообщений: 13147
Можно остановиться на создании таблицы и дропе поля. После этого в sysindexes остается запись с indid = 255, то есть сервер считает, что у таблицы ЕСТЬ BLOB'ы, хотя их по факту типа нету.
Более того, при добавлении "allow null" BLOB поля ситуация не меняется.
А вот при добавлении "not allow null" BLOB поля происходит перераспределение BLOB части таблицы и все меняется.
Достаточно смотреть в sysindexes для таблицы на запись с indid = 255. Дальше все становится понятным и, местами, объяснимым. Сервер просто не делает лишней работы.
1 дек 05, 22:00    [2133153]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: поле типа image не отдает место  [new]
TMN
Member

Откуда:
Сообщений: 115
Добрый день! Подниму древний пост, так как проблема схожая.

Имеется большая таблица со столбцом типа image. Произведен update всех строк заархивированными данными image. Теперь необходимо сжать таблицу, которая должна занимать примерно в два раза меньше места. Я так понимаю, что DBCC CLEANTABLE не подходит. Как быть?

Заранее спасибо за ответы.
19 май 11, 07:18    [10675630]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
TMN,

INSERT INTO temptable * FROM table1
drop table table1
rename temptable to table1

мысль понятна?
19 май 11, 10:34    [10676143]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
TMN
Member

Откуда:
Сообщений: 115
Уточню, что перезаливка данных в другую таблицу с последующим переименованием не подходит еще и потому, что таблица участвует в репликации. И не хотелось бы сейчас всё ломать...
19 май 11, 12:07    [10676983]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
TMN,

вам шашечки или ехать?:)
19 май 11, 12:29    [10677204]     Ответить | Цитировать Сообщить модератору
 Re: поле типа image не отдает место  [new]
TMN
Member

Откуда:
Сообщений: 115
Надеюсь есть возможность отделаться малой кровью. :) Репликация настроена на три сервера, придется заново синхронизировать базы... :( Думаю должна быть возможность. Ну по крайней мере надеюсь на это.
19 май 11, 12:38    [10677285]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить