Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
assmsk Member Откуда: Сообщений: 187 |
Впервые столкнулся с такой странной штукой и осознать происходящее не в силах. К примеру есть сервер 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] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
Забыл еще в запросе условие по индексированному полю 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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
показать для начала select @@version |
||
16 май 19, 16:09 [21886423] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
1C Developer, я не правильно написал в примере, там дата YYYYMMDD в INT |
16 май 19, 16:32 [21886444] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
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] Ответить | Цитировать Сообщить модератору |
1C Developer Member Откуда: Сообщений: 65 |
А поле data у вас какой тип? Тоже int или другой? Если поле data не int, то число в формате YYYYMMDD лучше привести в явном виде к нужному типу. USE [любая другая база] Go SELECT * FROM server2.dwh.dbo.table where data = 20190101 Вы такой запрос отправляете? Скопируйте лучше сюда то, что вы отправляете, а то то сейчас выясниться еще о двух десятках моментов о которых вы забыли. |
||
16 май 19, 16:42 [21886453] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5496 |
assmsk, сравните вывод из мастера и пользовательской базы данных: select * from sys.database_scoped_configurations where is_value_default=0 |
16 май 19, 16:42 [21886454] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
1C Developer, тип данных int, в условии тоже пишу int |
16 май 19, 16:47 [21886455] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
komrad, всех базах идентичные значения |
16 май 19, 16:49 [21886458] Ответить | Цитировать Сообщить модератору |
1C Developer Member Откуда: Сообщений: 65 |
USE [любая другая база] Go DECLARE @test int SET @test = 20190101 SELECT * FROM server2.dwh.dbo.table where data = @test А такой вариант? |
||
16 май 19, 16:54 [21886465] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
assmsk, хватает разные скешированные планы. Можно влючить параметризацию или RECOMPILE |
16 май 19, 16:59 [21886471] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
1C Developer, мое второе сообщение |
16 май 19, 17:02 [21886478] Ответить | Цитировать Сообщить модератору |
-- KAB -- Member Откуда: Москва Сообщений: 20 |
assmsk, Вероятнее всего вы обновили сервер, а пользовательские базы в режиме совместимости старых версий. Сравните БД master и вашу БД - разные версии? select name, compatibility_level from sys.databases если разные, повысьте версию пользовательских БД до версии сервера и обновите статистику еще раз, хотя бы sp_updatestats |
16 май 19, 17:08 [21886483] Ответить | Цитировать Сообщить модератору |
assmsk Member Откуда: Сообщений: 187 |
-- KAB --, действительно, запрос не выполняется из тех бд где compatibility_level не 130, там где 130 все выполняется Спасибо! |
16 май 19, 17:26 [21886509] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |