为每个数据库插入创建数据库连接-SQL服务器内存使用率高

本文关键字:服务器 -SQL 内存 使用率 数据库连接 创建 数据库 插入 | 更新日期: 2023-09-27 18:30:14

我最近更改了我的web应用程序,为每个命令创建一个数据库连接,而不是创建一个连接并为所有命令重用它。今天下午我使用了这段代码,我的数据库内存达到了24GB,插入了大约8k。我的代码是这样的(半伪代码):

public int ExecSQL(string SQLStr)
{
    using (SqlConnection Con = new SqlConnection(MyConStr))
    {
        using (SqlCommand Cmd = new SqlCommand(SQLStr, Con))
        {
            return Cmd.ExecuteNonQuery();
        }
    }
}
using (TransactionScope TX = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    //Loop and perform 8000 x
    int ID = ExecSQL("insert into something (column) output unique_id values ('data')").
    // I also perform 1 or 2 selects per insert based on the ID returned from the insert. I don't use a .Supress for my inserts.
}

这会导致数据库内存使用率高吗?我觉得它应该创建100个连接(默认),然后继续重复使用,但我猜我错过了一些东西。

回答:运行以下SQL:

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

而且我的数据库只有一个打开的连接,所以这不会引起问题。现在来了解一下。。

为每个数据库插入创建数据库连接-SQL服务器内存使用率高

ADO.NET使用连接池,因此具有相同连接字符串的多个SqlConnection对象重用相同的物理数据库连接。使用new SqlConnection() 几乎不会导致内存增加