Мое приложение PHP / MS Sql Server 2005 / win 2003 иногда перестает отвечать на запросы, использование памяти / процессора не увеличивается. Если я попытаюсь открыть любое новое соединение из студии управления sql, оно просто зависнет в диалоговом окне открытого соединения. как определить общее количество активных подключений ms sql server 2005
sql-server
database
sql-server-2005
connection
Энди Лестер
источник
источник
sa
. Если вы вошли в систему как пользователь, не являющийся пользователем sa, вы увидите 1, и это не будет соответствовать фактическим соединениям.sysadmin
требуемая роль (редактировать комментарий) спасла мою задницу. Я продолжал получать 1 при условии, что у меня была правильная химическая завивка. Уф! фиксированный и совмещенный. победа : money_with_wings:Как упоминалось в @jwalkerjr, вы должны удалять соединения в коде (если пул соединений включен, они просто возвращаются в пул соединений). Предписанный способ сделать это - использовать
using
оператор ' ':// Execute stored proc to read data from repository using (SqlConnection conn = new SqlConnection(this.connectionString)) { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = "LoadFromRepository"; cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ID", fileID); conn.Open(); using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { if (rdr.Read()) { filename = SaveToFileSystem(rdr, folderfilepath); } } } }
источник
Используйте это, чтобы получить точное количество для каждого пула соединений (при условии, что каждый процесс пользователя / хоста использует одну и ту же строку соединения)
SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName, hostname, hostprocess FROM sys.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid, loginame, hostname, hostprocess
источник
Я знаю, что это старый, но подумал, что было бы неплохо обновить его. Если требуется точный подсчет, вероятно, следует также отфильтровать ECID столбца. SPID с параллельными потоками может появляться несколько раз в системных процессах, и фильтрация ECID = 0 вернет основной поток для каждого SPID.
SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName FROM sys.sysprocesses with (nolock) WHERE dbid > 0 and ecid=0 GROUP BY dbid, loginame
источник
Если в вашем приложении PHP открыто много подключений к SQL Server, то, как вы, возможно, знаете, у вас проблема с кодом базы данных вашего приложения. Он должен освобождать / удалять эти соединения после использования и использовать пул соединений. Поищите здесь достойную статью по этой теме ...
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
источник
см. sp_who, он дает вам больше информации, чем просто просмотр количества подключений
в вашем случае я бы сделал что-то вроде этого
DECLARE @temp TABLE(spid int , ecid int, status varchar(50), loginname varchar(50), hostname varchar(50), blk varchar(50), dbname varchar(50), cmd varchar(50), request_id int) INSERT INTO @temp EXEC sp_who SELECT COUNT(*) FROM @temp WHERE dbname = 'DB NAME'
источник
Основанные на знаниях MS SQL - Как узнать, открыты соединения с базой данных SQL и на каком хосте они заняты.
Используя приведенный ниже запрос, вы найдете базу данных списка, имя хоста и общее количество открытых соединений, исходя из этого, вы будете иметь представление, какой хост занимал соединение SQL.
SELECT DB_NAME(dbid) as DBName, hostname ,COUNT(dbid) as NumberOfConnections FROM sys.sysprocesses with (nolock) WHERE dbid > 0 and len(hostname) > 0 --and DB_NAME(dbid)='master' /* Open this line to filter Database by Name */ Group by DB_NAME(dbid),hostname order by DBName
источник
SELECT [DATABASE] = DB_NAME(DBID), OPNEDCONNECTIONS =COUNT(DBID), [USER] =LOGINAME FROM SYS.SYSPROCESSES GROUP BY DBID, LOGINAME ORDER BY DB_NAME(DBID), LOGINAME
источник