2012-08-09 18 views
6

Meine Webanwendung ist in asp.net 2.0, C# 2.0 und SQL Server 208 Wie kann ich die Anzahl der offenen Verbindungen auf meinem SQL Server 2008 Datenbank finden.und gibt es eine Möglichkeit, die Verbindung zu löschen pool.wurde meine Website auf Shared Hosting gehostet und sie haben begrenzte Verbindungen zur Verfügung gestellt. In meiner Kodierung habe ich alle Verbindung nach Gebrauch geschlossen, aber ich bekomme immer noch eine Warnung für die Aussetzung der Datenbank.finden Sie die Anzahl der offenen Verbindung auf der Datenbank

Kann mir jemand sagen, wie man offene Verbindungen in der Datenbank finden kann und wie man Verbindungspool löscht.

Ich habe verwendet Anweisungen für Verbindungen und schloss alle Verbindungen nach der Verwendung in schließlich blockieren. Obwohl es einen Fehler gibt, schließt es die Oped-Verbindungen.

Vielen Dank im Voraus.

+1

Welche RDBMS kann zu bekommen definieren Dbid? AFAIK, der einzige Weg, dies zu tun, besteht darin, den Datenbankservice direkt abzufragen, und dies ist für jede Geschmacksrichtung sehr unterschiedlich. –

+0

Wenn Sie gerade debuggen, versuchen Sie 'sp_who2' –

+0

sp_who2 gibt Details über Login-Benutzer, aber als eine Web-Anwendung kann der gleiche Benutzer mehr Verbindungen auf der Datenbank öffnen.Ich will die Anzahl der geöffneten Verbindungen auf der Datenbank mit meiner Webanwendung und es ist asp.net. –

Antwort

1

Sie könnten auf Connection-Pooling lesen wollen: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

Ein separater Verbindungspool wird für jede einzelne Verbindungszeichenfolge erstellt. Wenn Sie eine Verbindung über die integrierte Sicherheit herstellen und Ihre Website die Basis- oder Windows-Authentifizierung verwendet (und nicht anonym), wird für jeden Benutzer der Website ein eigener Verbindungspool erstellt.

Zum Löschen von Verbindungspools bietet das Objekt SqlConnection die Methoden ClearPool() und ClearAllPool() `. Eine einzelne Verbindung wird jedoch nicht geschlossen und aus dem Pool entfernt, bis sie geschlossen oder entsorgt wird.

Alle verschiedenen Objekte, die an der Ausführung der SQL-Abfrage beteiligt sind, die IDisposable implementieren, sollten in eine using-Anweisung verpackt werden, um eine ordnungsgemäße Entsorgung zu gewährleisten. Etwas in dieser Richtung:

IEnumerable<BusinessObject> list = new List<BusinessObject>() ; 

using (SqlConnection connection = new SqlConnection(credentials)) 
using (SqlCommand  command = connection.CreateCommand()) 
using (SqlDataAdapter adapter = new SqlDataAdapter(command)) 
using (DataSet  results = new DataSet()) 
{ 

    command.CommandType = CommandType.StoredProcedure ; 
    command.CommandText = @"someStoredProcedure" ; 

    try 
    { 
    connection.Open() ; 
    adapter.Fill(results) ; 
    connection.Close() ; 

    list = TransformResults(results) ; 

    } 
    catch 
    { 
    command.Cancel() ; 
    throw 
    } 

} 

return list ; 

Sie können prüfen, was SPIDs offen sind in SQL Server entweder durch Ausführen der gespeicherten Prozedur sp_who (muss über die entsprechenden Admin-Berechtigungen in der SQL Server haben). Sie können auch perfmon verwenden.

+0

Hallo Nicholas, danke für die Antwort. Ja, ich habe mit Anweisungen für Verbindung, Befehl und auch geschlossenen und entsorgten Verbindungen in endlich blockieren, ich habe auch erlaubt min Pool-Größe als 0 und max Pool-Größe als 10, aber immer noch sind mehr als 200 Verbindungen auf Datenbank-und Hosting-Personen geöffnet beschweren sich darüber. Können Sie mir bitte sagen, was passiert, wenn ich SqlConnection.ClearAllPool() verwenden und wo dies verwendet werden soll. –

8

Dies zeigt die Anzahl der Verbindungen pro jedem DB:

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

Und das gibt insgesamt Anschlüsse:

SELECT 
    COUNT(dbid) as TotalConnections 
FROM 
    sys.sysprocesses 
WHERE 
    dbid > 0 

Von C# können Sie wie folgt vor:
http://www.c-sharpcorner.com/UploadFile/dsdaf/ConnPooling07262006093645AM/ConnPooling.aspx Eine weitere gute Referenz sein kann gefunden unter:
http://www.wduffy.co.uk/blog/monitoring-database-connections/

Rufen Sie die statische Methode ReleaseObjectPool auf dem der OleDbConnection-http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.releaseobjectpool.aspx

+0

Hi Nitin, danke für die Antwort, aber SELECT COUNT (dbid) als TotalConnections FROM sys.sysprocesses WHERE dbid> 0 gibt eins zurück, aber es sind 25 Verbindungen in der Datenbank geöffnet. SELECT DB_NAME (Dbid) als DBName, COUNT (Dbid) als NoOfConnections, loginame als Loginname FROM sys.sysprocesses WHERE Dbid> 0 GROUP BY Dbid, loginame und dies ergibt als 1 –

+0

ebenfalls geöffnet Verbindungen Edit am Ende meiner Lösung gemacht, bitte versuchen Sie das auch –

+1

@ RD Versuchen Sie, sich als SysAdmin einzuloggen – Zsmaster

2

SQL-Abfrage finden Sie in der aktuellen aktiven Verbindung

SELECT DB_NAME(dbid) as 'DbNAme', COUNT(dbid) as 'Connections' from master.dbo.sysprocesses with (nolock) WHERE dbid > 0 GROUP BY dbid 

Sie, wenn Sie Verbindung wollen spezifisch Datenbank

Verwandte Themen