|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Есть некая CRM система, в основе которой лежит СУБД Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64). Периодически возникают серьёзные тормоза в работе системы. Админы сервера, на котором базируется СУБД, говорят, что всё нормально на самом сервере. Возникает предположение, что дело может быть в блокировках. Коллеги посоветовали включить в настройках базы пункт "Разрешить изоляцию моментальных снимков" (сделать True). Якобы после этого их система стала гораздо стабильнее работать. Подскажите, какие минусы есть у этого подхода? Только опасность прочитать "грязные данные"? Или могут возникнуть какие-то несогласованности в данных? Что нужно учитывать при таком подходе. p.s. система работает с суммами, но далеко не банковское приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 13:56 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot, тем самым вы включите SNAPSHOT на базе. он не возымеет никакого действия если в коде явно не будет указан уровень изоляции SNAPSHOT или применены табличные подсказки. включать SNAPSHOT необходимо обдуманно, перед этим произведя тестирование поведения системы иначе можете получить бизнес ошибки если система не затачивалась под архитектуру оптимистического параллелизма. это не тоже самое если бы вы разрешили READ_COMMITTED_SNAPSHOT который прозрачно переводит READ_COMMITTED в использование моментальных снимков. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:16 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
felix_ff тем самым вы включите SNAPSHOT на базе. он не возымеет никакого действия если в коде явно не будет указан уровень изоляции SNAPSHOT или применены табличные подсказки. еще как и возымеет. даже если вообще никто не заюзает снэпшот, row versioning будет активировано, т.е. сервер начнет все версии валить в темпдб --- вообще думаю у ТС каша полнейшая. какие вообще грязные данные могут быть при снэпшотах... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:19 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123, ну я имел в виду бизнес процессы. так то согласен что еще можно и поднасрать в плане производительности ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:22 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
я думаю, он вообще все напутал. слышал что-то краем уха и совсем даже не то, что пишет. думаю, товарищи включили RCSI, иначе какие могут быть вообще перемены кроме замедления, если код не переписывали ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:42 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 я думаю, он вообще все напутал. слышал что-то краем уха и совсем даже не то, что пишет. думаю, товарищи включили RCSI, иначе какие могут быть вообще перемены кроме замедления, если код не переписывали Нет, просто в настройках включили эту галочку. Почитал статьи ( https://infostart.ru/public/91879/), говорят, что работает быстрее. Надеялся на "волшебную" пилюлю, которая ускорит работу сервера. Но видимо нужно смотреть блокировки и оптимизировать запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 14:59 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot Нет, просто в настройках включили эту галочку. эта галочка переводит базу в режим складывания всех изменяемых строк в темпдб. и все. разумеется, это только замедление работы. изменить что-то в плане блокировок можно только если в явном виде код переписать с использованием снэпшота. включение RCSI да, практически уберет S-локи читателей, без переписывания кода ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:04 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot Почитал статьи ( https://infostart.ru/public/91879/) ... вот же ж говорю, краем уха слышал, нифига не понял. там по ссылке как раз и включают RCSI ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:14 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 Saniacot Нет, просто в настройках включили эту галочку. эта галочка переводит базу в режим складывания всех изменяемых строк в темпдб. и все. разумеется, это только замедление работы. изменить что-то в плане блокировок можно только если в явном виде код переписать с использованием снэпшота. включение RCSI да, практически уберет S-локи читателей, без переписывания кода Cпасибо за пояснение, теперь суть понятна. Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице? (уровень изоляции транзакции в рамках базы ReadCommitted). Как я понимаю чтение данных данных не должно запрещать чтение данных в рамках другой транзакции. Заранее извиняюсь, если вопрос банальный, не являюсь администратором БД, а вопрос решить нужно, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:14 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице? совсем необязательно. можно просто говнокод написать, например select top 1 * order by <неиндексированное поле> из таблицы в 400Гб и говорить всем: я вовсе не лопачу все данные, я всего одну строку прошу ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:19 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 Saniacot Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице? совсем необязательно. можно просто говнокод написать, например select top 1 * order by <неиндексированное поле> из таблицы в 400Гб и говорить всем: я вовсе не лопачу все данные, я всего одну строку прошу В таком случае будет не блокировка, а просто долгий запрос как я понимаю? В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:23 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше). о, да можно и 10 строк отправить в кросс джойн раз 10, да даже 5 хватит... надо ожидания смотреть, когда что-то долго выполняется. там пишут в явном виде, чего запрос ждет ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:26 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 Saniacot В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше). о, да можно и 10 строк отправить в кросс джойн раз 10, да даже 5 хватит... надо ожидания смотреть, когда что-то долго выполняется. там пишут в явном виде, чего запрос ждет Спасибо! Попробую порыть в этом направлении. Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:40 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)? нет. может быть цепочка ожиданий: например, все читают данную таблицу, а я хочу добавить новую колонку, что вообще-то моментально. но меня ставят в очередь, мне надо Sch-M, так что я жду. а те, кто пришли читать после меня, ждут меня и тех, кто читает. вроде и те читатели и эти, но в середине стоит в очереди мое Sch-M. в результате получаем поезд ожидающих. ---- если вам сказали, что после включения RCSI стали меньше ждать, то это правда. только включить rcsi это не есть поставить галочку "Разрешить изоляцию моментальных снимков" ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 15:48 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
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.12.2019, 16:06 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
да. но только для спасения читателей от писателей. писатели с писателями продолжат борьбу и со включенным RCSI. --- да и из двух представленныx стэйтментов на самом деле второго хватает, ему первый не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:08 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot, включение надо тщательно тестировать на рабочей нагрузке, можете получить падение производительности в 2-3 раза запросто. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:11 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 да. но только для спасения читателей от писателей. писатели с писателями продолжат борьбу и со включенным RCSI. --- да и из двух представленныx стэйтментов на самом деле второго хватает, ему первый не нужен Ещё раз спасибо за пояснения. А в чем тогда минус данной "настройки"? ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON Если это повышает скорость чтения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:12 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
не повышает оно скорость. оно заставляет выдавать селектам последние закоммиченные данные. минус тот, что все эти "последние закоммиченные данные" теперь попадают в темпдб, небесплатно разумеется ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:21 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 не повышает оно скорость. оно заставляет выдавать селектам последние закоммиченные данные. минус тот, что все эти "последние закоммиченные данные" теперь попадают в темпдб, небесплатно разумеется Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:26 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Saniacot Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб. фух. опять 25. это не read UNCOMMITTED. не читаете вы то, что сейчас пишется. никаких грязных данных. только закоммиченные. то, что было там, где сейчас пишется. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:29 |
|
Разрешить изоляцию моментальных снимков
|
|||
---|---|---|---|
#18+
Yasha123 Saniacot Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб. фух. опять 25. это не read UNCOMMITTED. не читаете вы то, что сейчас пишется. никаких грязных данных. только закоммиченные. то, что было там, где сейчас пишется. Не так выразился, но понял. Спасибо за терпение:) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 16:32 |
|
|
start [/forum/topic.php?fid=46&fpage=77&tid=1686795]: |
0ms |
get settings: |
12ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 323ms |
total: | 468ms |
0 / 0 |