最近、Webアプリを変更して、1つの接続を作成し、それをすべてのコマンドに再利用するのではなく、コマンドごとにデータベース接続を作成しました。私は今日の午後にこのコードを使用し、データベースメモリは最大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
データベースに開いている接続は1つしかないため、問題は発生していません。今何であるかを見つけるために..