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

Откуда:
Сообщений: 45
Есть некая CRM система, в основе которой лежит СУБД Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64). Периодически возникают серьёзные тормоза в работе системы. Админы сервера, на котором базируется СУБД, говорят, что всё нормально на самом сервере. Возникает предположение, что дело может быть в блокировках. Коллеги посоветовали включить в настройках базы пункт
"Разрешить изоляцию моментальных снимков" (сделать True). Якобы после этого их система стала гораздо стабильнее работать. Подскажите, какие минусы есть у этого подхода? Только опасность прочитать "грязные данные"? Или могут возникнуть какие-то несогласованности в данных? Что нужно учитывать при таком подходе.
p.s. система работает с суммами, но далеко не банковское приложение.
13 дек 19, 13:56    [22039666]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
Saniacot,

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

это не тоже самое если бы вы разрешили READ_COMMITTED_SNAPSHOT который прозрачно переводит READ_COMMITTED в использование моментальных снимков.
13 дек 19, 14:16    [22039702]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
felix_ff

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

еще как и возымеет.
даже если вообще никто не заюзает снэпшот,
row versioning будет активировано,
т.е. сервер начнет все версии валить в темпдб
---
вообще думаю у ТС каша полнейшая.
какие вообще грязные данные могут быть при снэпшотах...
13 дек 19, 14:19    [22039708]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1172
Yasha123,

ну я имел в виду бизнес процессы. так то согласен что еще можно и поднасрать в плане производительности
13 дек 19, 14:22    [22039712]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
я думаю, он вообще все напутал.
слышал что-то краем уха и совсем даже не то, что пишет.
думаю, товарищи включили RCSI,
иначе какие могут быть вообще перемены кроме замедления,
если код не переписывали
13 дек 19, 14:42    [22039751]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
я думаю, он вообще все напутал.
слышал что-то краем уха и совсем даже не то, что пишет.
думаю, товарищи включили RCSI,
иначе какие могут быть вообще перемены кроме замедления,
если код не переписывали

Нет, просто в настройках включили эту галочку. Почитал статьи (https://infostart.ru/public/91879/), говорят, что работает быстрее. Надеялся на "волшебную" пилюлю, которая ускорит работу сервера. Но видимо нужно смотреть блокировки и оптимизировать запросы.
13 дек 19, 14:59    [22039772]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot

Нет, просто в настройках включили эту галочку.

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

включение RCSI да, практически уберет S-локи читателей, без переписывания кода
13 дек 19, 15:04    [22039777]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot
Почитал статьи (https://infostart.ru/public/91879/)
...

вот же ж говорю, краем уха слышал, нифига не понял.
там по ссылке как раз и включают RCSI

К сообщению приложен файл. Размер - 9Kb
13 дек 19, 15:14    [22039793]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
Saniacot

Нет, просто в настройках включили эту галочку.

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

включение RCSI да, практически уберет S-локи читателей, без переписывания кода

Cпасибо за пояснение, теперь суть понятна.
Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице? (уровень изоляции транзакции в рамках базы ReadCommitted). Как я понимаю чтение данных данных не должно запрещать чтение данных в рамках другой транзакции.
Заранее извиняюсь, если вопрос банальный, не являюсь администратором БД, а вопрос решить нужно, спасибо.
13 дек 19, 15:14    [22039794]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot

Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице?

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

select top 1 *
order by <неиндексированное поле>

из таблицы в 400Гб
и говорить всем: я вовсе не лопачу все данные, я всего одну строку прошу
13 дек 19, 15:19    [22039800]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
Saniacot

Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице?

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

select top 1 *
order by <неиндексированное поле>

из таблицы в 400Гб
и говорить всем: я вовсе не лопачу все данные, я всего одну строку прошу

В таком случае будет не блокировка, а просто долгий запрос как я понимаю? В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше).
13 дек 19, 15:23    [22039813]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot
В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше).

