Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Всем привет !

Столкнулся с интересной проблемой на SQL 2008

Есть база в режиме Simple.
В базе всего лишь одна табличка с записями более 100 000 000 - или 34 ГБ инфо.

Делаю делит из таблички по условию. В среднем каждый делит более > 1 000 000 записей.

После удаление - объем свободного места (30 МБ) и объем самой базы не изменяется, но зато растет LOG файл. Шринк лог файла работает корректно, но шринк дата файла не работает вообще, поскольку объем свободного места в дата файле минимален и не меняется после удаления записей.

Вопрос - почему при удаление записей из базы - объем свободного места в базе не изменяется?
Delete реально удаляет записи из таблицы.
На таблице вообще нет индексов.
29 сен 10, 09:44    [9519963]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
проходящий.
Guest
Testor1
Вопрос - почему при удаление записей из базы - объем свободного места в базе не изменяется?
Потому, что так задумано.

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

На таблице вообще нет индексов.
Это тут совершенно не при делах.
29 сен 10, 10:06    [9520151]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
Testor1, приведите точный код команды DBCC SHRINKFILE , который вы используете при сжатии файла данных.
С уважением, Алексей
29 сен 10, 10:52    [9520638]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Aleksey-K,

Все варианты.

Обращаю внимание, что лог транзакций очищается корреткно.


name db_size owner dbid created status compatibility_level
-------------------------------------------------------------------------------------------------------------------------------- ------------- -------------------------------------------------------------------------------------------------------------------------------- ------ ----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------
gncc 33360.50 MB MOBITEL_MAIN\YTigiev 5 сен 24 2010 Status=ONLINE, Updateability=READ_WRITE, UserAccess=MULTI_USER, Recovery=SIMPLE, Version=655, Collation=Cyrillic_General_CI_AI, SQLSortOrder=0, IsAutoShrink, IsAutoCreateStatistics, IsAutoUpdateStatistics, IsFullTextEnabled 100


name fileid filename filegroup size maxsize growth usage
-------------------------------------------------------------------------------------------------------------------------------- ------ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------------------ ------------------ ------------------ ---------
gncc_Data 1 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\gncc_Data.mdf PRIMARY 33850368 KB Unlimited 10240 KB data only
gncc_Log 2 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\gncc_Log.ldf NULL 310784 KB 2147483648 KB 10240 KB log only




USE [gncc]
GO
DBCC SHRINKDATABASE(N'gncc' )
GO

USE [gncc]
GO
DBCC SHRINKFILE (N'gncc_Data' , 0, TRUNCATEONLY)
GO

USE [gncc]
GO
DBCC SHRINKFILE (N'gncc_Data' , 0)
GO

USE [gncc]
GO
DBCC SHRINKFILE (N'gncc_Log' , 32993, TRUNCATEONLY)
GO


USE [gncc]
GO
DBCC SHRINKFILE (N'gncc_Log' , 0)
GO
29 сен 10, 13:52    [9522619]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Как вы проверяете кол-во свободного места в базе, осталось непонятным.

Что касается вашего кейса, то все зависит от того, как располагались удаленные записи в кластерном индексе. Если последовательно, то свободное место должно увеличиваться за счет высвобождения страниц. Если случайно, то вы не увидите никакой прибавки свободного места, пока не сделаете ребилд индексу.
29 сен 10, 13:58    [9522688]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
Testor1
Aleksey-K,

Все варианты.

Обращаю внимание, что лог транзакций очищается корреткно.


А как вы проверяли, что в файле данных есть место, которое можно освободить ?
29 сен 10, 13:58    [9522690]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Glory
Testor1
Aleksey-K,

Все варианты.

Обращаю внимание, что лог транзакций очищается корреткно.


А как вы проверяли, что в файле данных есть место, которое можно освободить ?



Через интерфейс SQL Manager
1. Параметры базы данных
2. При шринке он показывает занимаемое место и свободное
29 сен 10, 14:22    [9522989]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Testor1
USE [gncc]
GO
DBCC SHRINKFILE (N'gncc_Data' , 0, TRUNCATEONLY)
GO

BOL:
TRUNCATEONLY
Выделяет все свободное пространство в конце файла операционной системе, но не перемещает страниц внутри файла. Файл данных сокращается только до последнего выделенного экстента.

Аргумент target_size не обрабатывается, если указан аргумент TRUNCATEONLY.

Аргумент TRUNCATEONLY применим только к файлам данных.
29 сен 10, 14:28    [9523064]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
Testor1
Glory
Testor1
Aleksey-K,

Все варианты.

Обращаю внимание, что лог транзакций очищается корреткно.


А как вы проверяли, что в файле данных есть место, которое можно освободить ?



Через интерфейс SQL Manager
1. Параметры базы данных
2. При шринке он показывает занимаемое место и свободное

И как мы узнаем, что именно там вы понимаете по занятым и свободным местом ?
Приведите лучше результат

use mydb
go
EXEC sp_spaceused @updateusage = N'TRUE';
29 сен 10, 14:33    [9523111]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Glory
Testor1
Glory
Testor1
Aleksey-K,

Все варианты.

Обращаю внимание, что лог транзакций очищается корреткно.


А как вы проверяли, что в файле данных есть место, которое можно освободить ?



Через интерфейс SQL Manager
1. Параметры базы данных
2. При шринке он показывает занимаемое место и свободное

И как мы узнаем, что именно там вы понимаете по занятым и свободным местом ?
Приведите лучше результат

use mydb
go
EXEC sp_spaceused @updateusage = N'TRUE';


database_name database_size unallocated space
gncc 43703.00 MB 65.39 MB

