Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
Впервые столкнулся с такой странной штукой и осознать происходящее не в силах.

К примеру есть сервер 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
- меняет план запроса и выполняется долго


Как такое лечить?
16 май 19, 14:13    [21886259]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
Забыл еще в запросе условие по индексированному полю

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


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

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


Но осталось понять зависимость статистики и базы из которой выполняется запрос))
16 май 19, 15:50    [21886402]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
1C Developer
Member

Откуда:
Сообщений: 65
У поля data в server2.dwh.dbo.table какой тип?

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

Также долго отрабатывает?
16 май 19, 16:08    [21886420]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
assmsk

Как такое лечить?


показать для начала
select @@version 
16 май 19, 16:09    [21886423]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
1C Developer, я не правильно написал в примере, там дата YYYYMMDD в INT
16 май 19, 16:32    [21886444]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
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: )
16 май 19, 16:34    [21886447]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
1C Developer
Member

Откуда:
Сообщений: 65
assmsk
1C Developer, я не правильно написал в примере, там дата YYYYMMDD в INT


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

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

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


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

Скопируйте лучше сюда то, что вы отправляете, а то то сейчас выясниться еще о двух десятках моментов о которых вы забыли.
16 май 19, 16:42    [21886453]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
assmsk,

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

select * from sys.database_scoped_configurations where is_value_default=0
16 май 19, 16:42    [21886454]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
1C Developer, тип данных int, в условии тоже пишу int
16 май 19, 16:47    [21886455]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
komrad, всех базах идентичные значения
16 май 19, 16:49    [21886458]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
1C Developer
Member

Откуда:
Сообщений: 65
assmsk
1C Developer, тип данных int, в условии тоже пишу int


USE [любая другая база]
Go

DECLARE @test int

SET @test = 20190101

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


А такой вариант?
16 май 19, 16:54    [21886465]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
assmsk,

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

Можно влючить параметризацию или RECOMPILE
16 май 19, 16:59    [21886471]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
1C Developer, мое второе сообщение
16 май 19, 17:02    [21886478]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
-- KAB --
Member

Откуда: Москва
Сообщений: 20
assmsk,

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

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

select name, compatibility_level
from sys.databases


если разные, повысьте версию пользовательских БД до версии сервера и обновите статистику еще раз, хотя бы sp_updatestats
16 май 19, 17:08    [21886483]     Ответить | Цитировать Сообщить модератору
 Re: Разный план запросов при запуске из разных баз  [new]
assmsk
Member

Откуда:
Сообщений: 169
-- KAB --, действительно, запрос не выполняется из тех бд где compatibility_level не 130,
там где 130 все выполняется
Спасибо!
16 май 19, 17:26    [21886509]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить