문제

내 PHP/MS SQL Server 2005/Win 2003 응용 프로그램은 때때로 응답이 없어지고 메모리/CPU 사용량은 급증하지 않습니다. SQL Management Studio에서 새로운 연결을 열려고하면 Open Connection 대화 상자에 IT가 매달려 있습니다. 총 활성 연결 수를 결정하는 방법 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의 카운트 만 표시됩니다).

다른 팁

@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);
            }
        }
    }
}

나는 이것이 오래되었음을 알고 있지만 업데이트하는 것이 좋은 생각이라고 생각했습니다. 정확한 카운트가 필요한 경우 열 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

이를 사용하여 각 연결 풀에 대한 정확한 수를 얻으십시오 (각 사용자/호스트 프로세스가 동일한 연결 문자열을 사용한다고 가정).

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

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 Knowledge 기반 - 열린 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top