о, да можно и 10 строк отправить в кросс джойн раз 10,
да даже 5 хватит...
надо ожидания смотреть, когда что-то долго выполняется.
там пишут в явном виде, чего запрос ждет
13 дек 19, 15:26    [22039820]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
Saniacot
В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше).

о, да можно и 10 строк отправить в кросс джойн раз 10,
да даже 5 хватит...
надо ожидания смотреть, когда что-то долго выполняется.
там пишут в явном виде, чего запрос ждет

Спасибо! Попробую порыть в этом направлении.
Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)?
13 дек 19, 15:40    [22039861]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot

Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)?

нет.
может быть цепочка ожиданий:
например, все читают данную таблицу,
а я хочу добавить новую колонку, что вообще-то моментально.
но меня ставят в очередь, мне надо Sch-M, так что я жду.
а те, кто пришли читать после меня, ждут меня и тех, кто читает.
вроде и те читатели и эти, но в середине стоит в очереди мое Sch-M.
в результате получаем поезд ожидающих.
----
если вам сказали, что после включения RCSI стали меньше ждать, то это правда.
только включить rcsi это не есть поставить галочку "Разрешить изоляцию моментальных снимков"
13 дек 19, 15:48    [22039870]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
Saniacot

Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)?

нет.
может быть цепочка ожиданий:
например, все читают данную таблицу,
а я хочу добавить новую колонку, что вообще-то моментально.
но меня ставят в очередь, мне надо Sch-M, так что я жду.
а те, кто пришли читать после меня, ждут меня и тех, кто читает.
вроде и те читатели и эти, но в середине стоит в очереди мое Sch-M.
в результате получаем поезд ожидающих.
----
если вам сказали, что после включения RCSI стали меньше ждать, то это правда.
только включить rcsi это не есть поставить галочку "Разрешить изоляцию моментальных снимков"

Тогда "волшебной пилюлей" является комбинация?:)
ALTER DATABASE MyDatabase
SET ALLOW_SNAPSHOT_ISOLATION ON

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON
13 дек 19, 16:06    [22039913]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
да.
но только для спасения читателей от писателей.
писатели с писателями продолжат борьбу и со включенным RCSI.
---
да и из двух представленныx стэйтментов на самом деле второго хватает,
ему первый не нужен
13 дек 19, 16:08    [22039919]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7383
Saniacot,

включение надо тщательно тестировать на рабочей нагрузке, можете получить падение производительности в 2-3 раза запросто.
13 дек 19, 16:11    [22039924]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
да.
но только для спасения читателей от писателей.
писатели с писателями продолжат борьбу и со включенным RCSI.
---
да и из двух представленныx стэйтментов на самом деле второго хватает,
ему первый не нужен

Ещё раз спасибо за пояснения.
А в чем тогда минус данной "настройки"?

ALTER DATABASE MyDatabase
SET READ_COMMITTED_SNAPSHOT ON

Если это повышает скорость чтения данных.
13 дек 19, 16:12    [22039927]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
не повышает оно скорость.
оно заставляет выдавать селектам последние закоммиченные данные.
минус тот, что все эти "последние закоммиченные данные"
теперь попадают в темпдб, небесплатно разумеется
13 дек 19, 16:21    [22039935]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
не повышает оно скорость.
оно заставляет выдавать селектам последние закоммиченные данные.
минус тот, что все эти "последние закоммиченные данные"
теперь попадают в темпдб, небесплатно разумеется

Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб.
Спасибо!
13 дек 19, 16:26    [22039939]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Saniacot

Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб.

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

Сообщение было отредактировано: 13 дек 19, 16:29
13 дек 19, 16:29    [22039942]     Ответить | Цитировать Сообщить модератору
 Re: Разрешить изоляцию моментальных снимков  [new]
Saniacot
Member

Откуда:
Сообщений: 45
Yasha123
Saniacot

Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб.

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

Не так выразился, но понял. Спасибо за терпение:)
13 дек 19, 16:32    [22039945]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить