Pergunta

Meu PHP / MS Sql Server 2005 / Win 2003 Aplicação ocasionalmente torna-se muito sem resposta, o uso de memória / CPU não spike. Se eu tentar abrir qualquer nova conexão de estúdio de gerenciamento do SQL, em seguida, os ele simplesmente trava na caixa de diálogo de conexão aberta. como deterime o número total de conexões ativas ms SQL Server 2005

Foi útil?

Solução

Mostra o número de ligações por cada DB:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame

E isto dá total:

SELECT 
    COUNT(dbid) as TotalConnections
FROM
    sys.sysprocesses
WHERE 
    dbid > 0

Se você precisar de mais detalhes, execute:

sp_who2 'Active'

Nota: necessidades O SQL Server conta usada a função 'sysadmin' (caso contrário ele irá apenas mostrar uma única linha e uma contagem de 1 como o resultado)

Outras dicas

Como @jwalkerjr mencionado, você deve ser a eliminação de conexões em code (se o pool de conexão é habilitado, eles estão apenas voltou para o pool de conexão). A maneira prescrita de fazer isso é usando a instrução '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);
            }
        }
    }
}

Eu sei que este é antiga, mas pensei que seria uma boa idéia para atualização. Se uma contagem precisa é necessária, então ECID coluna provavelmente deve ser filtrada também. Um SPID com threads paralelas podem aparecer várias vezes em sysprocesses e filtragem ECID = 0 irá retornar o thread principal para cada 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

Use isto para obter uma contagem precisa para cada pool de conexão (assumindo que cada processo de usuário / host usa a mesma seqüência de conexão)

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

Se o seu PHP aplicativo está segurando muitas conexões do SQL Server abertas, então, como você sabe, você tem um problema com o código do banco de dados do aplicativo. Deve-se libertando / descartar essas conexões após o uso e utilizando o pool de conexão. Dê uma olhada aqui para um artigo decente sobre o tema ...

http://www.c-sharpcorner.com/UploadFile /dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx

sp_who lhe dá mais detalhes do que apenas vendo o número de conexões

no seu caso eu faria algo assim

 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'

conhecimento MS SQL base -. Como saber conexão banco de dados SQL aberta (s) e ocupada em qual host

Usando o abaixo consulta você vai encontrar banco de dados de lista, nome do host e número total de contagem de conexão aberta, com base em que você terá idéia, que anfitrião tem conexão SQL ocupado.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top