Как управлять пользователями, чья деятельность приводит к увеличению размера базы данных tempdb?

Как можно ограничить объем tempdb (MSSQL), чтобы избежать переполнения диска при резком увеличении его объема из-за отчетов или других действий в 1С, и при этом автоматически завершать сеанс пользователя?
  • 21 июля 2024 г. 18:02
Ответы на вопрос 2
Существует несколько способов управления пользователями, чья деятельность может привести к увеличению размера базы данных tempdb:

1. Мониторинг активности пользователей: следите за активностью пользователей в базе данных tempdb и определите тех, кто часто выполняет запросы, приводящие к увеличению ее размера. Это позволит выявить потенциальных "основателей проблем".

2. Использование профайлера SQL Server: с помощью SQL Server Profiler можно отслеживать запросы, выполняемые пользователями, и выявлять те, которые приводят к увеличению размера tempdb.

3. Ограничение ресурсов: можно настроить ограничения на использование ресурсов пользователем, например, через Resource Governor в SQL Server. Это позволит управлять ресурсами, которые могут быть использованы пользователем, что может помочь в предотвращении увеличения размера tempdb.

Чтобы ограничить размер tempdb и автоматически завершать сеанс пользователей при его переполнении, можно использовать следующий подход:

1. Настройте алерт на мониторинг размера tempdb. Например, можно использовать SQL Server Agent для создания задания, которое будет проверять размер tempdb и отправлять уведомление или выполнять определенные действия при достижении критических значений.

2. Создайте скрипт, который будет автоматически завершать сеанс пользователя, если размер tempdb превышает определенное значение. Скрипт должен проверять размер tempdb и завершать сеанс пользователя, если он превышает установленный порог.

3. Настройте расписание выполнения этого скрипта, чтобы он регулярно проверял размер tempdb и завершал сеансы пользователей при необходимости.

Помните, что необходимо осторожно применять этот подход, чтобы избежать нежелательных проблем с работой пользователей. Рекомендуется провести тщательное тестирование перед внедрением автоматического завершения сеансов пользователей.
Во-первых, про митигирование (смягчение) проблемы. В настройках MSSQL можно ограничить максимальный размер файлов для tempdb (как и для любой БД). Вероятно, при переполнении в таком случае пользователь с "плохим" запросом получит какое-то сообщение об ошибке в 1С (но это не точно); простые запросы, не требующие tempdb продолжат выполняться. 

Во-вторых, по существу вопроса: tempdb работает на уровне MSSQL и 1С не знает, когда растёт tempdb. В свою очередь, MSSQL не знает ничего о пользователях 1С, для него это только абстрактные данные в абстракной таблице в абстрактной БД. Как минимум, нет простого способа реализовать желаемое. Насчёт сложных способов лучше спросить на профильном форуме 1С-ников.

В-третьих, малыми силами можно мониторить размер tempdb (сторонним ПО, даже самописным скриптом) и отправлять уведомление админу, чтобы админ мог по горячим следам искать виновника.
Похожие вопросы