Mein Arbeitsplatz hat Verkäufer, die eine Desktop-Anwendung eines Drittanbieters verwenden, die direkt einen Sql-Server verbindet, und die Software hinterlässt Hunderte von Schlafverbindungen für jeden Benutzer. Gibt es trotzdem diese Verbindung programmatisch zu löschen?So löschen Sie Verbindungen in Sql Server 2005
Antwort
Welche Version von SQL Server führen Sie aus? Sie können dazu eine gespeicherte Prozedur schreiben, die Daten von sp_who betrachten und dann die letzte Aktivität abschätzen. Es gibt eine "LastBatch" -Spalte, in der das letzte Mal etwas von diesem Benutzer gesendet wurde. Ich würde sagen, wenn das über eine Stunde alt ist (oder welches Intervall auch immer), führe einen KILL für diesen SPID aus.
Sie könnten dies tun in SQL 2005 wie folgt aus:
declare @spid int
, @cmd varchar(200)
declare Mycurs cursor for
select spid
from master..sysprocesses
where status = 'sleeping'
and last_batch > dateadd(s, -1, getdate())
open mycurs
fetch next from mycurs into @spid
while @@fetch_status = 0
begin
select @cmd = 'kill ' + cast(@spid as varchar)
exec(@cmd)
fetch next from mycurs into @spid
end
deallocate MyCurs
Aber anstatt diese Prozesse manuell zu töten, sollte es nicht eine Möglichkeit, diese zu vermeiden? Ich habe das gleiche Problem in einem Projekt
In unserer Web-Anwendung führen wir einige Updates mit einem Web-Service (dh ein Programm ruft eine Webservice-Methode. Die Methode öffnet eine Verbindung, führt ein Update, commits und schließt die Verbindung using connection.close())
Im sqlserver mgmt Studio, wenn ich ein sp_who2 mache, sehe ich, dass die Verbindungen zunehmen, während die App läuft - tatsächlich mit der Rate von 1 Verbindung pro Updateausführung. UND der betroffene Teil ist, dass es die 100 kreuzt und dann nicht mehr Verbindungen in die db erlaubt. Benutzer können sich nicht anmelden, da die Programme fehlschlagen, da sie keine neuen Verbindungen mehr erhalten können.
So stellen Sie sicher, dass die Verbindungen wiederverwendet werden - Wir haben keinen Verbindungs-Pooling-Code geschrieben, der das standardmäßige Verbindungs-Pooling von ASP.net und Sqlserver verwendet. Warum werden die Verbindungen nicht wiederverwendet und warum verschwinden sie nicht, nachdem sie "geschlossen" sind? Kommt es darauf an, dass ein Webservice die Transaktion abwickelt?
Vielen Dank
- 1. SQL Server 2005 Backup-Datei löschen
- 2. So löschen Sie einen hartnäckigen SQL 2005-Wartungsplan
- 3. Sql Server 2005 Verbindungsprotokoll
- 4. SQL Server 2005 Wie löschen Sie einen Abfrageausführungsplan
- 5. So finden Sie, wer sperrt, wer in SQL Server 2005
- 6. So verketten Sie zwei Zeichenfolgen in SQL Server 2005
- 7. Wie verwaltet SQL Server Verbindungen?
- 8. SQL Express 2005/2008 Gleichzeitige Verbindungen
- 9. So aggregieren Daten von SQL Server 2005
- 10. So finden Sie die Anzahl der gleichzeitigen SQL Server-Verbindungen
- 11. SQL Server 2005-Summierungsabfrage
- 12. SQL Server 2005 Datumslokalisierung
- 13. So erstellen Sie eine neue Instanz von Sql Server 2005
- 14. SQL Server 2005 Fehler
- 15. SQL Server Verbindungen
- 16. SQL Server (2005) Verbindungsserver Problem
- 17. SQL Server 2005 xp_cmdshell
- 18. Sortierproblem - SQL Server 2005
- 19. SQL Server Enterprise Manager 2005 mit SQL Server 2005 Express
- 20. SQL Server-Datenbank löschen
- 21. Synonyme in MS SQL bearbeiten Server 2005
- 22. SQL Server 2005, Schrumpfende Replikationsdatenbank
- 23. SQL Server 2008 zu SQL Server 2005
- 24. Wie erstellen Sie SQL Server 2005-Vorlagen für gespeicherte Prozeduren in SQL Server 2005 Management Studio?
- 25. SQL Server 2005 - Triggerschleife?
- 26. SQL Server 2005-Replikation
- 27. CSV in SQL Server 2005
- 28. Ausgabeparameter SQL Server 2005
- 29. SQL Server 2005 & Antivirensoftware
- 30. SQL Server 2005 Quellcodeverwaltung