Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
JOIN с таблицами на linked server выполняется по разному при разных permissions
|
|||
|---|---|---|---|
|
#18+
Приветствую население уважаемого форума Вот такая ситуация, с которой совершенно неожиданно для себя столкнулся. Пока не нашел никакой информации по этому вопросу. Имеется: SELECT statement, в котором присутствует несколько таблиц с локального сервера, а также несколько таблиц с удаленного сервера. Запрос исполняется из Query Analyzer. Логины на обоих серверах одинаковые - имена и пароли. Во время соединения они имперсонифицируются напрямую, то есть если логин=xxx на локальном сервере, то на удаленном сервере он тоже будет xxx. Теперь проблема. Если логин xxx принадлежит к роли db_ddladmin, то execution plan показывает исполнение запроса как отдельный запрос на локальном сервере, отдельный запрос на удаленном сервере и дальше идет join через nested loops. В этом случае реально с удаленного сервера забирается всего 4 записи из примерно 1700000. Соответственно такой запрос возвращает результат почти мгновенно. Если же логин xxx имеет только принадлежность к ролям public, db_datareader, db_datawriter, то по какой то непонятной для меня причине, execution plan показывает полное выкачивание всех 1700000 записей на локальный сервер и уже последующее соединение через Merge Join. Что это такое? Какими именно правами должен обладать пользователь, чтобы с одной стороны не иметь прав изменения схемы базы данных, но с другой стороны, чтобы такие запросы оптимизировались правильно. Да и странно в общем, что права в этом случае влияют на исполнение запросов. С уважением Роман ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2001, 19:19 |
|
||
|
JOIN с таблицами на linked server выполняется по разному при разных permissions
|
|||
|---|---|---|---|
|
#18+
На основе данной цитаты из BOL "The SQL Server optimizer uses the distribution statistics in an attempt to reduce the amount of data that must be communicated between the OLE DB provider and SQL Server. For example, when performing a distributed join between TableA on the local server and TableB on a linked server, SQL Server can use the distribution statistics to determine which of these processes is most efficient: 1.Send the rows from TableA that match non-join predicates to the linked server and have the linked server perform the join. 2.Retrieve the rows from TableB that match non-join predicates to the local server and perform the join on the local server. " выдвину следующее предположение . Отправка данных на удаленный сервер при выполненни распределенного запроса по 1-му сценарию может подразумевать создание на этом удаленном сервере какой-то таблицы (временной?). Отсюда логично предположить, что если у удаленного логина нет прав на создание таблицы (а роли public, db_datareader, db_datawriter как раз такого права не меют), то планировщик в вашем случае и выбирает 2-ой тип исполнения запроса. В случае, если удаленый логин имеет право на создание объектов на удаленном сервере(db_ddladmin), планировщик выбирает 1-ый тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2001, 07:05 |
|
||
|
JOIN с таблицами на linked server выполняется по разному при разных permissions
|
|||
|---|---|---|---|
|
#18+
Поможет явное указание хинта "INNER REMOTE JOIN" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2001, 07:12 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1824612]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 341ms |

| 0 / 0 |
