Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уровень изоляции транзацкции в процедуре / 10 сообщений из 10, страница 1 из 1
23.01.2020, 10:09
    #39917703
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Есть две бизнес системы, А и Б. В основе обоих систем SQL SERVER. В бизнес системе А периодически появляется цепочка блокировок. Развернув систему мониторинга длительных запросов и проведя несколько тестов было установлено, что источником проблем является интеграционная процедура, которая по запросу пользователя системы Б перегружает часть данных из А. На серевере А стоит уровень изоляции транзакции read committed. Вопрос: если в приоритете производтельность системы А (процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы, из-за чего бизнес пользователи системы А "ждут"), и системе Б не настолько критичен риск записать незакомиченные данные, чтобы интеграционная процедура ничего не блокировала в системе А, можно ли в её начале прописать SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED? (саму интеграционную процедуру воспринимаем как черный ящик, ресурсов на её детальный разбор нет, а проблему производительности нужно решить).
...
Рейтинг: 0 / 0
23.01.2020, 10:33
    #39917719
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Saniacot
процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы
На RC читатель не может блокировать "записи и страницы". Только одну запись или одну страницу. Так что либо у вас там блокирует писатель, а не читатель, либо не RC. Поэтому грязное чтение не спасет.

Если окажется, что источник проблем писатель и он блокирует читателей, то включите RCSI.

ЗЫ: "Только одну запись или одну страницу" - само собой в контексте одной таблицы, а не транзакции целиком.
...
Рейтинг: 0 / 0
23.01.2020, 10:46
    #39917730
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
invm
Saniacot
процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы
На RC читатель не может блокировать "записи и страницы". Только одну запись или одну страницу. Так что либо у вас там блокирует писатель, а не читатель, либо не RC. Поэтому грязное чтение не спасет.

Если окажется, что источник проблем писатель и он блокирует читателей, то включите RCSI.

ЗЫ: "Только одну запись или одну страницу" - само собой в контексте одной таблицы, а не транзакции целиком.


Спасибо большое за совет. Подскажите, если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"?

т.е. INSERT INTO #temptable (
column)
select
column
from таблица из системы А
...
Рейтинг: 0 / 0
23.01.2020, 10:48
    #39917735
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Saniacot
если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"?
Читатель.
...
Рейтинг: 0 / 0
23.01.2020, 10:49
    #39917737
Saniacot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
invm
Saniacot
если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"?
Читатель.

Понял, спасибо.
...
Рейтинг: 0 / 0
23.01.2020, 10:54
    #39917741
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Saniacot
На серевере А стоит уровень изоляции транзакции read committed

"кто не ком стоял?" (С)
на сервере никакой уровень изоляции "не стоит"
и если ваша процедура -- "черный ящик", может она и выставляет себе, например, serializable
(ну захотелось им выгружать консистентные данные,
может и блокируют вообще все, что читают, до конца выгрузки)
---
цепочку блокировок покажите,
в ней как раз и видно, кто кого блокирует
...
Рейтинг: 0 / 0
23.01.2020, 14:00
    #39917898
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Saniacot,

А почему возникает ожидание у пользователей А? Они хотят записать в таблицу, которую читает сервер Б?
...
Рейтинг: 0 / 0
26.01.2020, 17:08
    #39918840
defragmentator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Владислав Колосов,

Если в A read committed и он читает в то время, когда у B висит незавершённая транзакция по записи в ту же таблицу, то A будет ждать завершения.
Именно так.
...
Рейтинг: 0 / 0
27.01.2020, 13:09
    #39919055
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
defragmentator,

прописать-то UNCOMMITTED можно, но нет гарантии, что вы прочтёте недостоверные данные. Однако, на момент загрузки сервером А можно создавать моментальный снимок базы Б и после загрузки его удалять, если позволяет модель восстановление базы Б. Читать, соответственно, из моментального снимка.
...
Рейтинг: 0 / 0
27.01.2020, 13:25
    #39919065
entrypoint
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уровень изоляции транзацкции в процедуре
Saniacot,

Для выборок поможет включение изоляции моментальных снимков, будете всегда получать данные зафиксированных транзакций

Код: sql
1.
2.
3.
4.
5.
6.
USE [master]
GO
ALTER DATABASE [Ваша БД] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT
GO
ALTER DATABASE [Ваша БД] SET ALLOW_SNAPSHOT_ISOLATION ON
GO



Для записи нужно изменять логику работы
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Уровень изоляции транзацкции в процедуре / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]