Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Включить версионность для борьбы с блокировками / 25 сообщений из 46, страница 1 из 2
29.11.2019, 02:55
    #39896012
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
У одного из клиентов при определенной наша база начинает тормозить, при том, что ресурсы на сервере не на пределе (скриншот внизу). Следовательно подвисает на блокировках. Насколько включение версионного режима поможет в этом случае (только конфигурационное изменение, не трогая никакого кода) и какие вообще подводные камни тут есть? Насколько понимаю Read Committed автоматически перестанет виснуть на блокировках, но слегка увеличится нагрузка на сервер из-за создания версий. Какие еще проблемы тут могут быть?
...
Рейтинг: 0 / 0
29.11.2019, 03:20
    #39896013
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
У одного из клиентов при определенной наша база начинает тормозить, при том, что ресурсы на сервере не на пределе (скриншот внизу). Следовательно подвисает на блокировках


С чего вы взяли?
Может, у вас статистика там быстро устаревает?

Вам нужно сначала изучить вопрос и убедится в этих предположениях.
...
Рейтинг: 0 / 0
29.11.2019, 05:14
    #39896016
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Критик

С чего вы взяли?
Может, у вас статистика там быстро устаревает?

Вам нужно сначала изучить вопрос и убедится в этих предположениях.

блокировки с высокой вероятностью, изучить что там именно не просто т.к. продакшн и это займет время. Поэтому если предположить что именно блокировки, то насколько включенная версионность поможет и насколько может повредить?
...
Рейтинг: 0 / 0
29.11.2019, 05:49
    #39896024
Idol_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель,

вот уж с версионностью, я бы игрался в последнюю очередь на боевом сервере, без теста.

Копайте блокировки. Это более безопасно и более эффективно.
И в половине случаев можно решить индексами (может в паре с plan guide).

Кстати, в 99% процентах случаев, блокировки - это косяк дизайна программы/БД.
...
Рейтинг: 0 / 0
29.11.2019, 06:14
    #39896025
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Idol_111

вот уж с версионностью, я бы игрался в последнюю очередь на боевом сервере, без теста.

а почему так? Что именно может сломаться? Я понимаю что починить блокировки правильнее, но это намного сложнее и не воспроизводится локально. Версионность выглядит как быстрый и безопасный способ починить, по крайней мере временно.
...
Рейтинг: 0 / 0
29.11.2019, 06:39
    #39896029
Idol_111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
Idol_111

вот уж с версионностью, я бы игрался в последнюю очередь на боевом сервере, без теста.

а почему так? Что именно может сломаться? Я понимаю что починить блокировки правильнее, но это намного сложнее и не воспроизводится локально. Версионность выглядит как быстрый и безопасный способ починить, по крайней мере временно.

Бизнес может сломаться. Правила же могут поменяться. Вы даете возможность читать грязные данные. Косяки не предсказуемы.
Это надо тестировать на глубоком уровне. Конечно, можно не париться если у вас программа типа 2+2, так блокировок бы не было в таком случая, я полагаю.

Ну погуглите что ли, на первой же странице по русски.
...
Рейтинг: 0 / 0
29.11.2019, 06:52
    #39896031
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Idol_111

Бизнес может сломаться. Правила же могут поменяться. Вы даете возможность читать грязные данные. Косяки не предсказуемы.
Это надо тестировать на глубоком уровне. Конечно, можно не париться если у вас программа типа 2+2, так блокировок бы не было в таком случая, я полагаю.

Ну погуглите что ли, на первой же странице по русски.

не, это не верно, во первых мы очевидно не используем уровень Snapshot, а RC, который превратится в RCSI, так что с бизнесом проблем точно не будет. Интересуют есть-ли какие-то технические подводные камни, на которые можно напороться на практике.
...
Рейтинг: 0 / 0
29.11.2019, 07:26
    #39896038
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
мы очевидно не используем уровень Snapshot, а RC, который превратится в RCSI, так что с бизнесом проблем точно не будет.
Превратится в READ_COMMITTED_SNAPSHOT? Разве это не означает, что читающая транзакция будет читать копию, вместо ожидания конца блокировки?
...
Рейтинг: 0 / 0
29.11.2019, 07:50
    #39896046
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
alexeyvg
Превратится в READ_COMMITTED_SNAPSHOT? Разве это не означает, что читающая транзакция будет читать копию, вместо ожидания конца блокировки?

да, именно так. Но это-же не грязное чтение, плюс если строка залочена, это может быть из-за сканов итп, т.е. совсем не факт что конкретно эта строка вообще изменяется
...
Рейтинг: 0 / 0
29.11.2019, 08:03
    #39896050
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
alexeyvg
Превратится в READ_COMMITTED_SNAPSHOT? Разве это не означает, что читающая транзакция будет читать копию, вместо ожидания конца блокировки?

