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

Откуда:
Сообщений: 15
Доброго времени суток! Имею огромную базу данных на уже 50Гигов, и свободное место скоро закончится, но не имею почти ни каких знаний по SQL, все что предлагают базовые мануалы уже перечитал по нескольку раз, не помогают. База растет примерно по гигу в неделю, отключить ее нельзя, но можно удалить записи старше года, чито я и пытался сделать с помощью такого запроса:
DELETE FROM [OM2000].[dbo].[TC]
WHERE TimeKp<DATEADD(month, -22,GETDATE())
DBCC SHRINKDATABASE (OM2000, 10)
GO
Сначало строки вообще не обробатывались, выполнялся только шринк. А потом я решил посмотреть есть ли записи в этой таблице с помощью:
SELECT [TimeKp]
FROM [OM2000].[dbo].[TC]
WHERE TimeKp<DATEADD(month, -18,GETDATE())
GO
А когда после этого записи вылезли, и я повторно запустил DELETE они удалились, но место не высвободелось. И судя потому, что я вычитал, оно осталось в таблице, и новые строки пишутся на это же самое место? Как мне высвободить место?
В таблице есть следующие столбцы: Id (int, NULL)
Value (float, NULL)
TimeKp (datetime, NULL)
ключ Numer (PK, int, He NULL)
Еще услышал незнакомое слово партишинг, но тоже не знаю с чем его едят.
12 сен 12, 08:21    [13149466]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
XLOPCHIK
...я повторно запустил DELETE они удалились, но место не высвободелось. И судя потому, что я вычитал, оно осталось в таблице, и новые строки пишутся на это же самое место? Как мне высвободить место?
Зачем?
Чтоб потом опять его же и занять?
12 сен 12, 08:38    [13149506]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

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

Ну во первых этого требуют правила обслуживания, чтобы технически данные по телеметрии хранились не больше 2х месяцев, а во вторых, построение графиков из этой базы занимает очень много времени, и я думаю если ее вычистить, это будет происходить быстрее...
12 сен 12, 09:00    [13149572]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
XLOPCHIK
...и я думаю если ее вычистить, это будет происходить быстрее...
Не факт...
12 сен 12, 09:06    [13149597]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
XLOPCHIK
tpg,

Ну во первых этого требуют правила обслуживания, чтобы технически данные по телеметрии хранились не больше 2х месяцев, а во вторых, построение графиков из этой базы занимает очень много времени, и я думаю если ее вычистить, это будет происходить быстрее...
]
Вот удалили- стало быстрее ? А перестроение индексов и статистику обновили ?
12 сен 12, 09:18    [13149625]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

Откуда:
Сообщений: 15
Ken@t,

Да все сделал, размер не изменился, но некоторые графики стали строиться значительно быстрее... Все таки меня интересует вопрос с местом, потому как при регулярной очистке база не будет занимать такое пространство, и хотелось бы его вернуть.
12 сен 12, 12:33    [13151054]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
dvim
Member

Откуда: Санкт Петербург
Сообщений: 684
XLOPCHIK,
Все таки меня интересует вопрос с местом,

Для этого delete не достаточно
Читать про планы обслуживания, бекапы, шринк базы данных и файлов БД.
Тогда после этих операций сиевел "отдает" место обратно.
12 сен 12, 12:37    [13151088]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Glory
Member

Откуда:
Сообщений: 104760
XLOPCHIK
Все таки меня интересует вопрос с местом, потому как при регулярной очистке база не будет занимать такое пространство, и хотелось бы его вернуть.

Вы удали какие-то данные из середины таблицы/индекса.
Для возврата этого неиспользуемого места придется дефрагментировать таблицу/индекс
12 сен 12, 12:39    [13151101]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

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

Читал много, планы обслуживания регулярно выполняются, и если бы там была возможность удаления записей старше определенного возраста, я бы это сделал.

Glory,

Для перестроения индекса нужно отключить всех клиентов, а этого нельзя делать. А можно сделать так: создать точно такую же БД, переключиться на нее, а пока она работает старую спокойно вычестить и все что от нее останется соединить с новой БД ну или если так не получится, просто переключить на старую?
12 сен 12, 13:13    [13151391]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
XLOPCHIK, для начала неплохо было бы увидеть результат скрипта select @@VERSION.

Перестройка индексов в онлайне доступна, как минимум, с 2005 версии.
12 сен 12, 13:39    [13151582]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

Откуда:
Сообщений: 15
Minamoto
XLOPCHIK, для начала неплохо было бы увидеть результат скрипта select @@VERSION.

Перестройка индексов в онлайне доступна, как минимум, с 2005 версии.


Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

А вот результат перестроения индекса через план обслуживания:
Номер ошибки: -1073548784
Сбой выполнения запроса "ALTER INDEX [PK_AlCategory] ON [dbo].[AL_CATEGORY]..." со следующей ошибкой: "Операции с индексом в оперативном режиме поддерживаются только в SQL Server выпуска Enterprise Edition.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
12 сен 12, 14:17    [13151872]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37153
Без ребилда индексов место, частично занятое в страницах, вы не освободите.

Или меняйте индексы, чтобы удалять данные непрерывными кусками, или меняйте редакцию сервера, или ищите окна для оффлайнового ребилда.
12 сен 12, 14:21    [13151903]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
thrashead
Member

Откуда: Россия, Санкт-Петербург
Сообщений: 722
XLOPCHIK,

Существует мнение, что shrink database - это плохо. Фрагментация и т.д.

поиск в гугле
sql server never shrink database

http://www.brentozar.com/archive/2009/08/stop-shrinking-your-database-files-seriously-now/
http://blog.sqlauthority.com/2011/01/19/sql-server-shrinking-database-is-bad-increases-fragmentation-reduces-performance/
http://www.sqlskills.com/blogs/paul/post/why-you-should-not-shrink-your-data-files.aspx
и т.д.
12 сен 12, 14:23    [13151920]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
XLOPCHIK
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Standard Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

Ну тогда про "партишинг" тоже можете забыть - он доступен только для enterprise.

Да он вам и не нужен, в общем то, Partitioning нужен в случае, когда данные должны храниться, а не удаляться.
12 сен 12, 14:37    [13151995]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Minamoto
...Да он вам и не нужен, в общем то, Partitioning нужен в случае, когда данные должны храниться, а не удаляться.
Невсегда - http://msmvps.com/blogs/gladchenko/archive/2010/03/09/1761298.aspx#4
12 сен 12, 14:56    [13152146]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

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

Так что мне делать, пока не стало слишком поздно?
12 сен 12, 15:11    [13152302]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
tpg
Minamoto
...Да он вам и не нужен, в общем то, Partitioning нужен в случае, когда данные должны храниться, а не удаляться.
Невсегда - http://msmvps.com/blogs/gladchenko/archive/2010/03/09/1761298.aspx#4

Окей, тогда предлагаю такой вариант: http://www.simple-talk.com/sql/sql-tools/sql-server-partitioning-without-enterprise-edition/

Создаем несколько табличек, переливаем туда данные, объединяем их в partitioned view с тем же названием, что и прежняя большая табличка.
При необходимости удалить старые данные - создаем еще одну пустую табличку, включаем ее в partitioned view, старую табличку с неактуальными данными "отцепляем" и дропаем.

Это пока не совет топикстартеру, а вопрос к гуру - имеет ли право на существование такое решение?
12 сен 12, 15:13    [13152324]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
XLOPCHIK
Minamoto,

Так что мне делать, пока не стало слишком поздно?


Скажем так - в начале поста вы пишете, что перечитали базовые мануалы. А вот описания того, что именно было сделано - нет. И нет информации о том, что вы убедились в том, что наибольший объем занимает именно та таблица, с которой вы колдуете.

Хотелось бы увидеть описание уже проделанных действий, из которых можно было бы увидеть, что проблема роста лога транзакций - исключена, и что найдена именно та таблица, которая занимает максимальный объем данных.
12 сен 12, 15:17    [13152366]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
WarAnt
Member

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

Так что мне делать, пока не стало слишком поздно?


ИМХО самый лучший для вас вариант пригласить DBA чтобы он настроил вам нормальный полноценный план облуживания базы.
12 сен 12, 15:19    [13152384]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34664
В общем, при удалении из таблицы освобождаются только полностью свободные страницы (8к), но они все равно остаются за таблицей на будущее, для хранения новых записей. Освобождаются только полностью свободные экстенты, кажется 32 страницы. Но они идут в БД для дальнейшего распределения для этой бд и совсем освобождаются только по shrink-у.

Чтобы освободить все лишние страницы нужно физически пересоздать таблицу, это либо надо выгрузить данные и создать таблицу заново, и залить данные обратно, либо удалить и создать кластерный индекс, но при большом объеме таблицы я не думаю что тебе захочется это делать.
12 сен 12, 16:13    [13152803]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

Откуда:
Сообщений: 15
Minamoto,
Сначало я выполнил вот это:
DELETE FROM [OM2000].[dbo].[TC]
WHERE TimeKp<DATEADD(month, -22,GETDATE())
DBCC SHRINKDATABASE (OM2000, 10)
GO

В результате вылезло вот это:
(строк обработано: 233684)
DBCC SHRINKDATABASE: файл с идентификатором 1 базы данных с идентификатором 8 был пропущен, поскольку в нем не было достаточно свободного места для восстановления.

(строк обработано: 1)
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.

А размер ТС прикрепил.[img=]

К сообщению приложен файл. Размер - 60Kb
12 сен 12, 16:17    [13152839]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

Откуда:
Сообщений: 15
WarAnt
XLOPCHIK
Minamoto,

Так что мне делать, пока не стало слишком поздно?


ИМХО самый лучший для вас вариант пригласить DBA чтобы он настроил вам нормальный полноценный план облуживания базы.


Я посреди Сибири, никто сюда не поедет, а до ближайшего города тут вообще 70км.
12 сен 12, 16:20    [13152864]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
XLOPCHIK
Minamoto,
Сначало я выполнил вот это:
DELETE FROM [OM2000].[dbo].[TC]
WHERE TimeKp<DATEADD(month, -22,GETDATE())
DBCC SHRINKDATABASE (OM2000, 10)
GO

В результате вылезло вот это:
(строк обработано: 233684)
DBCC SHRINKDATABASE: файл с идентификатором 1 базы данных с идентификатором 8 был пропущен, поскольку в нем не было достаточно свободного места для восстановления.

(строк обработано: 1)
Выполнение DBCC завершено. Если DBCC выдает сообщения об ошибках, обратитесь к системному администратору.

А размер ТС прикрепил.[img=]

Вот это ни фига себе у вас индексов на таблице. Они занимают больше места, чем сама таблица. Может поэтому и места не хватает?
Не хотите пересмотреть схему индексирования таблицы?
12 сен 12, 17:30    [13153431]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1764
А что показывает наша любимая команда
exec sp_spaceused

?

И какой размер файлов журнала (в свойствах базы данных посмотрите)?

Чем больше размер файла журнала сейчас и чем меньше минимальный размер файла лога по умолчанию, тем более эффективной будет команда DBCC SHRINKFILE (имя_файла_лога, новый размер файла лога);
Но перед этой командой режим восстановления надо поставить в SIMPLE, а после - вернуть в ваш обычный (обычно у всех FULL).
О вредных последствиях Вам сейчас расскажут другие.

А если у Вас большой размер unallocated space - сначала надо переместить этот объём в конец файла БД, а затем уже shrink-ать.
12 сен 12, 17:51    [13153590]     Ответить | Цитировать Сообщить модератору
 Re: После выполнения DELETE места не прибавилось.  [new]
XLOPCHIK
Member

Откуда:
Сообщений: 15
Minamoto
Вот это ни фига себе у вас индексов на таблице. Они занимают больше места, чем сама таблица. Может поэтому и места не хватает?
Не хотите пересмотреть схему индексирования таблицы?


Если бы я знал как это сделать...
12 сен 12, 18:38    [13153851]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить