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

Откуда: Moscow
Сообщений: 31442
Князь_Тьмы
Только в нормальном цикле

Что Вы подразумеваете под нормальным циклом? Я не профессиональный программист и как SQL обрабатывает запросы пока слабо представляю, а бездумно ваять скрипты не хочу. Хочу понимать как они работают.
Да вот, как написано в 20009136 или 20010200

Князь_Тьмы
Скрипт на удаление

declare @date1 as date, @date2 as date, @size as float(20)
set @size = (select dbsize from GPA11.dbo.temp1)
set @date1 = (select top(1) timestamp_utc from GPA11.dbo.DATA_LOG order by timestamp_utc ASC)
set @date2 = (select data from GPA11.dbo.temp1)

if (@size>85 and @date2>@date1)
begin
delete from GPA11.dbo.DATA_LOG where timestamp_utc in (select top(100000) timestamp_utc from GPA11.dbo.DATA_LOG order by timestamp_utc ASC)
end
else begin
use msdb
EXEC dbo.sp_stop_job N'Очистка базы'
end
Что то у вас слишком наворочено :-) Какой то sp_stop_job ...

Сделайте, повторю, один джоб, в нём простой цикл, как по ссылкам.

Подберите количество удаляемых записей в одном шаге, что бы быстро выполнялся один проход, и не блокировалось на долгое время.
100 000 - это очень много, конечно, будет блокироваться надолго. Начните с 10 000, потом смотрите, нужно ли уменьшить (может, 1000 будет в самый раз).
Тут ИМХО размеры небольшие, записей мало, что бы что то сложное городить.
16 дек 16, 10:49    [20010382]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Определяю размер таблицы и самую старую дату

insert temp exec sp_spaceused N'GPA11.dbo.DATA_LOG'
set @size = (select data from temp)
set @index_size = (select index_size from temp)
set @dbsize = cast(LEFT (@size, CHARINDEX(' ',@size,0)) as float)+cast(LEFT (@index_size, CHARINDEX(' ',@index_size,0)) as float)
set @dbsize = @dbsize/1024/1024
set @date = (select top(1) timestamp_utc from GPA11.dbo.DATA_LOG order by timestamp_utc ASC)
set @date = (select DATEADD(DAY, 1, @date))
insert temp1(data, dbsize) values (@date, @dbsize)
16 дек 16, 10:50    [20010384]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Князь_Тьмы
Определяю размер таблицы и самую старую дату
Непонятно, зачем так сложно???
Бизнес-задача то какая?
Обычно формулируют так - удалить записи старше NNN дней.

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

while (1=1) begin
	delete top (1000) d
	from GPA11.dbo.DATA_LOG with (paglock)
	where timestamp_utc <= @date;
	if @@rowcount = 0
		break;
end
16 дек 16, 10:56    [20010427]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
alexeyvg,

дался этот paglock, по 1к и налочить тучу страниц...
16 дек 16, 11:03    [20010475]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Обычно формулируют так - удалить записи старше NNN дней.

В моем случае немного сложнее. Удалить данные за старшие сутки при размере таблицы более 95 Гб.

При использовании while, with (paglock) и 1000 строк работает значительно лучше, но теряются записи за 1-3 секунды. По записаным в таблицу данным строятся графики. В графиках есть пропуски
16 дек 16, 12:29    [20011187]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
o-o
Guest
на кой там паглоки вообще?
индекс по дате некластерный,
а кластерный совсем по другому полю.
значит, в таблице подряд идущие даты вовсе не обязаны попадать на одну страницу.
зачем лочить 1000 страниц вместо 1000 ключей?
16 дек 16, 12:34    [20011240]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
aleks2
Guest
Князь_Тьмы
Обычно формулируют так - удалить записи старше NNN дней.

В моем случае немного сложнее. Удалить данные за старшие сутки при размере таблицы более 95 Гб.

При использовании while, with (paglock) и 1000 строк работает значительно лучше, но теряются записи за 1-3 секунды. По записаным в таблицу данным строятся графики. В графиках есть пропуски


1. Ну, у тя же ~ одинаковые размеры строк?
2. Дык пересчитай "более 95 Гб" в "более XXX строк".
3. Ну сделай, страдалец, правильный кластерный индекс ПО ДАТЕ, чтобы вставлялось в начало таблицы, а удалялось с конца.
4. И будет тебе щастье.

ЗЫ. Забей на with (paglock).
16 дек 16, 12:38    [20011280]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
При использовании while, with (paglock) и 1000 строк работает значительно лучше, но теряются записи за 1-3 секунды. По записаным в таблицу данным строятся графики. В графиках есть пропуски

эээ как это теряются??
16 дек 16, 12:40    [20011289]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Не пишутся данные, а не теряются. На график не выводятся.
Что значит размер строк? По одному из полей пишутся float данные меняются несколько раз в секунду размер строк не будет одинаковый.
Кластерный индекс по дате сделать не могу. При построении графиков используется кластерный индекс другого поля.
Архитектуру базы менять не могу она создается автоматически сторонним ПО.
Что сложного в селекте самой старой строки и выдергивании оттуда даты?
16 дек 16, 12:47    [20011347]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
o-o
на кой там паглоки вообще?
индекс по дате некластерный,
а кластерный совсем по другому полю.
значит, в таблице подряд идущие даты вовсе не обязаны попадать на одну страницу.
зачем лочить 1000 страниц вместо 1000 ключей?

Че вы все придрались к paglock? Писался, когда не было известно что по дате индекс некластерный. ТС говорил "Таблица индексируется по дате". Вот и подразумевалось, что на таблице кластерный индекс по дате. Никто ж не знал что ТС имел ввиду этими словами. А сейчас видимо это копипаст. Ясный перец что если индекс не кластерный то особого смысла нет. И будет Seek по некластернуму и Lookup Key.

+ оффтоп
Давай-те посоветуем tablockx чтоб уж наверняка одна блокировка и все остальные идут лесом )))
16 дек 16, 12:48    [20011356]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Прошу прощения за отсутствие запятых )) Заработался.
16 дек 16, 12:49    [20011366]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
gds,
автор
И будет Seek по некластернуму и Lookup Key.

это при Delete будет? от скуки что ли?
16 дек 16, 12:53    [20011401]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Князь_Тьмы
Не пишутся данные, а не теряются. На график не выводятся.
Что значит размер строк? По одному из полей пишутся float данные меняются несколько раз в секунду размер строк не будет одинаковый.
Кластерный индекс по дате сделать не могу. При построении графиков используется кластерный индекс другого поля.
Архитектуру базы менять не могу она создается автоматически сторонним ПО.
Что сложного в селекте самой старой строки и выдергивании оттуда даты?

RSCI не вариант для вас?
16 дек 16, 12:54    [20011408]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
o-o
Guest
gds
o-o
на кой там паглоки вообще?
индекс по дате некластерный,
а кластерный совсем по другому полю.
значит, в таблице подряд идущие даты вовсе не обязаны попадать на одну страницу.
зачем лочить 1000 страниц вместо 1000 ключей?

Че вы все придрались к paglock? Писался, когда не было известно что по дате индекс некластерный. ТС говорил "Таблица индексируется по дате". Вот и подразумевалось, что на таблице кластерный индекс по дате. Никто ж не знал что ТС имел ввиду этими словами. А сейчас видимо это копипаст. Ясный перец что если индекс не кластерный то особого смысла нет. И будет Seek по некластернуму и Lookup Key.

+ оффтоп
Давай-те посоветуем tablockx чтоб уж наверняка одна блокировка и все остальные идут лесом )))

