Ich bin für die Verwaltung einer Instanz von SQL Server 200x verantwortlich, die das Unglück hat, als Backend für eine schlüsselfertige Anwendung zu dienen, die mit einem ekelhaften Leistungsproblem geschrieben wurde. Es wird wiederholt das Muster der Vorbereitung eines statischen Cursors verwendet, für den nur die ersten Einträge von verwendet werden, und dies dauert häufig mehrere zehn Millisekunden. Es gibt Tausende dieser Abfragen in einem kontinuierlichen Stream.
Die Wahrheit ist, dass aufgrund des merkwürdigen Designs der Anwendung die Datenintegrität bei keiner dieser Abfragen ein Problem darstellt. Die Tatsache, dass sie statisch sind, ist miserabel, da die Leistung in diesem Fall etwa dreißigmal schneller wäre dynamisch.
Nachdem ich mich wochenlang mit dem Verkäufer befasst habe, komme ich nicht weiter. Die Wahrheit ist alles, was ich wirklich tun muss, ist einen Parameter in der Art und Weise zu ändern, wie die Anwendung sp_cursorprepexec verwendet. Bei Bedarf kann ich dies sogar global auf dem gesamten Server tun.
Ich schaue mir alle Lösungen an, ob sie eine Funktion in SQL Server 200x verwenden, die ich nicht finden konnte, und schreibe eine kleine App, die sich zwischen SQL Server und dem Client befindet und die Daten ändert (obwohl ich Ich würde mich nicht darauf freuen, herauszufinden, wie man mit dem TDS-Protokoll so umgeht, oder sp_cursorprepexec irgendwie umzubenennen und durch einen Wrapper zu ersetzen.
Der Himmel ist das Limit.
(Zu Ihrer Information, wir führen gerade SQL Server 2005 aus, aber wenn es einen überzeugenden Grund gibt, das zusätzliche Geld für das Upgrade der Lizenz auszugeben, kann dies passieren.)
quelle