Aplikasi PHP / MS Sql Server 2005 / win 2003 saya terkadang menjadi sangat tidak responsif, penggunaan memori / cpu tidak melonjak. Jika saya mencoba membuka koneksi baru dari studio manajemen sql, maka itu hanya hang di kotak dialog koneksi terbuka. bagaimana cara deterime jumlah koneksi aktif ms sql server 2005
sql-server
database
sql-server-2005
connection
Andy Lester
sumber
sumber
sa
. Jika Anda login sebagai pengguna non-sa, Anda akan melihat 1 dan itu tidak akan mewakili koneksi yang sebenarnya.sysadmin
peran yang diperlukan (edit komentar) menyelamatkan pantat saya. Saya terus mendapatkan 1 dengan asumsi saya memang memiliki perm yang benar. Fiuh! diperbaiki dan dibangkitkan. menang : money_with_wings:Seperti yang disebutkan @jwalkerjr, Anda harus membuang koneksi dalam kode (jika penggabungan koneksi diaktifkan, mereka baru saja dikembalikan ke kumpulan koneksi). Cara yang ditentukan untuk melakukan ini adalah menggunakan pernyataan '
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); } } } }
sumber
Gunakan ini untuk mendapatkan jumlah yang akurat untuk setiap kumpulan koneksi (dengan asumsi setiap proses pengguna / host menggunakan string koneksi yang sama)
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
sumber
Saya tahu ini sudah tua, tetapi saya pikir akan lebih baik untuk memperbaruinya. Jika penghitungan yang akurat diperlukan, ECID kolom mungkin juga harus difilter. SPID dengan utas paralel dapat muncul beberapa kali dalam sysprocesses dan memfilter ECID = 0 akan mengembalikan utas utama untuk setiap 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
sumber
Jika aplikasi PHP Anda membuka banyak koneksi SQL Server, seperti yang mungkin Anda ketahui, Anda memiliki masalah dengan kode database aplikasi Anda. Ini harus melepaskan / membuang koneksi tersebut setelah digunakan dan menggunakan penggabungan koneksi. Lihat di sini untuk artikel yang layak tentang topik ini ...
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
sumber
lihat sp_who itu memberi Anda lebih banyak detail daripada hanya melihat jumlah koneksi
dalam kasus Anda, saya akan melakukan sesuatu seperti ini
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'
sumber
Berbasis pengetahuan MS SQL - Bagaimana mengetahui koneksi database SQL terbuka dan menempati host mana.
Menggunakan query di bawah ini Anda akan menemukan database daftar, nama Host dan jumlah total koneksi terbuka, berdasarkan itu Anda akan tahu, host mana yang telah menempati koneksi 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
sumber
SELECT [DATABASE] = DB_NAME(DBID), OPNEDCONNECTIONS =COUNT(DBID), [USER] =LOGINAME FROM SYS.SYSPROCESSES GROUP BY DBID, LOGINAME ORDER BY DB_NAME(DBID), LOGINAME
sumber