вы почему мой пост воспринимаете как личное оскорбление?
я вообще-то помню, когда писали вы, и что не было известно про некластерный.
но я же еще вижу, что ТС теперь валит всю "магию" улучшения ситуации на паглоки,
которые (нам ясно, ему нет) не нужны вообще.
пишут не вам, а ему, чтобы забил на них
16 дек 16, 12:59    [20011446]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Господа я уже забил на paglock тем более, что в данной ситуации он значения не имеет. Моя ошибка, что не сообщил по какому полю кластерный индекс.
Не будем срач разводить на пустом месте
16 дек 16, 13:03    [20011473]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
aleks2
Guest
Князь_Тьмы
Что значит размер строк? По одному из полей пишутся float данные меняются несколько раз в секунду размер строк не будет одинаковый.


Осподе, как туго то.

Если в строке таблицы НЕТ полей типа varchar/nvarchar/varbinary - размер строки фиксирован.
И "скока раз в секунду вас клюет жареный петух" - рояли не играет.

ЗЫ. Но каждый волен сходить с ума как ему заблагорассудится - может криволинейный интеграл вычислять.
16 дек 16, 13:06    [20011498]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
RSCI не вариант для вас?[/quot]

начал читать про блокировки, но доходит туго.
Можно снять блокировки, но рискую нарваться на нехватку оперативки и тормоза.
16 дек 16, 13:07    [20011501]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
aleks2
Guest
Князь_Тьмы
Кластерный индекс по дате сделать не могу. При построении графиков используется кластерный индекс другого поля.
Что сложного в селекте самой старой строки и выдергивании оттуда даты?


Бесполезно объяснять слепому что такое свет.
16 дек 16, 13:09    [20011513]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Князь_Тьмы
RSCI не вариант для вас?


начал читать про блокировки, но доходит туго.
Можно снять блокировки, но рискую нарваться на нехватку оперативки и тормоза.[/quot]
это где такое написано?

если есть где пробовать, я бы протестировал READPAST на удалении
16 дек 16, 13:09    [20011514]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
o-o
Guest
Князь_Тьмы

Что значит размер строк? По одному из полей пишутся float данные меняются несколько раз в секунду размер строк не будет одинаковый.

да, товарищ, пример прям в точку.
float означает fixed-length column,
в отличие от varchar типа variable length column.
запишите ли вы во флоат 0 или рассрояние до солнца в метрах,
поле все равно будет одной и той же длины.
а вот записать в варчар Иванова или Назаборногузадерищенко разница в размере будет
16 дек 16, 13:09    [20011515]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
TaPaK
gds,
автор
И будет Seek по некластернуму и Lookup Key.

это при Delete будет? от скуки что ли?

Ну да, описался (выразился неточно). лукапа не будет будет seek + cluster index delete. Lookup будет при проверки условий (по столбцам) не входящих в некластрерный индекс. либо будет скан кластерного.
16 дек 16, 13:26    [20011658]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
gds
TaPaK
gds,
пропущено...

это при Delete будет? от скуки что ли?

Ну да, описался (выразился неточно). лукапа не будет будет seek + cluster index delete. Lookup будет при проверки условий (по столбцам) не входящих в некластрерный индекс. либо будет скан кластерного.

агонь, все варианты предположим? джоины там ещё чего
16 дек 16, 13:29    [20011691]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
И какая разница как я буду рассчитывать размер базы? sp_spaceused делает это мгновенно. Кроме delete все операции происходят мгновенно.

С READPAST стало хуже
16 дек 16, 13:30    [20011705]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Князь_Тьмы
И какая разница как я буду рассчитывать размер базы? sp_spaceused делает это мгновенно. Кроме delete все операции происходят мгновенно.

С READPAST стало хуже

хуже что? тут либо отпускать читателей/писателей, либо удаление. с Readpast удалять будет медленнее, остальным должно стать легче
16 дек 16, 13:32    [20011721]     Ответить | Цитировать Сообщить модератору
 Re: Одновременное выполнение запросов  [new]
Князь_Тьмы
Member

Откуда:
Сообщений: 18
Странно, но пробелы в записях стали больше.
delete top (1000) from GPA11.dbo.DATA_LOG wile(readpast) where timestamp_utc <=@date2
правильный запрос?
16 дек 16, 13:38    [20011761]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить