Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 подсчет одновременых подключений к БД  [new]
ЕНЯ
Member

Откуда:
Сообщений: 30
я сделал таким способом:
SELECT CONVERT(VARCHAR, GETDATE(), 120) Time,
       d.name DbName,
       s.program_name ProgramName,
       COUNT(DISTINCT s.spid) CountSpid
FROM sys.sysprocesses s
JOIN sys.databases d ON d.database_id = s.dbid
  AND s.dbid > 4
GROUP BY d.name,
         s.program_name

но может есть более корректные способы?
9 июл 18, 15:50    [21556709]     Ответить | Цитировать Сообщить модератору
 Re: подсчет одновременых подключений к БД  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
ЕНЯ,

ну я бы выбрасывал сессию запроса @@SPID, DB_NAME() есть и так, ну и тд
http://www.itprotoday.com/microsoft-sql-server/4-methods-identifying-connections-count-sql-server
9 июл 18, 15:54    [21556731]     Ответить | Цитировать Сообщить модератору
 Re: подсчет одновременых подключений к БД  [new]
komrad
Member

Откуда:
Сообщений: 5245
ЕНЯ
я сделал таким способом:
SELECT CONVERT(VARCHAR, GETDATE(), 120) Time,
       d.name DbName,
       s.program_name ProgramName,
       COUNT(DISTINCT s.spid) CountSpid
FROM sys.sysprocesses s
JOIN sys.databases d ON d.database_id = s.dbid
  AND s.dbid > 4
GROUP BY d.name,
         s.program_name

но может есть более корректные способы?


на вскидку:
1) надо отсеивать системные сессии (spid<50)
2) program_name опциональный параметр, может отсутствовать (NULL)
3) отсекая master (db_id=1), Вы теряете все коннекты, у которых default database = master
4) незачем джойнить с sys.databases, если есть системная функция db_name()

однако, системные сессии могут быть и со spid-ами большими 50 (REDO queue в случае с AlwaysOn, например)

поэтому, вариант реализации подсчета зависит от точной постановки задачи
9 июл 18, 16:27    [21556850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить