Это может быть проблемой с вызовами OLEDB к удаленным серверам (связанные серверы и конфигурации SSIS используют OLEDB).
Это конструктивный недостаток, ошибка Microsoft SQL Server, которая не была исправлена до SQL Server 2012 SP1, поскольку, насколько я помню, она не позволяет использовать удаленную статистику для удаленной оптимизации запроса.
Вам также потребуется запустить sp_WhoIsActive ( download | docs ) с удаленного сервера в запросе, чтобы увидеть трафик, но SQL Server, отличающийся от 2012 SP1, по какой-то причине не позволяет использовать удаленную статистику, даже если в логине есть datareader доступ ко всем таблицам на удаленном сервере.
Решение Microsoft состоит в том, чтобы предоставить учетным данным связанного сервера, выполняющему удаленный вызов, доступ SA, или ddladmin, или DBO к запрашиваемому удаленному серверу / таблицам.
Я использовал это, чтобы обойти эту проблему в некоторых наших установках, которая прозрачна для большей части решения без предоставления повышенных разрешений для БД или SQL-серверов на удаленной стороне. По сути, вам нужно предоставить роль удаленного входа в систему ddladmin для рассматриваемой удаленной базы данных SQL Server, а затем создать роль с явными разрешениями DENY для изменений уровня объекта, если вы только собираетесь разрешить доступ SELECT.
Ниже приведена копия пользовательской фиксированной роли БД, которую я создаю для этого, но вы можете протестировать и подтвердить или отрегулировать ее дополнительно, а также некоторые материалы для чтения и исследования, но в некоторых случаях они разрешаются прозрачно для меня - кэш может потребоваться очистить, хотя до того, как он заработает, имейте это в виду, и как только он будет очищен, запустите его дважды и проверьте результаты как локальной, так и удаленной активности.
Итак, разрешите учетные данные роли ddladmin на удаленной БД, разрешите другие обычные разрешения на удаленной БД, создайте пользовательскую роль БД, как я перечислил ниже на этом же сервере, а затем добавьте те же учетные данные в этот новый пользовательский фиксированный Роль БД с явным запретом, очистить кеш, выполнить запрос дважды или более после очистки кеша, чтобы посмотреть, разрешится ли он.
Чтобы конкретно ответить на ваш вопрос, хотя по той причине, что вы видите эти выборки курсора, если вы работаете с версией ниже SQL Server 2012 SP1 и видите это, и вы выполняете удаленный запрос, потому что он не разрешает использование или удаленный статистика в этой настройке без обходного пути (как указано выше), затем она выполняет построчную обработку, как указано выше Kin, так как запрос не оптимизирован с использованием статистики для лучшего плана запроса и имеет проблему с количеством элементов.
/*
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