powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / конфликт блокировок после обновления sql server 2012 до 2017
16 сообщений из 16, страница 1 из 1
конфликт блокировок после обновления sql server 2012 до 2017
    #40128056
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано:
server 2012r2 и была установлена на нем sql server 2012

Пришла в голову идея обновить скуль до более новой версии (с нового года переходили в новую базу, т.к. старая разрослась и еле работала) - 2017 максимально возможная на server 2012r2
Был сделан бэкап баз, сами базы физически остались на дисках, их не удаляли.
Удалили старый ms sql 2012, установили 2017..
Решил не восстанавливать бд из бэкапов, а просто через attach присоединить - скуль базы принял, ошибок не выдал.

Далее на скуле было включено ограничение на использование памяти - выделил 70 гб из 120
а так же установил maxdop = 1, т.к. используем бд для 1с

В общем, через пару дней, пользователи начали массово жаловаться о том что система выдает ошибку на конфликт блокировок.

смотрю нагрузку на проц - скуль и 1с не грузят его даже на 10%

запустил скрипт по ссылке (Анализ ожидания блокировок SQL сервера)
результат пока в спойлере... но это значения пока часть ушла на обед... чуть позже еще запущу



p.s. регламентные задания настроены.. сама база маленькая - 8гб только весит
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128063
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь важно: "скуль", "скуля", "на скуле" - сразу ясно, что проблемы решаемы

Скуль на мастдайской венде инстолирован?
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128072
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг Хупин
Здесь важно: "скуль", "скуля", "на скуле" - сразу ясно, что проблемы решаемы

Скуль на мастдайской венде инстолирован?

windows server 2012r2
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128081
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jawakharlal
система выдает ошибку на конфликт блокировок.
Скульная ошибка какая?
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128088
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Jawakharlal
система выдает ошибку на конфликт блокировок.
Скульная ошибка какая?


И можно выловить на скуле х*еМеЛьный файл с блокировками
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128111
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Jawakharlal
система выдает ошибку на конфликт блокировок.
Скульная ошибка какая?

Microsoft SQL Server Native Client 11.0: Превышено время ожидания запроса на блокировку.
HRESULT=80040E31, SQLSrvr, SQLSTATE=HYT00, state=33, Serverity=10, native=1222, line=1
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128163
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jawakharlal,

1C у вас походу выставляет set lock_timeout

посмотрите запросом если можете какое у него значение
Код: sql
1.
select @@LOCK_TIMEOUT  



поскольку глобальной настройки со стороны сервера нет, это настраивается для каждой сессии отдельно. видимо у вас как то 1С сконфигурированна так что она его выставляет. попробуйте покопаться в настройках конфигуратора и увеличить пороговое значение.

или следите за блокировками и смотрите причину почему они у вас так долго держатся
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128170
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff
Jawakharlal,

1C у вас походу выставляет set lock_timeout

посмотрите запросом если можете какое у него значение
Код: sql
1.
select @@LOCK_TIMEOUT  



поскольку глобальной настройки со стороны сервера нет, это настраивается для каждой сессии отдельно. видимо у вас как то 1С сконфигурированна так что она его выставляет. попробуйте покопаться в настройках конфигуратора и увеличить пороговое значение.

или следите за блокировками и смотрите причину почему они у вас так долго держатся


Код: sql
1.
select @@LOCK_TIMEOUT  

= -1

в самой конфигурации 1с указано по-умолчанию что таймаут на ожидание блокировки 20 сек..
так и получается - нажимает пользователь на "провести документ" - ловит ошибку через 20сек, пока программа "думает".. жмет повторить - и иногда сразу проходит, а иногда 4-6 раз приходится повторять, и каждый раз ждать по 20 сек, пока программа не выдаст ошибку
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128267
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jawakharlal,


можете настроить отчет о заблокированных процессах

Код: sql
1.
exec sp_configure 'blocked process threshold', 20 ;  



после этого начнут формироваться события blocked-process-report
https://docs.microsoft.com/ru-ru/sql/relational-databases/event-classes/blocked-process-report-event-class?view=sql-server-ver15

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

видимо какой то из процессов у вас запускает длительную транзакцию которая блокирует строки в таблицах к которым обращаются пользователи, несовместимыми типами блокировок.

типа:
Код: sql
1.
2.
3.
process A: begin tran; update tbl_Clients set blablabla

process B: (пользовательский) select from tbl_Clients (при TIL READ COMMITED) будет заблокирован пока транзакция процесса А не завершится

ну и тому подобное, ищите причину в долгих запросах.
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128365
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,

автор1C у вас походу выставляет set lock_timeout
нет, это тайм-аут на самой 1С.

Если ТС совсем не разбирается в вопросе, то можно установить на сервер
http://whoisactive.com/
и понаблюдать - кто создаёт длительные блокировки.
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128393
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
блокировки создает документ(это в принципе основной документ, с которым работают сотрудники)
факт в том, что до перехода на 2017 sql - дедлоков не было..
но помимо обновления субд - программисты создали новую базу, и перенесли в нее конфигурацию (вместе со всякими справочниками, и прочими данными).
вот я и не могу понять, кто крайний.. я или программисты.
себя виню за то что подключил базу через attach - а не путем восстановления., т.к. не уверен что так можно, но раз ошибок при подключении не было - решил оставить как есть, дабы не тратить время на процедуру восстановления (т.к. старая база вместе с логом весила около 300гб)...
за блокировками наблюдаю через утилиту MSSQL Blocks ver 1.9.22.117 , и код блокирующей транзакции всегда один и тот же.
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128398
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jawakharlal,

это походу у вас последняя инструкция из пакета показана.

у вас ожидающие сессии ждут U-блокировку на ключ индекса.

а сессия которая держит данную блокировку в состоянии sleeping то есть простаивает с открытой транзакцией.

предполагаю там была последовательность команд до этого вида:
Код: sql
1.
2.
3.
4.
5.
begin tran;

update dbo._inforg7230 set blablabla;

и уже потом этот конечный select который вы показали, но после него отсутствует commit tran
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128405
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
felix_ff, приложу пример...
3 блокировки:

spid75:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
(@P1 varbinary(16))SELECT
T1.Fld7233RRef,
T7._IDRRef,
T1.Period_,
T7._Number,
T1.RecorderTRef,
T1.RecorderRRef
FROM (SELECT
T6._Fld7231RRef AS Fld7231RRef,
T6._Fld7233RRef AS Fld7233RRef,
T6._Period AS Period_,
T6._RecorderTRef AS RecorderTRef,
T6._RecorderRRef AS RecorderRRef
FROM (SELECT
T3.Fld7231RRef AS Fld7231RRef,
T3.Fld7232RRef AS Fld7232RRef,
T3.MAXPERIOD_ AS MAXPERIOD_,
SUBSTRING(MAX(T5._RecorderTRef + T5._RecorderRRef),1,4) AS MAXRECORDERTRef,
SUBSTRING(MAX(T5._RecorderTRef + T5._RecorderRRef),5,16) AS MAXRECORDERRRef
FROM (SELECT
T4._Fld7231RRef AS Fld7231RRef,
T4._Fld7232RRef AS Fld7232RRef,
MAX(T4._Period) AS MAXPERIOD_
FROM dbo._InfoRg7230 T4
WHERE T4._Active = 0x01
GROUP BY T4._Fld7231RRef,
T4._Fld7232RRef) T3
INNER JOIN dbo._InfoRg7230 T5
ON T3.Fld7231RRef = T5._Fld7231RRef AND T3.Fld7232RRef = T5._Fld7232RRef AND T3.MAXPERIOD_ = T5._Period
WHERE T5._Active = 0x01
GROUP BY T3.Fld7231RRef,
T3.Fld7232RRef,
T3.MAXPERIOD_) T2
INNER JOIN dbo._InfoRg7230 T6
ON T2.Fld7231RRef = T6._Fld7231RRef AND T2.Fld7232RRef = T6._Fld7232RRef AND T2.MAXPERIOD_ = T6._Period AND T2.MAXRECORDERTRef = T6._RecorderTRef AND T2.MAXRECORDERRRef = T6._RecorderRRef) T1
LEFT OUTER JOIN dbo._Document284 T7
ON T1.Fld7231RRef = T7._IDRRef
WHERE (T1.Fld7231RRef = @P1)



spid71:
Код: sql
1.
2.
3.
4.
UPDATE T2 SET _Fld8106 = T2._Fld8106 + T1._Fld8173
FROM #tt9 T1 WITH(NOLOCK)
INNER JOIN dbo._AccumRgT8110 T2
ON T1._Period = T2._Period AND T1._Fld8167_TYPE = T2._Fld8100_TYPE AND T1._Fld8167_RTRef = T2._Fld8100_RTRef AND T1._Fld8167_RRRef = T2._Fld8100_RRRef AND T1._Fld8168RRef = T2._Fld8101RRef AND T1._Fld8169RRef = T2._Fld8102RRef AND T1._Fld8170RRef = T2._Fld8103RRef AND T1._Fld8171RRef = T2._Fld8104RRef AND T1._Fld8172_TYPE = T2._Fld8105_TYPE AND T1._Fld8172_RTRef = T2._Fld8105_RTRef AND T1._Fld8172_RRRef = T2._Fld8105_RRRef



spid77:
Код: sql
1.
2.
3.
4.
UPDATE T2 SET _Fld8106 = T2._Fld8106 + T1._Fld8173
FROM #tt6 T1 WITH(NOLOCK)
INNER JOIN dbo._AccumRgT8110 T2
ON T1._Period = T2._Period AND T1._Fld8167_TYPE = T2._Fld8100_TYPE AND T1._Fld8167_RTRef = T2._Fld8100_RTRef AND T1._Fld8167_RRRef = T2._Fld8100_RRRef AND T1._Fld8168RRef = T2._Fld8101RRef AND T1._Fld8169RRef = T2._Fld8102RRef AND T1._Fld8170RRef = T2._Fld8103RRef AND T1._Fld8171RRef = T2._Fld8104RRef AND T1._Fld8172_TYPE = T2._Fld8105_TYPE AND T1._Fld8172_RTRef = T2._Fld8105_RTRef AND T1._Fld8172_RRRef = T2._Fld8105_RRRef

...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128517
Тяп-ляп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уровень совместимости какой сейчас у БД?
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128521
Jawakharlal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тяп-ляп
Уровень совместимости какой сейчас у БД?

сейчас 140
был вроде 100 (сама бд первоначально на старом серваке была на ms sql 2008, потом переехали на другой (2012), и как-то совместимость не трогали)
...
Рейтинг: 0 / 0
конфликт блокировок после обновления sql server 2012 до 2017
    #40128621
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jawakharlal,

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


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