powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разный план запросов при запуске из разных баз
15 сообщений из 15, страница 1 из 1
Разный план запросов при запуске из разных баз
    #39814035
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Впервые столкнулся с такой странной штукой и осознать происходящее не в силах.

К примеру есть сервер server1, и я пишу кроссерверный запрос к таблице на сервере server2:

SELECT * FROM server2.dwh.dbo.table

Проблема в том, что если писать запрос из базы master строится нормальный план выполнения и запрос выполняется быстро(< 1 сек), но если писать запрос из какой то другой базы, то он висит часами. Не могу понять какое вообще отношение к плану выполнения имеет та база из которой я пишу запрос, ведь в запросе другой сервер и другая база?

USE master
Go
SELECT * FROM server2.dwh.dbo.table
- работает нормально


USE [любая другая база]
Go
SELECT * FROM server2.dwh.dbo.table
- меняет план запроса и выполняется долго


Как такое лечить?
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814134
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл еще в запросе условие по индексированному полю

SELECT * FROM server2.dwh.dbo.table where data = 01012019


Судя по всему дело в статистике, так как если вместо даты подставить переменную, а при переменной на сколько я помню не учитывается статистика, то запрос отрабатывает одинаково и из других баз а не только мастера

DECLARE @dt int = 01012019
SELECT * FROM server2.dwh.dbo.table where data = @dt


Но осталось понять зависимость статистики и базы из которой выполняется запрос))
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814146
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У поля data в server2.dwh.dbo.table какой тип?

USE [любая другая база]
Go
SELECT * FROM server2.dwh.dbo.table where data = 20190101

Также долго отрабатывает?
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814148
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk
Как такое лечить?

показать для начала
Код: sql
1.
select @@version 
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814163
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1C Developer, я не правильно написал в примере, там дата YYYYMMDD в INT
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814165
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad,
Сервер с которого пишу запрос:
Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64) Mar 6 2017 14:18:16 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: )

Сервер на котором лежит таблица:

Microsoft SQL Server 2016 (SP2-CU3) (KB4458871) - 13.0.5216.0 (X64) Sep 13 2018 22:16:01 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: )
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814169
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk1C Developer, я не правильно написал в примере, там дата YYYYMMDD в INT

А поле data у вас какой тип? Тоже int или другой?

Если поле data не int, то число в формате YYYYMMDD лучше привести в явном виде к нужному типу.

Код: sql
1.
2.
3.
USE [любая другая база]
Go
SELECT * FROM server2.dwh.dbo.table where data = 20190101



Вы такой запрос отправляете?

Скопируйте лучше сюда то, что вы отправляете, а то то сейчас выясниться еще о двух десятках моментов о которых вы забыли.
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814170
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

сравните вывод из мастера и пользовательской базы данных:

Код: sql
1.
select * from sys.database_scoped_configurations where is_value_default=0
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814171
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1C Developer, тип данных int, в условии тоже пишу int
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814173
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
komrad, всех базах идентичные значения
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814177
1C Developer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk1C Developer, тип данных int, в условии тоже пишу int

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
USE [любая другая база]
Go

DECLARE @test int

SET @test = 20190101

SELECT * FROM server2.dwh.dbo.table where data = @test



А такой вариант?
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814181
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

хватает разные скешированные планы.

Можно влючить параметризацию или RECOMPILE
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814183
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1C Developer, мое второе сообщение
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814186
-- KAB --
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmsk,

Вероятнее всего вы обновили сервер, а пользовательские базы в режиме совместимости старых версий.

Сравните БД master и вашу БД - разные версии?

select name, compatibility_level
from sys.databases


если разные, повысьте версию пользовательских БД до версии сервера и обновите статистику еще раз, хотя бы sp_updatestats
...
Рейтинг: 0 / 0
Разный план запросов при запуске из разных баз
    #39814200
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-- KAB --, действительно, запрос не выполняется из тех бд где compatibility_level не 130,
там где 130 все выполняется
Спасибо!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разный план запросов при запуске из разных баз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]