95

PHP / MS Sql Server 2005 / win 2003アプリケーションが非常に応答しなくなることがあり、メモリ/CPU使用率が急上昇しません。SQL Management Studioから新しい接続を開こうとすると、[接続を開く]ダイアログボックスでハングします。アクティブな接続の総数を決定する方法mssqlserver 2005

4

8 に答える 8

277

これは、各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のカウントが結果として表示されます)

于 2008-10-19T04:39:53.170 に答える
7

@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);
            }
        }
    }
}
于 2008-10-19T10:47:07.220 に答える
4

これが古いことは知っていますが、更新することをお勧めします。正確な数が必要な場合は、列の 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
于 2016-11-14T20:58:02.830 に答える
1

PHP アプリが多数の SQL Server 接続を開いたままにしている場合、ご存じのとおり、アプリのデータベース コードに問題があります。使用後にこれらの接続を解放/破棄し、接続プールを使用する必要があります。このトピックに関する適切な記事については、こちらをご覧ください...

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

于 2008-10-19T06:58:29.457 に答える
0

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'
于 2013-12-12T13:57:04.947 に答える
0

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
于 2016-07-08T06:37:15.107 に答える