Время, которое транзакция может ждать освобождения ресурса, задается в свойствах системы. В системах на платформе «1С:Предприятие» оно по умолчанию равно 20 секундам и устанавливается в конфигураторе (Администрирование – Параметры информационной базы – Время ожидания блокировки данных (в секундах)). Это время действует и на управляемые блокировки «1С:Предприятия», и на блокировки СУБД. Если транзакции приходится ждать дольше, возникает таймаут.
Казалось бы, ждать, так ждать, и первый приходящий в голову способ решить проблему – ускорить время обработки каждой транзакции, например, повысив характеристики оборудования или оптимизировав код с точки зрения его выполнения. Однако существуют дополнительные факторы, которые надо учитывать и которые в ряде случаев могут оказаться существенно более важными.
Рассмотрим ситуации, происходящие в офисе, в котором работают две сотрудницы: Светочка и Леночка. Они приходят на работу примерно в одно время, а уходят ровно в 18:00, если нет начатой, но недоделанной работы. Они дружат, то есть у них существует договоренность, что документ, лежащий на общем столе, читать можно, а документ, переложенный на личный стол или находящийся в руках, другой сотруднице трогать и смотреть нельзя.
1. Обеим сотрудницам за сегодня нужно внести изменения в один и тот же документ. Леночка пришла чуть позже, и Светочка уже взяла документ и начала вносить в него изменения. Она не отдаст документ, пока не сделает свою работу с ним до конца (Светочка установила необходимую исключительную блокировку). Успеет ли Леночка до 18:00 начать вносить свои изменения в документ или уйдет домой, даже не начав работу, зависит от следующего:
Как видим, начнет ли Леночка сегодня работу, зависит не только от Светочки и от объема вносимых изменений, но и от Светочкиной должностной инструкции. Но и этим дело не ограничивается.
2. На следующий день обеим сотрудницам нужно внести изменения в разные документы: Светочке – в новый, а Леночке – в не начатый вчера. Но документы лежали в одной стопке, Леночка опять пришла чуть позже, и Светочка уже взяла всю стопку документов и начала вносить изменения в свой документ, пропустив Леночкины, но и не отдавая его (Светочка установила избыточную исключительную блокировку).
Как видим, начнет ли Леночка сегодня работу, зависит не только от Светочки, от объема вносимых изменений и должностной инструкции Светочки, а в случае возможности избыточных блокировок еще и от того, не взяла ли Светочка не свой документ. Но и этим дело не ограничивается.
3. На следующий день обеим сотрудницам нужно опять внести изменения в разные документы: Светочке – в новый, Леночке – в не начатые вчера и позавчера. Леночка решила, что теперь она возьмет себе всю стопку, но опять пришла чуть позже, и Светочка уже взяла один свой документ и начала с ним работать. Поскольку Леночка твердо решила брать стопку целиком (собирается установить избыточную исключительную блокировку), ей опять приходится ждать.
Как видим, начнет ли Леночка сегодня работу, зависит не только от Светочки, от объема вносимых изменений, Светочкиной должностной инструкции, не взяла ли Светочка не свой документ, а еще и от того, не собирается ли Леночка взять не свои документы. Но и этим дело не ограничивается.
4. У Светочки и Леночки есть начальник, который должен проверять за ними все измененные ими документы. Но поскольку документы приходят к нему только от Светочки, он и выполняет только половину работы (характерный спад загрузки после «бутылочного горлышка»).
Переходя от примеров к теории, причинами таймаутов могут являться:
В качестве причин таймаутов иногда называется недостаточная производительность оборудования. Но надо понимать, что эта причина может явиться руководством к действиям по улучшению оборудования практически в единственном случае: когда оборудование явно не соответствует стоящим перед ним задачам, и показатели его загрузки при работе существенно превышают все рекомендованные значения. В подавляющем же большинстве ситуаций при проблемах параллельности оборудование сервера СУБД бывает недогружено, и рекомендации будут прямо противоположны:
Чтобы бороться с таймаутами, нужно выяснить, какая из перечисленных выше причин привела в данном случае к таймаутам, и либо устранить эту причину, либо перевести ее в приемлемые рамки.
Надо иметь в виду, что, убрав избыточные блокировки (и избавившись от таймаутов), мы увеличиваем параллельность работы и как следствие можем увеличить загрузку оборудования. То есть если раньше оборудование справлялось, то теперь могут возникнуть проблемы.