Шолохов Дмитрий

11
Рейтинг

ShoDm
Дмитрий Шолохов



  •   Регистрация: 26.12.2008 (15 лет назад)

  •   Был(а) на сайте: 23.04.2024

Друзья
  • Дмитрий Петров
Подписчики 2

Рейтинг 11

Блокировки SQL базы данных 1С 7.7

Инструменты и обработки Программист Платформа 1С v7.7 Конфигурации 1cv7 Windows Абонемент ($m) Архив с данными HighLoad оптимизация

Конфигурация на 1С 7.7, показывающая блокировки на MS SQL сервере и доменных пользователей по SPID. Используется 1С++ и классы.

1 стартмани

09.11.2021    4675    8    ShoDm    17       

11

Комментарии

HighLoadБлокировки SQL базы данных 1С 7.7#17 18.11.22 13:26
(16) Боюсь, не могу ответить. В администрировании не силен, и в подобных ситуациях не тестировал.
HighLoadБлокировки SQL базы данных 1С 7.7#13 11.02.22 10:23
(12) В общем, посмотрел в ночи.
Картина при записи существующего документа такая:
1. Событие 1С ПриЗаписи() Обрабатывается вне транзакции.
2. После завершения ПриЗаписи(). Платформа считывает какие-то данные, видимо необходимые ей для записи. В разных базах - разные наборы данных. В моей тестовой, в которой документ состоит из Одного реквизита шапки и 2-х в МнЧ, был один вызов:
Код
exec _1sp__1SJOURN_ByIDDOC '     D   '
Однако в боевой базе какие-то горы запросов к _1SCONST и хранимые процедуры, читающие данные справочников.
3. Дальше идет установка режима неявной транзакции:
Код
set implicit_transactions on 

4. Блокировка _1SJOURN:
Код
exec _1sp__1SJOURN_TLockX 
.
4.1. Тут открывается транзакция.
5. UPDATE-ит _1SJOURN на случай изменения состояния документа или изменения общих реквизитов документов:
Код
Update _1SJOURN...

6. Добавляются новые строки в таблицу DT:
Код
exec sp_executesql N'Ins ert in to DT111 values( @P1,@P2,@P3,@P4)',N'@P1 varchar(9),@P2 smallint,@P3 varchar(9),@P4 numeric(10,0)','     D   ',2,'     1   ',3
.
Здесь уже известен номер добавляемой строки (это параметр @P2, равный 2), т.е. платформа уже сама расчитала номер строки.
7. Снова перечитываются данные документа из журнала:
Код
exec _1sp__1SJOURN_ByIDDOC '     D   '

8. Завершается транзакция:
Код
COMMIT TRAN

9. И, собственно, все.

Обращаю внимание, что в процессе записи ни разу не было запроса к DT на получение последнего номера номера строки (столбец LINENO_), значит (вероятнее всего) это было сделано при открытии документа.

Возвращаясь к нашим баранам можно сделать вывод, что что-то и где-то до начала SQL-транзакции "ломает" номер добавляемой строки.
HighLoadБлокировки SQL базы данных 1С 7.7#11 10.02.22 19:00
(9) Я завтра попробую найти свои изыскания на тему "что под капотом у платформы". Если я разбирал процесс перезаписи документа... Процесс записи нового точно разбирал.
HighLoadБлокировки SQL базы данных 1С 7.7#8 10.02.22 18:33
(3)
Теоретически - да! Через ADODB Connection.
HighLoadБлокировки SQL базы данных 1С 7.7#7 10.02.22 18:31
(5)
Ошибка можете воспроизвести или она плавающая? Если можете, ищите место падения отладчиком, а потом профайлером смотрим что происходит на скуле.
HighLoadБлокировки SQL базы данных 1С 7.7#6 10.02.22 18:29
(5)
У вас нарисовался дублирующийся первичный ключ [IDDOC, LINENO_] в таблице строк документа. Вероятно что-то некорректно считает номер строки (у вас на скрине - это 20).
Вы ничего прямыми запросами в ПриЗаписи() не UPDATE-ите?
HighLoadБлокировки SQL базы данных 1С 7.7#2 10.11.21 9:53
(1)
Цитата
за поддержку семерки в конце 21 года однозначно плюс!
Так получается :-). На КА контора никак перейти не может. Вот и приходится заниматься некрокодингом. :-)
HighLoadБлокировки SQL базы данных 1С 7.7#0 03.11.21 18:38
Конфигурация на 1С 7.7, показывающая блокировки на MS SQL сервере и доменных пользователей по SPID. Используется 1С++ и классы.