내 PHP / MS Sql Server 2005 / win 2003 응용 프로그램이 때때로 매우 응답하지 않고 메모리 / cpu 사용량이 급증하지 않습니다. SQL Management Studio에서 새 연결을 열려고하면 연결 열기 대화 상자에서 중단됩니다. 총 활성 연결 수를 결정하는 방법 ms SQL Server 2005
답변:
각 DB 당 연결 수를 보여줍니다.
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE
dbid > 0
GROUP BY
dbid, loginame
그리고 이것은 총계를 제공합니다.
SELECT
COUNT(dbid) as TotalConnections
FROM
sys.sysprocesses
WHERE
dbid > 0
더 자세한 정보가 필요하면 다음을 실행하십시오.
sp_who2 'Active'
참고 : 사용 된 SQL Server 계정에는 'sysadmin'역할이 필요합니다 (그렇지 않으면 결과로 단일 행과 개수 1 만 표시됨).
sa
. 비 sa 사용자로 로그인 한 경우 1이 표시되며 실제 연결을 나타내지 않습니다.
sysadmin
늦었지만 .. 필요한 역할 (댓글 편집)이 내 엉덩이를 구했다. 나는 내가 올바른 파마를 가지고 있다고 가정하고 계속 1을 얻었습니다. 휴! 고정되고 절망적입니다. win : 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는 sysprocesses에서 여러 번 표시 될 수 있으며 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