Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
23.01.2020, 10:09
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
Есть две бизнес системы, А и Б. В основе обоих систем SQL SERVER. В бизнес системе А периодически появляется цепочка блокировок. Развернув систему мониторинга длительных запросов и проведя несколько тестов было установлено, что источником проблем является интеграционная процедура, которая по запросу пользователя системы Б перегружает часть данных из А. На серевере А стоит уровень изоляции транзакции read committed. Вопрос: если в приоритете производтельность системы А (процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы, из-за чего бизнес пользователи системы А "ждут"), и системе Б не настолько критичен риск записать незакомиченные данные, чтобы интеграционная процедура ничего не блокировала в системе А, можно ли в её начале прописать SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED? (саму интеграционную процедуру воспринимаем как черный ящик, ресурсов на её детальный разбор нет, а проблему производительности нужно решить). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:33
|
|||
---|---|---|---|
Уровень изоляции транзацкции в процедуре |
|||
#18+
Saniacot процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы Если окажется, что источник проблем писатель и он блокирует читателей, то включите RCSI. ЗЫ: "Только одну запись или одну страницу" - само собой в контексте одной таблицы, а не транзакции целиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:46
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
invm Saniacot процедура интеграции очень большая и отрабатывает долго, при этом блокируя записи и страницы Если окажется, что источник проблем писатель и он блокирует читателей, то включите RCSI. ЗЫ: "Только одну запись или одну страницу" - само собой в контексте одной таблицы, а не транзакции целиком. Спасибо большое за совет. Подскажите, если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"? т.е. INSERT INTO #temptable ( column) select column from таблица из системы А ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:48
|
|||
---|---|---|---|
Уровень изоляции транзацкции в процедуре |
|||
#18+
Saniacot если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:49
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
invm Saniacot если в рамках интеграционной процедуры данные из таблицы системы А записываются во временную таблицу, то это все также "читатель" или уже "писатель"? Понял, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 10:54
|
|||
---|---|---|---|
Уровень изоляции транзацкции в процедуре |
|||
#18+
Saniacot На серевере А стоит уровень изоляции транзакции read committed "кто не ком стоял?" (С) на сервере никакой уровень изоляции "не стоит" и если ваша процедура -- "черный ящик", может она и выставляет себе, например, serializable (ну захотелось им выгружать консистентные данные, может и блокируют вообще все, что читают, до конца выгрузки) --- цепочку блокировок покажите, в ней как раз и видно, кто кого блокирует ... |
|||
:
Нравится:
Не нравится:
|
|||
|
23.01.2020, 14:00
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
Saniacot, А почему возникает ожидание у пользователей А? Они хотят записать в таблицу, которую читает сервер Б? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
26.01.2020, 17:08
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
Владислав Колосов, Если в A read committed и он читает в то время, когда у B висит незавершённая транзакция по записи в ту же таблицу, то A будет ждать завершения. Именно так. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.01.2020, 13:09
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
defragmentator, прописать-то UNCOMMITTED можно, но нет гарантии, что вы прочтёте недостоверные данные. Однако, на момент загрузки сервером А можно создавать моментальный снимок базы Б и после загрузки его удалять, если позволяет модель восстановление базы Б. Читать, соответственно, из моментального снимка. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
27.01.2020, 13:25
|
|||
---|---|---|---|
|
|||
Уровень изоляции транзацкции в процедуре |
|||
#18+
Saniacot, Для выборок поможет включение изоляции моментальных снимков, будете всегда получать данные зафиксированных транзакций Код: sql 1. 2. 3. 4. 5. 6.
Для записи нужно изменять логику работы ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=46&mobile=1&tid=1686599]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 323ms |
total: | 457ms |
0 / 0 |