reserved data index_size unused
33783408 KB 33155336 KB 736 KB 627336 KB
29 сен 10, 16:47    [9524589]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ну так unallocated space - 65.39 MB
Что вы собрались сжимать ?
29 сен 10, 16:51    [9524622]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

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

delete
from query
where filed = value


Кол-во удаляемых записей более > 1 000 000
После удаления должно было высвободится более 100 МБ, но я ее не вижу.
Проблема в этом !
29 сен 10, 17:10    [9524900]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

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

delete
from query
where filed = value


Кол-во удаляемых записей более > 1 000 000
После удаления должно было высвободится более 100 МБ, но я ее не вижу.
Проблема в этом !

Вы просто плохо знакомы с физическим хранением данных
Если со страницы данных была удалена пара записей, то это не значит, что вся страница становится свободной. Это значит, что данные становятся фрагментированными
29 сен 10, 17:14    [9524939]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

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

delete
from query
where filed = value


Кол-во удаляемых записей более > 1 000 000
После удаления должно было высвободится более 100 МБ, но я ее не вижу.
Проблема в этом !

Вы просто плохо знакомы с физическим хранением данных
Если со страницы данных была удалена пара записей, то это не значит, что вся страница становится свободной. Это значит, что данные становятся фрагментированными


Шринк с реорганизацией не решает эту проблему дефрагментации?
29 сен 10, 17:29    [9525113]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

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

delete
from query
where filed = value


Кол-во удаляемых записей более > 1 000 000
После удаления должно было высвободится более 100 МБ, но я ее не вижу.
Проблема в этом !

Вы просто плохо знакомы с физическим хранением данных
Если со страницы данных была удалена пара записей, то это не значит, что вся страница становится свободной. Это значит, что данные становятся фрагментированными


Шринк с реорганизацией не решает эту проблему дефрагментации?

А что вы будете реогранизовывать для таблицы, у которой "вообще нет индексов." ?
29 сен 10, 17:30    [9525127]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

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


http://msdn.microsoft.com/ru-ru/library/ms190488.aspx

Сжимает данные в файлах с помощью перемещения распределенных страниц из конца файла на место нераспределенных страниц в начале файла. Аргумент target_percent является необязательным.


Но меня больше настораживает

Предположим, что файл данных базы данных mydb содержит 7 МБ данных. При задании значения 30 для target_percent можно сжать этот файл данных до 30 %. Однако задание значения 40 для target_percent не позволит сжать файл данных, поскольку Database Engine не может уменьшить файл до размера, меньшего, чем занимают данные сейчас. Данную ситуацию можно представить и другим способом: 40 процентов желаемого свободного пространства + 70 процентов от полного файла данных (7 МБ из 10 МБ) больше, чем 100 процентов. Так как сумма желаемого освобождаемого процента и текущего процента, занимаемого файлом данных, превосходит 100 (на 10 процентов), любое значение target_size, которое больше 30, не приведет к сжатию файла данных.

Может у меня что-то подобное
Хотя я создал пустую базу данных и просто импортировал в нее таблицу из другой базы.
29 сен 10, 17:39    [9525202]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

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


http://msdn.microsoft.com/ru-ru/library/ms190488.aspx

Сжимает данные в файлах с помощью перемещения распределенных страниц из конца файла на место нераспределенных страниц в начале файла. Аргумент target_percent является необязательным.

И где тут написано, что эта команда производит дефрагментацию данных на страницах ?
29 сен 10, 17:41    [9525222]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

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

Может у меня что-то подобное

У вас совершенно другая вещь
Которая называется дефрагментация
29 сен 10, 17:42    [9525232]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34014
Блог
а так? (но будет работать долго)
ALTER TABLE T1 REBUILD
29 сен 10, 17:53    [9525365]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Glory
Testor1
.

Может у меня что-то подобное

У вас совершенно другая вещь
Которая называется дефрагментация


Как дефрагментировать таблицу ?
29 сен 10, 17:53    [9525367]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
Testor1
Glory
Testor1
.

Может у меня что-то подобное

У вас совершенно другая вещь
Которая называется дефрагментация


Как дефрагментировать таблицу ?

Таблицу без индексов ???
Выгрузить - удалить - загрузить
29 сен 10, 17:54    [9525381]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Testor1
Member

Откуда:
Сообщений: 679
Glory
Testor1
Glory
Testor1
.

Может у меня что-то подобное

У вас совершенно другая вещь
Которая называется дефрагментация


Как дефрагментировать таблицу ?

Таблицу без индексов ???
Выгрузить - удалить - загрузить



У меня 30 ГБ база. На диске 10 ГБ свободного места :)
Нет не подходит решение.

Любое решение должно быть красивым :)
29 сен 10, 18:00    [9525467]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
А кластерный индекс не судьба сделать?
29 сен 10, 18:01    [9525474]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
Glory
Member

Откуда:
Сообщений: 104760
Testor1



У меня 30 ГБ база. На диске 10 ГБ свободного места :)
Нет не подходит решение.

Любое решение должно быть красивым :)

Не делайте действий, которые приводят к дефрагментации
И будет красиво
И почему вы ассоциируете размер базы с размером одной таблицы ?

Сообщение было отредактировано: 29 сен 10, 18:02
29 сен 10, 18:01    [9525477]     Ответить | Цитировать Сообщить модератору
 Re: Не работает shrink в SQL 2008  [new]
проходящий.
Guest
Testor1,
а что Вы так уперлись в шринк? Вы больше в эту таблицу ничего никогда не будете добавлять?
29 сен 10, 18:02    [9525482]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить