In der SQL Server 2012 Standard Edition weiß ich, dass die maximale Anzahl von Benutzerverbindungen 32.767 beträgt. Was soll ich als DBA tun, wenn ich auf diese Nummer zusteuere?
Derzeit gibt es 30.000 Benutzerverbindungen, und diese Zahl wird voraussichtlich zunehmen.
Antworten:
Die maximale Anzahl von Verbindungen zwischen SQL Server-Versionen und -Editionen beträgt 32.767.
Sie können feststellen, über wie viele Verbindungen SQL Server derzeit verfügt:
Wenn das Verhältnis zwischen verwendeten und nicht verwendeten Verbindungen aus der obigen Abfrage betroffen ist, wird das Verbindungspooling wahrscheinlich von Clientanwendungen aktiviert, die mit dem Server verbunden sind, und diese Verbindungen werden nicht effizient genutzt. Möglicherweise möchten Sie, dass Entwickler die Verbindungszeichenfolge für diese Anwendungen ändern, um die Größe des Verbindungspools zu begrenzen und sicherzustellen, dass die Verbindungen ordnungsgemäß verteilt werden. Wenn Verbindungen nicht ordnungsgemäß hergestellt werden, bleiben sie geöffnet, solange die Clientanwendung ausgeführt wird.
Wenn Sie sich besonders tollwütig fühlen und alle Verbindungen entfernen müssen, die in letzter Zeit noch nichts ausgeführt haben (unabhängig davon, ob sie tatsächlich gerade arbeiten), können Sie den folgenden Code ausführen, der eine Liste der Sitzungen generiert, die dies bewirken kann getötet werden. Sie müssen die generierten Befehle kopieren und in ein neues SSMS-Fenster einfügen, um die Befehle tatsächlich auszuführen. Ich würde auch empfehlen, Ihren Lebenslauf für alle Fälle auf dem neuesten Stand zu halten .
Es ist möglich, die Anzahl der Verbindungen über 32.767 hinaus linear zu skalieren, indem die Daten über mehrere SQL Server-Knoten verteilt werden. Meiner Meinung nach ähnelt die Verwendung von Splittern jedoch der Verwendung einer Atombombe, um eine Spinne zu töten. Es wird die Spinne töten, aber Sie könnten am Ende des Tages größere Probleme haben. Ganz zu schweigen davon, dass es verdammt schwer ist, eine Atombombe zu bauen, ganz zu schweigen davon, dass das Scherben von Arbeitsgeräten richtig ist.
quelle
is_user_process
Qualifikationsmerkmal zu ergänzen , und es würde sicherlich nicht schaden, Sitzungen mit einemlast_request_start_time
etwas neueren Wert auszuschließen . Wie aktuell? Noch eine gute Frage.Ich habe in der Vergangenheit seltsames Verhalten beim Verbindungspooling festgestellt, und Ihr Szenario passt gut zu einer dieser Situationen. Wenn in Ihrer Anwendung das Verbindungspooling verwendet wird (und das ist noch Spekulation, bis Sie dies bestätigen oder ablehnen), bleiben viele Verbindungen offen. Dies ist beabsichtigt.
Das Verbindungspooling zielt darauf ab, den Aufwand für das Erstellen einer Datenbankverbindung zu verringern. Nehmen wir zum Beispiel einen Verbindungspool von 3. Soweit ich weiß, läuft der Lebenszyklus ungefähr so ab (ausgehend von einem Cache für kalte Verbindungspools):
sp_reset_connection
auf Thread 1Dies ist eine Vereinfachung, aber die wichtigsten Punkte sind:
sp_reset_connection
aufgerufen wird.Hier ist das Referenzmaterial, aus dem ich diese Schlussfolgerungen gezogen habe.
Verbindungspooling für SQL Server DBA
Der Fall einer verwaisten Transaktion
quelle