Страницы: 1
RSS
В технологическом журнале много записей об ошибках блокировок (таймауты, взаимоблокировки), как это исправить
 

Друзья, подскажите, как бороться с проблемой блокировок в 1С? В технологическом журнале вижу множество записей о таймаутах и взаимоблокировках. Особенно часто жалуется на таблицы регистров и какие-то обработки. Не знаю как обойти. Сам пытался вот так пробовать делать: проверил, не идут ли в этот момент регламентные задания, отключал их, но проблема осталась. Также уменьшил максимальное время ожидания блокировки в настройках базы, чтобы ошибки возникали быстрее, но теперь пользователи жалуются, что часть операций не завершается. Насколько могу сделать вывод  по журналу, речь идет о движениях по регистрам и документам. Что еще можно предпринять?

 
Цитата
horap написал:
Друзья, подскажите, как бороться с проблемой блокировок в 1С? В технологическом журнале вижу множество записей о таймаутах и взаимоблокировках. Особенно часто жалуется на таблицы регистров и какие-то обработки. Не знаю как обойти. Сам пытался вот так пробовать делать: проверил, не идут ли в этот момент регламентные задания, отключал их, но проблема осталась. Также уменьшил максимальное время ожидания блокировки в настройках базы, чтобы ошибки возникали быстрее, но теперь пользователи жалуются, что часть операций не завершается. Насколько могу сделать вывод  по журналу, речь идет о движениях по регистрам и документам. Что еще можно предпринять?  

Привет! Ситуация знакомая. Проблемы с блокировками в 1С могут быть связаны с разными причинами: неудачная архитектура запросов, высокие нагрузки, параллельная работа пользователей или регламентных заданий.

Для начала, посмотри в технологическом журнале, какие именно таблицы чаще всего вызывают блокировки? Какой тип ошибки указывается — таймаут блокировки или взаимоблокировка? На каком уровне проблема: это происходит в пользовательском режиме или в регламентных заданиях?

Пишите, как посмотрите, что-нибудь придумаем.

 
Цитата
Борис Романов написал:
Цитата
horap написал:
Друзья, подскажите, как бороться с проблемой блокировок в 1С? В технологическом журнале вижу множество записей о таймаутах и взаимоблокировках. Особенно часто жалуется на таблицы регистров и какие-то обработки. Не знаю как обойти. Сам пытался вот так пробовать делать: проверил, не идут ли в этот момент регламентные задания, отключал их, но проблема осталась. Также уменьшил максимальное время ожидания блокировки в настройках базы, чтобы ошибки возникали быстрее, но теперь пользователи жалуются, что часть операций не завершается. Насколько могу сделать вывод  по журналу, речь идет о движениях по регистрам и документам. Что еще можно предпринять?  
 Привет! Ситуация знакомая. Проблемы с блокировками в 1С могут быть связаны с разными причинами: неудачная архитектура запросов, высокие нагрузки, параллельная работа пользователей или регламентных заданий.   Для начала, посмотри в технологическом журнале, какие именно таблицы чаще всего вызывают блокировки? Какой тип ошибки указывается — таймаут блокировки или взаимоблокировка? На каком уровне проблема: это происходит в пользовательском режиме или в регламентных заданиях?  Пишите, как посмотрите, что-нибудь придумаем.  

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

 

Привет1 Если проблема в движениях по регистрам, возможно, дело в больших объемах данных или "тяжелых" запросах. Я бы вот так посоветовал сделать: Проверь запросы. Это можно сделать через конфигуратор. Открой его и включи инструмент анализа запросов. Там будет видно, какие части запроса занимают больше всего времени. Часто проблема кроется в сложных связях между таблицами или отсутствии индексов на используемых полях. Потом проанализируй регламентные задания. Возможно, какое-то задание обновляет регистры в то же время, когда пользователи работают с документами. Если это так, попробуй перенести выполнение задания на менее загруженное время. Дальше - настрой индексы. Если база данных на SQL Server или PostgreSQL, проверь, есть ли индексы на полях, которые используются в отборе запросов. Без индексов запросы могут тормозить, особенно при больших объемах данных. Ну и под конец проверь порядок блокировок. Взаимоблокировки обычно возникают, если два процесса пытаются заблокировать одни и те же таблицы, но в разном порядке. Например, один сначала блокирует таблицу "Документы", а затем "Регистр", а второй процесс делает наоборот. Важно, чтобы все процессы блокировали таблицы в одинаковом порядке.

 
Цитата
Андрей написал:
Привет1 Если проблема в движениях по регистрам, возможно, дело в больших объемах данных или "тяжелых" запросах. Я бы вот так посоветовал сделать: Проверь запросы. Это можно сделать через конфигуратор. Открой его и включи инструмент анализа запросов. Там будет видно, какие части запроса занимают больше всего времени. Часто проблема кроется в сложных связях между таблицами или отсутствии индексов на используемых полях. Потом проанализируй регламентные задания. Возможно, какое-то задание обновляет регистры в то же время, когда пользователи работают с документами. Если это так, попробуй перенести выполнение задания на менее загруженное время. Дальше - настрой индексы. Если база данных на SQL Server или PostgreSQL, проверь, есть ли индексы на полях, которые используются в отборе запросов. Без индексов запросы могут тормозить, особенно при больших объемах данных. Ну и под конец проверь порядок блокировок. Взаимоблокировки обычно возникают, если два процесса пытаются заблокировать одни и те же таблицы, но в разном порядке. Например, один сначала блокирует таблицу "Документы", а затем "Регистр", а второй процесс делает наоборот. Важно, чтобы все процессы блокировали таблицы в одинаковом порядке.
Добавлю про взаимоблокировки. Они возникают, когда транзакции блокируют друг друга. Чтобы минимизировать их вероятность, можно сделать следующее: - Сократи длительность транзакций. Чем меньше времени транзакция "держит" блокировку, тем меньше шансов на взаимоблокировку. - Анализируй взаимоблокировки через монитор блокировок. В управляемых формах есть возможность включить монитор блокировок. Он покажет, какие процессы конфликтуют и на каких таблицах. - Настрой таймауты блокировок. В свойствах базы данных можно уменьшить время ожидания блокировки. Это позволит быстрее получать ошибку и избегать долгого зависания.
 
Цитата
Борис Романов написал:
Цитата
Андрей написал:
Привет1 Если проблема в движениях по регистрам, возможно, дело в больших объемах данных или "тяжелых" запросах. Я бы вот так посоветовал сделать: Проверь запросы. Это можно сделать через конфигуратор. Открой его и включи инструмент анализа запросов. Там будет видно, какие части запроса занимают больше всего времени. Часто проблема кроется в сложных связях между таблицами или отсутствии индексов на используемых полях. Потом проанализируй регламентные задания. Возможно, какое-то задание обновляет регистры в то же время, когда пользователи работают с документами. Если это так, попробуй перенести выполнение задания на менее загруженное время. Дальше - настрой индексы. Если база данных на SQL Server или PostgreSQL, проверь, есть ли индексы на полях, которые используются в отборе запросов. Без индексов запросы могут тормозить, особенно при больших объемах данных. Ну и под конец проверь порядок блокировок. Взаимоблокировки обычно возникают, если два процесса пытаются заблокировать одни и те же таблицы, но в разном порядке. Например, один сначала блокирует таблицу "Документы", а затем "Регистр", а второй процесс делает наоборот. Важно, чтобы все процессы блокировали таблицы в одинаковом порядке.
Добавлю про взаимоблокировки. Они возникают, когда транзакции блокируют друг друга. Чтобы минимизировать их вероятность, можно сделать следующее: - Сократи длительность транзакций. Чем меньше времени транзакция "держит" блокировку, тем меньше шансов на взаимоблокировку. - Анализируй взаимоблокировки через монитор блокировок. В управляемых формах есть возможность включить монитор блокировок. Он покажет, какие процессы конфликтуют и на каких таблицах. - Настрой таймауты блокировок. В свойствах базы данных можно уменьшить время ожидания блокировки. Это позволит быстрее получать ошибку и избегать долгого зависания.

Спасибо за советы! А что делать, если с оптимизацией всё не так просто?

 
Цитата
horap написал:
Цитата
Борис Романов написал:
 
Цитата
Андрей  написал:
Привет1 Если проблема в движениях по регистрам, возможно, дело в больших объемах данных или "тяжелых" запросах. Я бы вот так посоветовал сделать: Проверь запросы. Это можно сделать через конфигуратор. Открой его и включи инструмент анализа запросов. Там будет видно, какие части запроса занимают больше всего времени. Часто проблема кроется в сложных связях между таблицами или отсутствии индексов на используемых полях. Потом проанализируй регламентные задания. Возможно, какое-то задание обновляет регистры в то же время, когда пользователи работают с документами. Если это так, попробуй перенести выполнение задания на менее загруженное время. Дальше - настрой индексы. Если база данных на SQL Server или PostgreSQL, проверь, есть ли индексы на полях, которые используются в отборе запросов. Без индексов запросы могут тормозить, особенно при больших объемах данных. Ну и под конец проверь порядок блокировок. Взаимоблокировки обычно возникают, если два процесса пытаются заблокировать одни и те же таблицы, но в разном порядке. Например, один сначала блокирует таблицу "Документы", а затем "Регистр", а второй процесс делает наоборот. Важно, чтобы все процессы блокировали таблицы в одинаковом порядке.
 Добавлю про взаимоблокировки. Они возникают, когда транзакции блокируют друг друга. Чтобы минимизировать их вероятность, можно сделать следующее: - Сократи длительность транзакций. Чем меньше времени транзакция "держит" блокировку, тем меньше шансов на взаимоблокировку. - Анализируй взаимоблокировки через монитор блокировок. В управляемых формах есть возможность включить монитор блокировок. Он покажет, какие процессы конфликтуют и на каких таблицах. - Настрой таймауты блокировок. В свойствах базы данных можно уменьшить время ожидания блокировки. Это позволит быстрее получать ошибку и избегать долгого зависания.
 Спасибо за советы! А что делать, если с оптимизацией всё не так просто?
Если сам не можешь разобраться, лучше привлечь специалистов. Можно сделать аудит базы данных и 1С: проверить архитектуру запросов, индексы, расписание заданий. Профессионалы также могут предложить изменения в конфигурации.

Ну и, конечно, регулярная чистка базы от старых данных и плановая оптимизация индексов тоже помогает.
Страницы: 1