Moja aplikacja PHP / MS Sql Server 2005 / win 2003 czasami bardzo przestaje odpowiadać, użycie pamięci / procesora nie gwałtownie rośnie. Jeśli spróbuję otworzyć nowe połączenie z SQL Management Studio, po prostu zawiesza się w oknie dialogowym otwierania połączenia. jak odstraszyć całkowitą liczbę aktywnych połączeń ms sql server 2005
sql-server
database
sql-server-2005
connection
Andy Lester
źródło
źródło
sa
. Jeśli jesteś zalogowany jako użytkownik inny niż sa, zobaczysz 1, który nie będzie reprezentował rzeczywistych połączeń.sysadmin
wymagana rola (edytuj komentarz) uratowała mój tyłek. Ciągle otrzymywałem 1 zakładając, że miałem odpowiednią trwałą. Uff! naprawiono i naprawiono. win : money_with_wings:Jak wspomniał @jwalkerjr, powinieneś pozbywać się połączeń w kodzie (jeśli pula połączeń jest włączona, są one po prostu zwracane do puli połączeń). Zalecanym sposobem na to jest użycie instrukcji „
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); } } } }
źródło
Użyj tego, aby uzyskać dokładną liczbę dla każdej puli połączeń (zakładając, że każdy proces użytkownika / hosta używa tych samych parametrów połączenia)
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
źródło
Wiem, że to jest stare, ale pomyślałem, że warto zaktualizować. Jeśli potrzebne jest dokładne zliczenie, prawdopodobnie należy przefiltrować również kolumnę ECID. Identyfikator SPID z równoległymi wątkami może pojawiać się wiele razy w procesach sysproces, a filtrowanie ECID = 0 zwróci główny wątek dla każdego identyfikatora 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
źródło
Jeśli Twoja aplikacja PHP utrzymuje wiele otwartych połączeń SQL Server, to jak być może wiesz, masz problem z kodem bazy danych aplikacji. Powinien zwalniać / usuwać te połączenia po użyciu i korzystać z puli połączeń. Zajrzyj tutaj po porządny artykuł na ten temat ...
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx
źródło
zobacz sp_who daje więcej szczegółów niż tylko wyświetlenie liczby połączeń
w twoim przypadku zrobiłbym coś takiego
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'
źródło
Bazująca na wiedzy MS SQL - jak poznać otwarte połączenia z bazą danych SQL i zajęte na którym hoście.
Za pomocą poniższego zapytania znajdziesz listę bazy danych, nazwę hosta oraz łączną liczbę otwartych połączeń, na podstawie których zorientujesz się, który host zajmuje połączenie 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
źródło
SELECT [DATABASE] = DB_NAME(DBID), OPNEDCONNECTIONS =COUNT(DBID), [USER] =LOGINAME FROM SYS.SYSPROCESSES GROUP BY DBID, LOGINAME ORDER BY DB_NAME(DBID), LOGINAME
źródło