Домены .RU/.РФ

Автор Тема: Перевод платформы 8.2 в рид комиттед снапшот.  (Прочитано 841 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Gokusa

  • Пользователь
  • **
  • Сообщений: 27
Добрый день, впрс такой:
перевели вручную серверную 8.2 в рид комиттед снапшот.
какие доработки и дополнительные действия потребуется провести, чтобы избавиться от избыточных блокировок и в целом , чтобы система работала по "максимуму быстро и корректно " от рид комиттед снапшота?
///////////
я вижу такой вариант - доставить вручную блокировки где необходимо - других вариантов у меня нету.
А ЧТО НА САМОМ ДЕЛЕ ?

Shmell

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Вадим
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #1 : Ноябрь 13, 2017, 06:09:33 am »
А какой режим управления блокировками у вас установлен: автоматический или управляемый?

Gokusa

  • Пользователь
  • **
  • Сообщений: 27
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #2 : Ноябрь 13, 2017, 05:52:58 pm »
а какая разница?
мне кажется если мы вручную изменили уровень изоляции, разве режим управления блокировками будет как-то влиять на блокировки субд?
в автоматическом режиме вроде бы вообще нет управляемых блокировок.
поэтому я не понимаю Вашего вопроса.

Shmell

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Вадим
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #3 : Ноябрь 14, 2017, 05:43:21 am »
Если у вас автоматический режим управления блокировками - уровень изоляции СУБД ВСЕГДА Serializable, что в большинстве случаев приводит к избыточным блокировкам. Установка READ_COMMITED_SNAPSHOT это половина решения проблемы. Грамотное управление блокировками - управляемый режим блокировок конфигурации + READ_COMMITED_SNAPSHOT + правильный код установки блокировок.

Вот к примеру: включен READ_COMMITED_SNAPSHOT, автоматический режим.
Код 1С:
      НаборЗаписей = РегистрыСведений.Тестовый.СоздатьНаборЗаписей();
      НаборЗаписей.Отбор.Номенклатура.Установить(Справочники.Номенклатура.Тестовая);
      НаборЗаписей.Прочитать();   

Что мы видим в профайлере:

exec sp_executesql N'SELECT
T1._Fld13RRef,
T1._Fld14
FROM dbo._InfoRg10 T1 WITH(SERIALIZABLE)
WHERE T1._Fld13RRef = @P1
ORDER BY T1._Fld13RRef',N'@P1 varbinary(16)',0x8D78FCAA1415655111E7C82761835325

Уровень изоляции: SERIALIZABLE
« Последнее редактирование: Ноябрь 14, 2017, 05:46:57 am от Shmell »

alex1004

  • Новичок
  • *
  • Сообщений: 7
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #4 : Ноябрь 28, 2017, 09:46:46 am »
Если у вас автоматический режим управления блокировками - уровень изоляции СУБД ВСЕГДА Serializable...

А при работе с документом или справочником тоже будете получать Serializable или все же Repeatable read? :) А при нетранзакционном чтении? :)
1С Специалист Платформа 8.3

Gokusa

  • Пользователь
  • **
  • Сообщений: 27
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #5 : Январь 10, 2018, 11:01:01 pm »
А при работе с документом или справочником тоже будете получать Serializable или все же Repeatable read? :) А при нетранзакционном чтении?
ну че вот к мелочам цепляться, человек норм ответ дал.
а ссылка на то и ссылка, что она ключ и накой ей сериалайзабле нужен.
а при нетранзакционном чтении - на кой оно , разве оно с кем-то конфликтует?
норм ответ дал смелл.

Gokusa

  • Пользователь
  • **
  • Сообщений: 27
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #6 : Январь 10, 2018, 11:04:12 pm »
Если у вас автоматический режим управления блокировками - уровень изоляции СУБД ВСЕГДА Serializable, что в большинстве случаев приводит к избыточным блокировкам. Установка READ_COMMITED_SNAPSHOT это половина решения проблемы. Грамотное управление блокировками - управляемый режим блокировок конфигурации + READ_COMMITED_SNAPSHOT + правильный код установки блокировок.

Вот к примеру: включен READ_COMMITED_SNAPSHOT, автоматический режим.
Код 1С:
      НаборЗаписей = РегистрыСведений.Тестовый.СоздатьНаборЗаписей();
      НаборЗаписей.Отбор.Номенклатура.Установить(Справочники.Номенклатура.Тестовая);
      НаборЗаписей.Прочитать();   

Что мы видим в профайлере:

exec sp_executesql N'SELECT
T1._Fld13RRef,
T1._Fld14
FROM dbo._InfoRg10 T1 WITH(SERIALIZABLE)
WHERE T1._Fld13RRef = @P1
ORDER BY T1._Fld13RRef',N'@P1 varbinary(16)',0x8D78FCAA1415655111E7C82761835325

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

Gokusa

  • Пользователь
  • **
  • Сообщений: 27
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #7 : Январь 10, 2018, 11:15:20 pm »
не убирается :)
спс.Смелл

MirrorLink

  • Новичок
  • *
  • Сообщений: 5
Re: Перевод платформы 8.2 в рид комиттед снапшот.
« Ответ #8 : Октябрь 01, 2018, 07:41:37 am »
Начнем с того, что уровня изоляции Read_Comitted_Snapshot не существует
Неожиданно, да? ))

MS SQL Server поддерживает следующие уровни изоляции:

READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SNAPSHOT
SERIALIZABLE

Вот ссылка на официальную документацию Microsoft
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-2017

А если мы устанавливаем чекбокс "Is read comitted snapsot on", то у вас изменяется поведение Read Comitted

То есть те транзакции, которые в режиме Read Committed, теперь обеспечивают целостность при чтении данных не с помощью блокировок, а с помощью MVCC - механизма контроля версий записей.

Таким образом, если вы хотите уменьшить число блокировок, то Вам нужно перевести конфигурацию в управляемый режим
Тогда у Вас в 8.2 внутри транзакций будет уровень Read Committed

А настройка "Is read comitted snapsot on" сделает так, что Read Committed будет работать в режиме версионности

И не будет блокировать данные при чтении
« Последнее редактирование: Октябрь 01, 2018, 07:47:15 am от MirrorLink »