да, именно так. Но это-же не грязное чтение
Замечание Idol_111 было про изменение бизнес-логики.

Разработчики БД использовали уровень READ_COMMITTED для того, что бы при выборке данных подождать окончания транзакции, и не считывать данные до её завершения. А тут поведение меняется на чтение данных на момент до начала транзакции.

Наверное, это не должно привести к нарушениям, если система спроектирована правильно - нестрашно, что версия будет "до", главное, данные согласованы.
Но всё таки, бывают приложения, которые специально рассчитывают на то, что читающая транзакция будет ждать завершения записи. Например, лочат данные, и что то меняют снаружи (по отношению к сиквелу). То есть, обновление там используется как средство синхронизации, наподобие своего "sp_getapplock".
Кнюпель
плюс если строка залочена, это может быть из-за сканов итп, т.е. совсем не факт что конкретно эта строка вообще изменяется
Это вы совсем зря добавили :-)
"Авось эта строка на самом деле не изменится" - зачем это???
...
Рейтинг: 0 / 0
29.11.2019, 08:35
    #39896065
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель,

Надо не организационными мерами проблему решать, а брать SQL Profiler или Extended Events, делать трассировку и оптимизировать запросы. Если у вас блокировки, значит код так написан и его надо оптимизировать.
...
Рейтинг: 0 / 0
29.11.2019, 09:26
    #39896083
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
alexeyvg

Но всё таки, бывают приложения, которые специально рассчитывают на то, что читающая транзакция будет ждать завершения записи. Например, лочат данные, и что то меняют снаружи (по отношению к сиквелу). То есть, обновление там используется как средство синхронизации, наподобие своего "sp_getapplock".

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

alexeyvg
Это вы совсем зря добавили :-)
"Авось эта строка на самом деле не изменится" - зачем это???

как зачем, как раз имхо наиболее вероятный случай блокировок - когда нет нужного индекса и блокируется целоком таблица, в результате все висит хотя ничего из того, что требуется менятся и не собирается
...
Рейтинг: 0 / 0
29.11.2019, 09:29
    #39896084
Кнюпель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
a_voronin

Надо не организационными мерами проблему решать, а брать SQL Profiler или Extended Events, делать трассировку и оптимизировать запросы. Если у вас блокировки, значит код так написан и его надо оптимизировать.

я все понимаю про то, как будет "правильно", но в данном топике интересует именно аспект когда включается версионность для борьбы с локами
...
Рейтинг: 0 / 0
29.11.2019, 09:49
    #39896103
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
У одного из клиентов при определенной наша база начинает тормозить, при том, что ресурсы на сервере не на пределе
При определенной что?
Если БД ведет себя нормально у всех и чудит у одного, то может там поселился любитель виртуализировать все подряд и дело вовсе не в БД и MSSQL.

Включение RCSI ничего не поломает в работе с данными. После включения можете на некоторое время получить просадку производительности, если есть большая активность по модификации данных.
...
Рейтинг: 0 / 0
29.11.2019, 10:22
    #39896125
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
что-то страхи нагоняют про RSCII, откуда там грязное чтение? Давно перевели всё на него и кроме понимания новой нагрузки на tempdb особо и нет ничего. Ну и да это уже дефолт уже как минимум дла азуры
...
Рейтинг: 0 / 0
29.11.2019, 10:45
    #39896138
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
a_voronin

Надо не организационными мерами проблему решать, а брать SQL Profiler или Extended Events, делать трассировку и оптимизировать запросы. Если у вас блокировки, значит код так написан и его надо оптимизировать.

я все понимаю про то, как будет "правильно", но в данном топике интересует именно аспект когда включается версионность для борьбы с локами


Вы будете ещё долго и безуспешно "танцевать бубном" вокруг вашего сервера, пока не займетесь оптимизацией.

Вы считаете, что разработали софт, а вы его "недоразработали".
...
Рейтинг: 0 / 0
29.11.2019, 10:47
    #39896141
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель
alexeyvgЭто вы совсем зря добавили :-)
"Авось эта строка на самом деле не изменится" - зачем это???

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

Собственно, какой ещё ответ на ваш вопрос "Интересуют есть-ли какие-то технические подводные камни, на которые можно напороться на практике" может быть? Разумеется, абсолютно никаких проблем быть не может, кроме того, что всё перестанет работать :-)

Скорее всего, всё будет нормально, и блокировки уйдёт, но без тестирования я бы не рискнул.

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

TaPaK
что-то страхи нагоняют про RSCII, откуда там грязное чтение? Давно перевели всё на него и кроме понимания новой нагрузки на tempdb особо и нет ничего.
Оно не грязное, но могут быть случаи, когда разработчики специально рассчитывают на блокировку.

TaPaK
Ну и да это уже дефолт уже как минимум дла азуры
Так нет вопросов, если система специально разрабатывается, тестируется, для снапшот изоляции.
Но просто перевести какую нибудь инсталляцию программы из 90-х я бы без тестирования не решился.
Ещё замечу, что такие изменения будут делаться вслепую, к серверам, на которых будут меняться настройки, у разработчиков доступа нет (как я понял, или, если есть, тестировать никто не будет, просто переключат на продакшене).
...
Рейтинг: 0 / 0
29.11.2019, 10:47
    #39896143
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
Кнюпель,

ой не слушайте :)


автораспект когда включается версионность для борьбы с локами
развести читателей и писателей. больше нет "аспектов"
...
Рейтинг: 0 / 0
29.11.2019, 10:49
    #39896149
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
alexeyvg,

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

что бы дедлоков было только больше? в остальных случаях они расчитывают на неё явно указывая, что никак не меняется в RCII
авторТак нет вопросов, если система специально разрабатывается, тестируется, для снапшот изоляции.
Но просто перевести какую нибудь инсталляцию программы из 90-х я бы без тестирования не решился.
звучит как рыжих мы сжигаем по привычке, а за что уже и не помним
...
Рейтинг: 0 / 0
29.11.2019, 10:51
    #39896151
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
TaPaK
что-то страхи нагоняют про RSCII, откуда там грязное чтение? Давно перевели всё на него и кроме понимания
новой нагрузки на tempdb особо и нет ничего. Ну и да это уже дефолт уже как минимум дла азуры


А Вы господа в курсе, что не все запросы совместимы между RC и RCSI ?

TC конечно хочет услышать про

Код: sql
1.
2.
3.
alter database snapshottest set allow_snapshot_isolation ON

alter database snapshottest set read_committed_snapshot ON 



И если он желает и дальше мучить клиента своей бд, то на этом и успокоиться.
...
Рейтинг: 0 / 0
29.11.2019, 10:55
    #39896158
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
a_voronin,
авторА Вы господа в курсе, что не все запросы совместимы между RC и RCSI ?

например? Кроме явного SNAPSHOT со своими ограничениями так и не вспомню
...
Рейтинг: 0 / 0
29.11.2019, 11:03
    #39896165
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
TaPaK
a_voronin,
авторА Вы господа в курсе, что не все запросы совместимы между RC и RCSI ?

например? Кроме явного SNAPSHOT со своими ограничениями так и не вспомню

Одно из проблемных ограничений -- не работает DDL внутри транзакции. Например

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN 

SELECT * INTO #T FROM TT 

-- SOME CODE 

DROP TABLE #T 

-- SOME CODE 

COMMIT  
...
Рейтинг: 0 / 0
29.11.2019, 11:05
    #39896169
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
a_voronin
TaPaK
a_voronin,
пропущено...

например? Кроме явного SNAPSHOT со своими ограничениями так и не вспомню


Одно из проблемных ограничений -- не работает DDL внутри транзакции. Например

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN 

SELECT * INTO #T FROM TT 

-- SOME CODE 

DROP TABLE #T 

-- SOME CODE 

COMMIT  



что-что?
...
Рейтинг: 0 / 0
29.11.2019, 11:12
    #39896176
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
TaPaK,

попробуйте создать индекс на временной таблице внутри явной транзакции под RCSI

https://social.msdn.microsoft.com/Forums/officeocs/en-US/7969b924-4fb7-4bc6-9df3-9bf1163fc089/why-are-ddl-changes-to-a-temporary-table-not-allowed-within-a-snapshot-transaction?forum=sqldatabaseengine
...
Рейтинг: 0 / 0
29.11.2019, 11:14
    #39896180
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Включить версионность для борьбы с блокировками
a_voronin
TaPaK,

попробуйте создать индекс на временной таблице внутри явной транзакции под RCSI

https://social.msdn.microsoft.com/Forums/officeocs/en-US/7969b924-4fb7-4bc6-9df3-9bf1163fc089/why-are-ddl-changes-to-a-temporary-table-not-allowed-within-a-snapshot-transaction?forum=sqldatabaseengine

мм??
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN TRAN 

SELECT * INTO #T FROM sys.objects
CREATE INDEX ti_FACK ON #T (object_id)
-- SOME CODE 

DROP TABLE #T 

-- SOME CODE 

COMMIT  



скриншоты прилагать что-ли?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Включить версионность для борьбы с блокировками / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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