Dies kann ein Problem bei OLEDB-Aufrufen an Remoteserver sein (Verbindungsserver und SSIS-Konfigurationen verwenden OLEDB).
Dies ist ein Konstruktionsfehler, ein Microsoft SQL Server-Fehler, der erst nach SQL Server 2012 SP1 behoben wurde, soweit ich mich erinnere, dass Remote-Statistiken nicht zur Remote-Optimierung der Abfrage verwendet werden können.
Sie müssen sp_WhoIsActive ( download | docs ) auch vom REMOTE-Server in der Abfrage ausführen, um den Datenverkehr anzuzeigen. SQL Server, der nicht 2012 SP1 ist, erlaubt jedoch aus irgendeinem Grund die Verwendung von Remotestatistiken, selbst wenn die Anmeldung über einen Datenleser verfügt Zugriff auf alle Tabellen auf dem Remote-Server.
Die Microsoft-Lösung besteht darin, dem Verbindungsserver-Berechtigungsnachweis, mit dem der Remote-Aufruf ausgeführt wird, SA- oder ddladmin- oder DBO-Zugriff auf die abgefragten Remote-Server / -Tabellen zu gewähren.
Ich habe dies verwendet, um dieses Problem in einigen unserer Setups zu umgehen, das größtenteils lösungsmäßig transparent ist, ohne erhöhte Berechtigungen für DBs oder SQL Server auf der Remote-Seite zuzulassen. Grundsätzlich müssen Sie die Remote-Login-Rolle ddladmin in der betreffenden Remote-SQL Server-Datenbank gewähren und dann eine Rolle mit expliziten DENY-Berechtigungen für die Änderungen auf Objektebene erstellen, wenn Sie nur den SELECT-Zugriff zulassen möchten.
Unten finden Sie die Kopie der benutzerdefinierten DB-festen Rolle, die ich dafür erstellt habe. Möglicherweise möchten Sie diese testen und bestätigen oder weiter anpassen sowie einige Lese- und Recherchevorgänge durchführen, die jedoch in einigen Fällen für mich transparent aufgelöst wurden. Möglicherweise muss der Cache jedoch gelöscht werden, bevor dies funktioniert Denken Sie daran, und führen Sie es nach dem Löschen zweimal aus und überprüfen Sie sowohl die lokale Aktivität als auch die Remote-Aktivität auf Ergebnisse.
Erlauben Sie dem Berechtigungsnachweis die ddladmin-Rolle in der Remote-Datenbank, Sie erlauben die anderen üblichen Berechtigungen in der Remote-Datenbank, Sie erstellen die benutzerdefinierte DB-Rolle, wie unten aufgeführt, auf demselben Server und fügen dann denselben Berechtigungsnachweis zu diesem neuen benutzerdefinierten Fix hinzu DB-Rolle mit den expliziten Ablehnungen, löschen Sie den Cache, führen Sie die Abfrage zweimal oder öfter aus, nachdem Sie den Cache geleert haben, um zu sehen, ob sie aufgelöst wird.
Um Ihre Frage jedoch speziell zu beantworten, weil diese Cursorabrufe angezeigt werden, wenn Sie eine Version unter SQL Server 2012 SP1 ausführen und dies sehen und eine Remote-Abfrage ausführen, da die Verwendung oder Remote nicht zulässig ist Statistiken in diesem Setup ohne Problemumgehung (wie oben aufgeführt), führt dann die zeilenweise Verarbeitung wie oben angegeben durch, da die Abfrage nicht mithilfe von Statistiken für den besten Abfrageplan optimiert wurde und das Kardinalitätsproblem aufweist.
/*
CREATE A NEW ROLE - Deny explicit DB object access for linked
server credentials that the DDLAdmin role gives which is needed
for DBCC SHOW_STATISTICS across linked servers
*/
-- Database specific
CREATE ROLE db_LinkedServer_Restriction
DENY ALTER ANY ASSEMBLY TO db_LinkedServer_Restriction
DENY ALTER ANY ASYMMETRIC KEY TO db_LinkedServer_Restriction
DENY ALTER ANY CERTIFICATE TO db_LinkedServer_Restriction
DENY ALTER ANY CONTRACT TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE DDL TRIGGER TO db_LinkedServer_Restriction
DENY ALTER ANY DATABASE EVENT NOTIFICATION TO db_LinkedServer_Restriction
DENY ALTER ANY DATASPACE TO db_LinkedServer_Restriction
DENY ALTER ANY FULLTEXT CATALOG TO db_LinkedServer_Restriction
DENY ALTER ANY MESSAGE TYPE TO db_LinkedServer_Restriction
DENY ALTER ANY REMOTE SERVICE BINDING TO db_LinkedServer_Restriction
DENY ALTER ANY ROUTE TO db_LinkedServer_Restriction
DENY ALTER ANY SCHEMA TO db_LinkedServer_Restriction
DENY ALTER ANY SERVICE TO db_LinkedServer_Restriction
DENY ALTER ANY SYMMETRIC KEY TO db_LinkedServer_Restriction
DENY CHECKPOINT TO db_LinkedServer_Restriction
DENY CREATE AGGREGATE TO db_LinkedServer_Restriction
DENY CREATE DEFAULT TO db_LinkedServer_Restriction
DENY CREATE FUNCTION TO db_LinkedServer_Restriction
DENY CREATE PROCEDURE TO db_LinkedServer_Restriction
DENY CREATE QUEUE TO db_LinkedServer_Restriction
DENY CREATE RULE TO db_LinkedServer_Restriction
DENY CREATE SYNONYM TO db_LinkedServer_Restriction
DENY CREATE TABLE TO db_LinkedServer_Restriction
DENY CREATE TYPE TO db_LinkedServer_Restriction
DENY CREATE VIEW TO db_LinkedServer_Restriction
DENY CREATE XML SCHEMA COLLECTION TO db_LinkedServer_Restriction
DENY REFERENCES TO db_LinkedServer_Restriction
GO