Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Saniacot Member Откуда: Сообщений: 45 |
Есть некая CRM система, в основе которой лежит СУБД Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64). Периодически возникают серьёзные тормоза в работе системы. Админы сервера, на котором базируется СУБД, говорят, что всё нормально на самом сервере. Возникает предположение, что дело может быть в блокировках. Коллеги посоветовали включить в настройках базы пункт "Разрешить изоляцию моментальных снимков" (сделать True). Якобы после этого их система стала гораздо стабильнее работать. Подскажите, какие минусы есть у этого подхода? Только опасность прочитать "грязные данные"? Или могут возникнуть какие-то несогласованности в данных? Что нужно учитывать при таком подходе. p.s. система работает с суммами, но далеко не банковское приложение. |
13 дек 19, 13:56 [22039666] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1692 |
Saniacot, тем самым вы включите SNAPSHOT на базе. он не возымеет никакого действия если в коде явно не будет указан уровень изоляции SNAPSHOT или применены табличные подсказки. включать SNAPSHOT необходимо обдуманно, перед этим произведя тестирование поведения системы иначе можете получить бизнес ошибки если система не затачивалась под архитектуру оптимистического параллелизма. это не тоже самое если бы вы разрешили READ_COMMITTED_SNAPSHOT который прозрачно переводит READ_COMMITTED в использование моментальных снимков. |
13 дек 19, 14:16 [22039702] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
еще как и возымеет. даже если вообще никто не заюзает снэпшот, row versioning будет активировано, т.е. сервер начнет все версии валить в темпдб --- вообще думаю у ТС каша полнейшая. какие вообще грязные данные могут быть при снэпшотах... |
||||
13 дек 19, 14:19 [22039708] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1692 |
Yasha123, ну я имел в виду бизнес процессы. так то согласен что еще можно и поднасрать в плане производительности |
13 дек 19, 14:22 [22039712] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
я думаю, он вообще все напутал. слышал что-то краем уха и совсем даже не то, что пишет. думаю, товарищи включили RCSI, иначе какие могут быть вообще перемены кроме замедления, если код не переписывали |
13 дек 19, 14:42 [22039751] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Нет, просто в настройках включили эту галочку. Почитал статьи (https://infostart.ru/public/91879/), говорят, что работает быстрее. Надеялся на "волшебную" пилюлю, которая ускорит работу сервера. Но видимо нужно смотреть блокировки и оптимизировать запросы. |
||||
13 дек 19, 14:59 [22039772] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
эта галочка переводит базу в режим складывания всех изменяемых строк в темпдб. и все. разумеется, это только замедление работы. изменить что-то в плане блокировок можно только если в явном виде код переписать с использованием снэпшота. включение RCSI да, практически уберет S-локи читателей, без переписывания кода |
||||
13 дек 19, 15:04 [22039777] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
вот же ж говорю, краем уха слышал, нифига не понял. там по ссылке как раз и включают RCSI К сообщению приложен файл. Размер - 9Kb |
||||
13 дек 19, 15:14 [22039793] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Cпасибо за пояснение, теперь суть понятна. Тогда вопрос другой, если тормозит запрос на селект данных из какой-то таблицы, значит в этот момент в какой-то процедуре (грубо говоря) в рамках транзакции выполняется какой-то апдейт данных в этой же таблице? (уровень изоляции транзакции в рамках базы ReadCommitted). Как я понимаю чтение данных данных не должно запрещать чтение данных в рамках другой транзакции. Заранее извиняюсь, если вопрос банальный, не являюсь администратором БД, а вопрос решить нужно, спасибо. |
||||||||
13 дек 19, 15:14 [22039794] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
совсем необязательно. можно просто говнокод написать, например select top 1 * order by <неиндексированное поле> из таблицы в 400Гб и говорить всем: я вовсе не лопачу все данные, я всего одну строку прошу |
||||
13 дек 19, 15:19 [22039800] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
В таком случае будет не блокировка, а просто долгий запрос как я понимаю? В моем случае вся база меньше 10 гб, а в таблицах не более миллиона строк (в большинстве случаев значительно меньше). |
||||||||
13 дек 19, 15:23 [22039813] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
о, да можно и 10 строк отправить в кросс джойн раз 10, да даже 5 хватит... надо ожидания смотреть, когда что-то долго выполняется. там пишут в явном виде, чего запрос ждет |
||||
13 дек 19, 15:26 [22039820] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Спасибо! Попробую порыть в этом направлении. Но технически при уровне изоляции ReadCommitted чтение может ждать только монопольную блокировку (когда происходит добавление, обновление или удаление строк)? |
||||||||
13 дек 19, 15:40 [22039861] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
нет. может быть цепочка ожиданий: например, все читают данную таблицу, а я хочу добавить новую колонку, что вообще-то моментально. но меня ставят в очередь, мне надо Sch-M, так что я жду. а те, кто пришли читать после меня, ждут меня и тех, кто читает. вроде и те читатели и эти, но в середине стоит в очереди мое Sch-M. в результате получаем поезд ожидающих. ---- если вам сказали, что после включения RCSI стали меньше ждать, то это правда. только включить rcsi это не есть поставить галочку "Разрешить изоляцию моментальных снимков" |
||||
13 дек 19, 15:48 [22039870] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Тогда "волшебной пилюлей" является комбинация?:) ALTER DATABASE MyDatabase SET ALLOW_SNAPSHOT_ISOLATION ON ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON |
||||||||
13 дек 19, 16:06 [22039913] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
да. но только для спасения читателей от писателей. писатели с писателями продолжат борьбу и со включенным RCSI. --- да и из двух представленныx стэйтментов на самом деле второго хватает, ему первый не нужен |
13 дек 19, 16:08 [22039919] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Saniacot, включение надо тщательно тестировать на рабочей нагрузке, можете получить падение производительности в 2-3 раза запросто. |
13 дек 19, 16:11 [22039924] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Ещё раз спасибо за пояснения. А в чем тогда минус данной "настройки"? ALTER DATABASE MyDatabase SET READ_COMMITTED_SNAPSHOT ON Если это повышает скорость чтения данных. |
||||
13 дек 19, 16:12 [22039927] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
не повышает оно скорость. оно заставляет выдавать селектам последние закоммиченные данные. минус тот, что все эти "последние закоммиченные данные" теперь попадают в темпдб, небесплатно разумеется |
13 дек 19, 16:21 [22039935] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Понял, в плюс получаем возможность читать данные, которые в данный момент пишутся. В минус - рост объёма темпдб. Спасибо! |
||||
13 дек 19, 16:26 [22039939] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
фух. опять 25. это не read UNCOMMITTED. не читаете вы то, что сейчас пишется. никаких грязных данных. только закоммиченные. то, что было там, где сейчас пишется. Сообщение было отредактировано: 13 дек 19, 16:29 |
||||
13 дек 19, 16:29 [22039942] Ответить | Цитировать Сообщить модератору |
Saniacot Member Откуда: Сообщений: 45 |
Не так выразился, но понял. Спасибо за терпение:) |
||||||||
13 дек 19, 16:32 [22039945] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |