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

Откуда:
Сообщений: 288
Добрый вечер.

GO
select * into ##tmp from _AccRgED7798 where _Period >= '40140101 00:00:00'
truncate table _AccRgED7798
insert into _AccRgED7798 select * from ##tmp
drop table ##tmp

Есть вот такой запрос - его задача скопировать во временную таблицу нужные сведения, очистить всю таблицу, а затем, что осталось во временной таблице выгрузить обратно в таблицу физическую. Размер базы около 450 Гб (mdf), размер таблицы 40-50 % от общего объема. Выполняется очень долго, решил проверить что там происходит. Профайлер кажет какие строки с пустым текстом запрос, ждал минут 20 ничего не увидел. Сделал такой запрос к базе данных/, которую чищу в данный момент:

declare @t table (name varchar(255), [rows] varchar(255), reserved varchar(255), data varchar(255), index_size varchar(255), unused varchar(255))
delete from @t
insert into @t exec sp_MSforeachtable @command1='EXEC sp_spaceused ''?''',@whereand='or OBJECTPROPERTY(o.id, N''IsSystemTable'') = 1'
select * from @t order by CONVERT(bigint,REPLACE(data,' KB','')) DESC

в разные момент времени, сравнил, меняется только поле reserved, index_size и Unused в итоговой таблице (увеличиваются). Поясните, что означает поле reserved?
Вот пример итоговой таблицы:
_AccRgED7798 246736861 38894336 KB 20777848 KB 18111672 KB 4816 KB
и она же спустя пару минут.
_AccRgED7798 246736861 39393664 KB 20777848 KB 18610976 KB 4840 KB

Суть задачи думаю ясна, максимально быстро порезать базу.
Транкейт как то медленно работает, может есть смысл использовать делете? Или что-то иное?
24 дек 14, 19:30    [17048276]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Добрый Э - Эх
Guest
Aragornych,

секционирование (partition table) ?
24 дек 14, 19:34    [17048288]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

Откуда:
Сообщений: 288
Добрый Э - Эх,

Че?
Применяется ли к базе секционирование? - не знаю.
Или ты предлагаешь что-то мне сейчас сделать такого с базой, что она прям быстро работать начнет?
24 дек 14, 19:39    [17048304]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Добрый Э - Эх
Guest
Aragornych
Добрый Э - Эх,

Че?
Применяется ли к базе секционирование? - не знаю.
Или ты предлагаешь что-то мне сейчас сделать такого с базой, что она прям быстро работать начнет?

ты спросил: "Или что-то иное?" Я предложил тебе альтернативу...
24 дек 14, 19:55    [17048353]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
radya
Member

Откуда: Москва
Сообщений: 20
Aragornych,
в чем суть вопроса ? Если в том чтобы узнать что означает поле reserved - в MSDN описано (Общий объем пространства, выделенный объектам в базе данных)
Если вопрос про использование delete или truncate , то нужно понимать , какой обьем данных ты собираешься удалять.
24 дек 14, 19:56    [17048354]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Aragornych
Суть задачи думаю ясна, максимально быстро порезать базу.
Транкейт как то медленно работает, может есть смысл использовать делете? Или что-то иное?
С чего вы взяли что из 4-х команд самая медленная это truncate?
Вместо truncate, можно сделать DROP оригинальной таблицы, а копию переименовать. Только не забудьте предварительно заскриптовать все индексы, триггеры, constraints и прочее.
24 дек 14, 20:17    [17048433]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Добрый Э - Эх
Guest
Aragornych,

если решишь заморочиться с секционированием, то ищи про "плавающие окна".
как пример: статья на эту тему...
24 дек 14, 20:27    [17048449]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
Aragornych,

если решишь заморочиться с секционированием, то ищи про "плавающие скользящие окна".
как пример: статья на эту тему...
24 дек 14, 20:29    [17048456]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

Откуда:
Сообщений: 288
Не пойдет, долго разбираться. На выходных уже на рабочей базе запускать скрипты.
Кстати завершилось. На самом деле я так понял не транкейт долго отрабатывал, а инзерт. Всего времени заняло 7,5 часов. Все круто но есть проблема.

Но теперь другая беда.
Попытался я сжать лог файл и получил ошибку, номер ошибки к сожалению не зафиксировал.
но в окне сжатия журнала транзакций "Доступное свободное место" -0,01 Мб (0%).
Как его вылечить или удалить и сделать новый?
25 дек 14, 09:53    [17049598]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
aleks2
Guest
Aragornych
Не пойдет, долго разбираться. На выходных уже на рабочей базе запускать скрипты.
Кстати завершилось. На самом деле я так понял не транкейт долго отрабатывал, а инзерт. Всего времени заняло 7,5 часов. Все круто но есть проблема.

Но теперь другая беда.
Попытался я сжать лог файл и получил ошибку, номер ошибки к сожалению не зафиксировал.
но в окне сжатия журнала транзакций "Доступное свободное место" -0,01 Мб (0%).
Как его вылечить или удалить и сделать новый?


Транзакцию(ии) закрой, страдалец.
25 дек 14, 09:55    [17049619]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

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

Хм, Монитор активности кажет что к этому базе никто не обращается.
25 дек 14, 10:09    [17049706]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
aleks2
Guest
Aragornych
aleks2,

Хм, Монитор активности кажет что к этому базе никто не обращается.

Ну если он ишо кажет, что база в Simple - пора к оккул(ьт)исту.
25 дек 14, 10:35    [17049855]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

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

Ну ты не груби, повторюсь что этой базы в мониторе нет. никто к ней не обращается. В фильтрах колонок установлена галочка "Все".
25 дек 14, 10:41    [17049890]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
o-o
Guest
кажет/не кажет, скриптом посмотрите:
select recovery_model_desc, log_reuse_wait_desc
from sys.databases
where name = 'my_db' 
25 дек 14, 11:13    [17050099]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
AHDP
Member

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

1) Отключи некластерные индексы, потом создай. Можно и с кластерным поиграться. Наблюдаю двукратное изменение скорости.
2) Проверь расположение tempdb.
25 дек 14, 11:59    [17050377]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

Откуда:
Сообщений: 288
Хм, помог перевод в режим симпл.
Не успел я воспользоваться вашими советами...
Спасибо всем за советы, вероятно, я еще к вам обращусь за помощью.
25 дек 14, 12:19    [17050471]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
o-o
Guest
да нас прям осчастливили
25 дек 14, 12:32    [17050542]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Добрый Э - Эх
Guest
АраГомик
Не пойдет, долго разбираться.

"лучше день потерять, зато потом за пять минут долететь"(с).
25 дек 14, 13:39    [17051032]     Ответить | Цитировать Сообщить модератору
 Re: Долго выполняется запрос.  [new]
Aragornych
Member

Откуда:
Сообщений: 288
o-o,

Не ехидничай )
25 дек 14, 21:17    [17053992]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить