24.02.2020

SQL: Остановка длительных запросов

Если база данных является высоконагруженной и работает в конкурентном окружении, то достаточно часто возникает задача остановки длительных запросов, если они мешают выполнению других запросов. Приведу здесь наиболее популярные конструкции для поиска и удаления запросов.
  1. Получение списка всех активных сессий вместе с учетными записями, под которыми они запущены:
    SELECT conn.session_id, host_name, program_name,
        nt_domain, login_name, connect_time, last_request_end_time 
    FROM sys.dm_exec_sessions AS sess
    JOIN sys.dm_exec_connections AS conn
       ON sess.session_id = conn.session_id
    
  2. Получение списка всех запущенных запросов с индентификатором открытой сессии и временем запуска:
    SELECT  sqltext.TEXT,
            req.session_id,
            req.status,
            eq.start_time,
            req.command,
            req.cpu_time,
            req.total_elapsed_time
    FROM sys.dm_exec_requests req
    CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
    
  3. Получить информацию о том, какие активные соединения в настоящее время установлены с SQL Server, можно так:
    sp_who2 'active'
    
  4. Завершение пользовательского процесса по идентификатором сеанса:
    KILL 'your_session_id'
    

Комментариев нет:

Отправить комментарий