Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как происходит блокировка при join-е  [new]
kucha_somnenij
Guest
а подскажите пожалуйста,
вот если у меня обсчитывается немаленький отчет, где соединены 6 таблиц,
и все это происходит на сервере, где CRM-щики каждую секунду делают свои Insert-ы
(call center), я могу им устроить deadlock?
вот конкретно при join-е 6ти таблиц, они все 6 одновременно заблокируются или сперва одна(а в это время какой-нибудь Insert-щик может другую заблокировать), потом сервер полезет блокировать для меня вторую -- а там уже exclusive lock,
ну и всем привет, если Insert-щикy понадобится моя первая таблица (их кстати 6, можно и посложнее сценарий придумать).
вот у меня такой дикий пробел по блокировкам, понятия не именю, при соединении все сразу блокируется или нет
22 сен 11, 10:44    [11317131]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kucha_somnenij,

BOL->Row Versioning
22 сен 11, 10:59    [11317284]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kucha_somnenij
Guest
pkarklin,
ушла читать, спасибо.
представляете, я даже считала, что это Row Versioning только к Oracle относится
22 сен 11, 11:03    [11317322]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
pkarklin
BOL->Row Versioning
Неужели панацея?
Может я отстал, плохо разбираюсь или черезчур консервативен?

Насколько "Row Versioning" требователен к ресурсам? (субъективно) (READ_COMMITTED_SNAPSHOT ON)
Ведь под эти массовые изменения нужны доп-ресурсы.

Правильно ли я понимаю, что при массовой линейных вставках (без update/delete), в tempdb будут только конечне/фронтальные страницы таблиц/индексов (на время сбора это одного отчёта). Или вообще ничего не будет?
(ALLOW_SNAPSHOT_ISOLATION = OFF конечно)

Т.е. только при update/delete будет кушатся ресурсы на проверку и создание копии строки для читающих её процессов?
Т.е. если (гипотетически) строки вставляются (с коммитом) быстрее чем читаются отчётом, то он будет собираться бесконечно?
Верно?

И второе, на сколько (в попугаях) update при версионности тормознее чем на чистых блокировках (в вакууме)?
22 сен 11, 13:53    [11319066]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
кэп ооо
Guest
Mnior
И второе, на сколько (в попугаях) update при версионности тормознее чем на чистых блокировках (в вакууме)?

примерно тормознее. около того.
22 сен 11, 14:00    [11319133]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kucha_somnenij
Guest
простите, вот я это Row Versioning почитала,
но мне-то это никак не поможет,
я не администратор,
никто не будет из-за отчетов переводить базу в режим,
где возможeн READ_COMMITTED_SNAPSHOT, а у меня прав на то нету.

можно ли мне всего лишь получить ответ,
правильно ли подозревать, что при соединении таблицы заблокируются не хором,
а по одной, с возможностью вклинивания между моими блокировками какого-нибудь писателя?
22 сен 11, 15:02    [11319677]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
kucha_somnenij
правильно ли подозревать, что при соединении таблицы заблокируются не хором,
а по одной, с возможностью вклинивания между моими блокировками какого-нибудь писателя?


правильно, шанс есть
22 сен 11, 15:06    [11319721]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kucha_somnenij
Guest
спасибо за ответ.
а, простите, такой вариант имеет ли право на жизнь:
я все равно вьюхи опрашиваю, они уже существуют, но все же,
могу ли я попросить админа вписать туда (nolock) в определение view
или накрайняк, если эти вьюхи им нужны, создать для меня
копии существующих со вписанными (nolock)?
система, генерирующая отчеты, предлагает для сборки отчетов такие "таскательные объекты",
и вот после кидания их на форму отчета генерятся запросы.
т.e. я туда руками не могу вписать nolock,
там сгенерятся соединения между вьюхами автоматически.
и вот бы там чудом оказалось это (nolock), не?
нас не интересуют статистики за сегодня, а типа за полгода,
т.е. мне изменения сегодняшнего дня погоды не сделают,
а писатели будут довольны, что отчет их таблицы не держит...
22 сен 11, 15:15    [11319807]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
kucha_somnenij, оптимизировать можно очень многими способами.
1. Чем меньше количество запросов тем меньше вероятность deadlock-а (один побольше чем два поменьше).
2. Вместо NoLock напротив каждой таблы есть SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED для всей ссесии, и не надо view трогать.
3. Если у вас в запросе есть ограничения на данные "меньше сегодняшего дня", то вероятность блокировок сильно уменьшается.
4. ...

Запрос может свалится в монопольную блокировку таблицы, но это мало вероятно, тем более с постоянными вставками.
А локируется не обязательно на всё время, скорее блокируется текущий кусок данных (скользаящее окно).
Сосредоточтесь на оптимальности плана.

Мне кажется что стратегия pkarklin-а как раз в том, что можно удачно отмахатьсяот от чайников фразой Row Versioning.
Результат при малом консультировании. Не?

pkarklin, что скажете на это 11319066?
22 сен 11, 16:08    [11320289]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kucha_somnenij
Guest
а научите плиз выставить параметры сессии для этой самой программы отчетов.
она не самописная и живет совсем не на моем компе.
называется Business Objects (BO),
отчеты делаются на портале, отсылаются на сервер BO,
а он уже засылает SQL Server-у.
причем когда работала не в Web Intelligence, а в толстом клиенте,
если в профайлере смотреть, BO посылает preparesql,
и весь запрос в кавычках, ну как динамический, куда правда он подставил значения параметров,
а перед этим еще и устанавливает read commited.
не я, а он сам, и нет никаких настроек, чтоб это поменять.

отчеты по сегодняшний день включительно,
но за приличный период, т.е. разница с настоящим в 1-2-10 звонков неважна,
но сегодня должно включаться.
22 сен 11, 16:29    [11320492]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
kucha_somnenij, мышкодрочество не мой конёк.
Я все эти комбайны посылаю лесом. У меня есть очень большой негативный опыт с разработкой и поддержкой, в команде.
И в добавок субъективное отношение, при понимании что стоит за этими монстрами. Скажем так *nix way мне больше по душе.

pkarklin и все остальные гуру, up
22 сен 11, 16:42    [11320576]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kucha_somnenij
а научите плиз выставить параметры сессии для этой самой программы отчетов.
она не самописная и живет совсем не на моем компе.
называется Business Objects (BO),
отчеты делаются на портале, отсылаются на сервер BO

Таки видимо Crystal Reports у вас генератор отчетов, и он имеет кучу настроек. И ко всему прочему, генераторы отчетов рассматриваются здесь.
22 сен 11, 19:15    [11321770]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Up
23 сен 11, 09:43    [11323411]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
aleks2
Guest
kucha_somnenij
а научите плиз выставить параметры сессии для этой самой программы отчетов.
она не самописная и живет совсем не на моем компе.
называется Business Objects (BO),
отчеты делаются на портале, отсылаются на сервер BO,
а он уже засылает SQL Server-у.
причем когда работала не в Web Intelligence, а в толстом клиенте,
если в профайлере смотреть, BO посылает preparesql,
и весь запрос в кавычках, ну как динамический, куда правда он подставил значения параметров,
а перед этим еще и устанавливает read commited.
не я, а он сам, и нет никаких настроек, чтоб это поменять.

отчеты по сегодняшний день включительно,
но за приличный период, т.е. разница с настоящим в 1-2-10 звонков неважна,
но сегодня должно включаться.


1. Если вам надо много и недорого - храните накопительные результаты с приемлемым периодом (день или неделя - вам решать) и досчитывайте только хвосты.
2. Ибо никакие ухищрения не спасут сервер от необходимости прочитать гигабайты данных с диска. А NOLOCK для диска ишо в разработке.
23 сен 11, 10:42    [11323959]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
kucha_somnenij
я могу им устроить deadlock?
при соединении все сразу блокируется или нет
Да, можете, не сразу.

Вам нужно уточнить требования и либо использовать грязное чтение, либо версии, либо блокировать всё перед чтением.
23 сен 11, 11:19    [11324281]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
aleks2
1. Если вам надо много и недорого - храните накопительные результаты с приемлемым периодом (день или неделя - вам решать) и досчитывайте только хвосты.
Это конечно самый лучьший вариант, но простой писатель отчётов вряд ли сможет изменить приложение. Как написано, так написано :-)
23 сен 11, 11:20    [11324295]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
kucha_somnenij
а научите плиз выставить параметры сессии для этой самой программы отчетов.
Да, интересно, можно ли задавать этому генератору любой правильный батч, или только простой запрос...

Если можно, то тогда всё легко решается...
23 сен 11, 11:23    [11324325]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
alexeyvg
kucha_somnenij
а научите плиз выставить параметры сессии для этой самой программы отчетов.
Да, интересно, можно ли задавать этому генератору любой правильный батч, или только простой запрос...

Если можно, то тогда всё легко решается...

До 2009 года можно было 100%, после этого я уже с Crystal Reports практически не работал))). Но сомневаюсь, что эту возможность убрали.
23 сен 11, 13:31    [11325648]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
kDnZP
alexeyvg
пропущено...
Да, интересно, можно ли задавать этому генератору любой правильный батч, или только простой запрос...

Если можно, то тогда всё легко решается...

До 2009 года можно было 100%, после этого я уже с Crystal Reports практически не работал))). Но сомневаюсь, что эту возможность убрали.
Ну тогда нормально, уровень изоляции можно на ноулок поменять, или наоборот всё заблокировать
23 сен 11, 13:56    [11325981]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
alexeyvg, кстати, задумался... Возможно я и соврал на счет батчей. Т.к. однозначно работает подсовывание одиночных запросов и процедур, а с батчами не помню(((. Ну в любом случае нужно спрашивать у тех, кто щаз с кристалом работает... Но щаз попробую проверить с урезанной версией, которая с VS2008 в комплекте идет.

* Можно конечно и полный комплект дома поставить, но честно говоря лень.
23 сен 11, 14:01    [11326069]     Ответить | Цитировать Сообщить модератору
 Re: как происходит блокировка при join-е  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Короче говоря лень копаться, но вроде все равно можно.
23 сен 11, 14:38    [11326494]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить