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

Откуда:
Сообщений: 1551
Задаю вопрос тут, ибо думаю что больше шансов что ответят тут а не в соответствующей ветке.
Итак. Имеем SQL Reporting Services.
При создании отчета сначала выполняется вставка данных в физическую табличку на сервере, а уже потом из этой физической таблицы - чтение.
То есть что то вроде - exec [моя хранимая процедура которая вставляет в таблицу] и затем select [из этой таблицы].
Естественно в ситуации просмотра отчета несколькими пользователями возникнет блокировка - оба попытаются вставить данные в таблицу, как избежать такого? Где почитать? Я слышал что блокировки нужно делать на уровне приложения а не на серверной стороне. Как быть с ReportingServices?
18 фев 14, 13:24    [15582012]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Santa89
как избежать такого?

Никак.
Нужно уменьшать время блокировки/запроса

Santa89
Я слышал что блокировки нужно делать на уровне приложения а не на серверной стороне.

Какая разница, на каком уровне блокировка, если блокировка все ранов заствляет другие соединения ждать ресурса ?
18 фев 14, 13:29    [15582062]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
aleks2
Guest
Glory
Santa89
как избежать такого?

Никак.


Да хоть бы хны.
а) вставлять во временную таблицу.
б) вставлять в постоянную таблицу с признаком соединения (@@spid)
в) поставить sp_getapplock
18 фев 14, 13:35    [15582118]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Santa89
При создании отчета сначала выполняется вставка данных в физическую табличку на сервере, а уже потом из этой физической таблицы - чтение.
То есть что то вроде - exec [моя хранимая процедура которая вставляет в таблицу] и затем select [из этой таблицы].
Естественно в ситуации просмотра отчета несколькими пользователями возникнет блокировка - оба попытаются вставить данные в таблицу, как избежать такого? Где почитать?

Что касается ситуации - полезно заменить постоянную таблицу (с разделением по SPID-ам, видимо?) на локальную временную - тогда у разных отчетов нет шансов помешать друг другу.
Santa89
Я слышал что блокировки нужно делать на уровне приложения а не на серверной стороне. Как быть с ReportingServices?

Что до именно блокировок - "На уровне приложения, а не на сервере" - это что-то загадочное. Вы при желании можете сделать sp_getapplock и в RS - и это тоже решит Вашу проблему.
18 фев 14, 13:36    [15582119]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
Glory
Member

Откуда:
Сообщений: 104751
aleks2
Glory
пропущено...

Никак.


Да хоть бы хны.
а) вставлять во временную таблицу.
б) вставлять в постоянную таблицу с признаком соединения (@@spid)
в) поставить sp_getapplock

Это все _уменьшает_ время блокировки. А не убирает ее
18 фев 14, 13:36    [15582126]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Glory
aleks2
пропущено...


Да хоть бы хны.
а) вставлять во временную таблицу.
б) вставлять в постоянную таблицу с признаком соединения (@@spid)
в) поставить sp_getapplock

Это все _уменьшает_ время блокировки. А не убирает ее

А какой ресурс блокируется в случае локальных временных таблиц?
18 фев 14, 13:39    [15582153]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
aleks2
Guest
Glory
aleks2
пропущено...


Да хоть бы хны.
а) вставлять во временную таблицу.
б) вставлять в постоянную таблицу с признаком соединения (@@spid)
в) поставить sp_getapplock

Это все _уменьшает_ время блокировки. А не убирает ее


Ну, с точки зрения "вульгарного понимания блокировки тредстартером" - а) и б) ее устраняет.
Т.е. два пользователя смогут смотреть свои отчеты "одновременно".
18 фев 14, 13:41    [15582170]     Ответить | Цитировать Сообщить модератору
 Re: Приложение выполняет хранимку. Блокировка.  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
Кот Матроскин
Glory
пропущено...

Это все _уменьшает_ время блокировки. А не убирает ее

А какой ресурс блокируется в случае локальных временных таблиц?


Точнее, запрос на какой ресурс будет ожидать снятия блокировки другим процессом (проблема ТС)?
18 фев 14, 13:45    [15582219]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить