Nachdem ich eine Weile gesucht hatte, entschied ich mich, diese Frage zu stellen, weil ich keine Antwort gefunden hatte, und mich zu entschuldigen, wenn es eine ähnliche Frage / Antwort gibt.
Wenn Sie die folgende Abfrage auf zwei ähnlich eingerichteten SQL-Servern ausführen, treten unterschiedliche Ausführungspläne auf, die sich auf die Leistung auswirken, und wir benötigen Hilfe, um die Ursache herauszufinden.
Die Abfrage:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
Ausführungsplan von Server A.
Ausführungsplan von Server B Server B http://s2.postimg.org/z9fjrfv4n/server_B.png
Sie werden feststellen, dass Server B im eigentlichen Ausführungsplan die TOP-physische Operation hat, und wir versuchen herauszufinden, warum. Beide Abfragen verwenden denselben Index in der Indexsuche.
Hier sind einige Details zu Server A und Server B.
Server A und B sind beide
Windows Server 2008 R2 Standard Service Pack 1
24 GB RAM
64-Bit-Betriebssystem
SQL Server 2012- Versionen, die mit ( SELECT SERVERPROPERTY ('ProductVersion') ) erhalten wurden
Server Eine SQL-Version 11.0.3000.0
Server B SQL Version 11.0.5058.0
Was wir versucht haben
Warum hat Server B das TOP im Ausführungsplan? In diesem einfachen Abfragebeispiel gibt es keine wirklichen Probleme, aber in einer größeren Abfrage steigen die Kosten für das TOP und wir sehen einen Leistungseinbruch. Jede Hilfe beim Debuggen wäre sehr dankbar und wir können Ihnen zusätzliche Informationen zur Verfügung stellen, die Sie möglicherweise benötigen, um zu helfen.
quelle
TOP
Bediener schlägtSET ROWCOUNT
vor, dass für diese Verbindung zuvor ein Wert ungleich Null ausgeführt wurde. Versuchen Sie es nach der Ausführung erneut mitSET ROWCOUNT 0;
. Außerdem sind die von Ihnen veröffentlichten SQL-Versionen nicht SQL 2008 R2. Führen Sie esSELECT SERVERPROPERTY('ProductVersion');
auf den beiden Servern aus, um die aktuelle SQL Server-Version abzurufen.GO
nach der Zeilenanzahl setzen. Können Sie auch die Eigenschaften des Top-Operators veröffentlichen?Antworten:
Stellen Sie sicher, dass die Datenbankkompatibilitätsstufe auf den beiden Servern gleich ist. Ich habe einen Schnelltest für eine SQL Server 2012-Instanz ausgeführt und festgestellt, dass der TOP-Operator eingeführt wird, wenn die Kompatibilitätsstufe 100 oder weniger beträgt. Sofern Sie keinen bestimmten Grund haben, etwas anderes zu tun, verwenden Sie am besten die Kompatibilitätsstufe 110 (SQL Server 2012) für eine SQL Server 2012-Instanz.
quelle
Ich denke, Sie haben einen Wert für ROWCOUNT. Machen:
... um es auszuschalten.
quelle