Bei dem Versuch, einem App-Entwicklungsteam mit Leistungsproblemen auf einem SQL 2000-Server (aus einer Reihe von Java-Anwendungen auf separaten Anwendungsservern) zu helfen, führte ich eine SQL-Ablaufverfolgung durch und stellte fest, dass alle Aufrufe an die Datenbank voll waren von API-Server-Cursor-Anweisungen (sp_cursorprepexec, sp_cursorfetch, sp_cursorclose).JDBC Verbindung zu sehr beschäftigt SQL 2000: selectMethod = Cursor vs selectMethod = direkt?
Sieht wie sie einige Verbindungszeicheneigenschaften sind spezifiziert, die die Verwendung von serverseitige Cursors zwingen, zu einer Zeit nur 128 Datenzeilen Abrufen: (Von http://msdn.microsoft.com/en-us/library/Aa172588)
Wenn die API-Cursor-Attribute oder Eigenschaften sind auf etwas anderes als die Standardwerte, die OLE DB Provider für SQL Server und dem SQL Server ODBC-Treiber verwenden API-Server Cursor statt Standardresultset Sets. Jeder Aufruf einer API-Funktion , die Zeilen abruft, generiert einen Roundtrip zum Server, um die Zeilen vom API-Servercursor abzurufen.
UPDATE: Die Verbindungszeichenfolge in Rede ist ein JDBC-Verbindung String-Parameter, selectMethod=cursor
(die die serverseitige Cursors ermöglicht wir oben diskutiert) vs den alternativen selectMethod=direct
. Sie haben selectMethod=cursor
als Standard-Verbindungszeichenfolge aus allen Apps verwendet.
Aus meiner DBA-Perspektive, das ist nur ärgerlich (es verstopft die Spur mit nutzlosem Müll), und (ich würde spekulieren) führt zu vielen zusätzlichen App-zu-SQL-Server Rundreisen, die Gesamtleistung zu reduzieren.
Sie haben anscheinend Testwechsel (nur eine von etwa 60 verschiedenen App-Verbindungen) zu selectMethod=direct
, aber einige Probleme (von denen ich keine Details habe) und sind besorgt über die Anwendung brechen.
Also, meine Fragen sind:
selectMethod=cursor
niedriger Anwendungsleistung Kann verwenden, wie ich zu argumentieren versucht haben? (durch Erhöhung der Anzahl der erforderlichen Rundreisen auf einem SQL-Server, der bereits sehr hohe Abfragen pro Sekunde aufweist)- Ist
selectMethod=
eine anwendungstransparente Einstellung für eine JDBC-Verbindung? Könnte das ihre App kaputt machen, wenn wir sie ändern? - Allgemeiner, wann sollten Sie
cursor
vsdirect
verwenden?
Auch cross-posted to SF.
BEARBEITEN: Erhalten tatsächliche technische Details, die eine signifikante Bearbeitung von Titel, Frage und Tags gewährleisten.
EDIT: Zusätzliche Prämie hinzugefügt. Außerdem wurde der SF-Frage ein Bounty hinzugefügt (diese Frage konzentriert sich auf das Anwendungsverhalten, die SF-Frage konzentriert sich auf die SQL-Leistung.) Danke !!
IIRC, Sie haben Recht. Dies scheint jedoch genauso eine ServerFault-Frage zu sein wie eine SO-Frage. Sie würden wahrscheinlich klug sein, bei http://www.sqlservercentral.com/ zu fragen. –
Ich habe es auf dem Tag #sqlhelp auf Twitter erwähnt. Es gibt auch keine Bisse. Ich halte es für eine schlechte Form, eine Frage über mehrere SO-Websites hinweg zu stellen, oder? – BradC
Meine beste Vermutung wäre, dass sie es versuchen sollten. Vielleicht haben sie UnitTests, die sie gegen die Datenbank mit der geänderten Verbindungszeichenfolge (oder einer kleinen Testanwendung) auslösen können. – Bobby