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

Откуда:
Сообщений: 598
После переноса БД с сервера SQL2000 (ось сервер 2000) на сервер SQL2008 (ось Server2008), ряд запросов стал исполняться на порядок дольше.
Помогите, пожалуйста, разобраться почему такая большая разница по времени исполнения запроса.

SQL Server 2000 and 2005 ===========================================
Запрос типа:
select *
from server2005.SE.dbo.v as v
inner join server2000.DO.dbo.tblmain as Tblmain
ON  Tblmain.SharesID1 = v.cp_code
WHERE
	Tblmain.Entry_Date BETWEEN @nomFromDate AND @nomToDate
and	Tblmain.NomineeID1 = @combo81
AND	Tblmain.Security = @combo82
время выполнения 7 сек.

План выполнения:
  |--Filter(WHERE:((([Tblmain].[NomineeID1]=Convert([@combo81]) AND [Tblmain].[Security]=Convert([@combo82])) AND Convert([Tblmain].[Entry_Date])>=[@nomFromDate]) AND Convert([Tblmain].[Entry_Date])<=[@nomToDate]))
       |--Bookmark Lookup(BOOKMARK:([Bmk1001]), OBJECT:([OD].[dbo].[tblmain] AS [Tblmain]))
            |--Nested Loops(Inner Join, OUTER REFERENCES:([server2005].[SE].[dbo].[v].[cp_code]))
                 |--Remote Query(SOURCE:(server2005), QUERY:(SELECT v."cp_code" "Col1039",v."contact_salutation" "Col1040",v."contact_name" "Col1041",......FROM "SE"."dbo"."v" v))
                 |--Index Seek(OBJECT:([OD].[dbo].[tblmain].[IX_tblmain] AS [Tblmain]), SEEK:([Tblmain].[SharesID1]=Convert([server2005].[SE].[dbo].[v].[cp_code])) ORDERED FORWARD)

SQL Server 2008 and 2005 ===========================================
Запрос типа:
select *
from server2005.SE.dbo.v as v
inner join server2008.DO.dbo.tblmain as Tblmain
ON  Tblmain.SharesID1 = v.cp_code
WHERE
	Tblmain.Entry_Date BETWEEN @nomFromDate AND @nomToDate
and	Tblmain.NomineeID1 = @combo81
AND	Tblmain.Security = @combo82
время выполнения 77 сек.
План выполнения:
  |--Nested Loops(Inner Join, OUTER REFERENCES:([Tblmain].[SharesID1]))
       |--Nested Loops(Inner Join, OUTER REFERENCES:([Tblmain].[id]))
       |    |--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1045], [Expr1046], [Expr1047]))
       |    |    |--Merge Interval
       |    |    |    |--Concatenation
       |    |    |         |--Compute Scalar(DEFINE:(([Expr1040],[Expr1041],[Expr1039])=GetRangeWithMismatchedTypes([@nomFromDate],NULL,(22))))
       |    |    |         |    |--Constant Scan
       |    |    |         |--Compute Scalar(DEFINE:(([Expr1043],[Expr1044],[Expr1042])=GetRangeWithMismatchedTypes(NULL,[@nomToDate],(42))))
       |    |    |              |--Constant Scan
       |    |    |--Index Seek(OBJECT:([OD].[dbo].[tblmain].[IX_tblmain_8194] AS [Tblmain]), SEEK:([Tblmain].[Security]=CONVERT_IMPLICIT(nvarchar(200),[@combo82],0) AND [Tblmain].[NomineeID1]=CONVERT_IMPLICIT(nvarchar(200),[@combo81],0) AND [Tblmain].[Entry_Date] > [Expr1045] AND [Tblmain].[Entry_Date] < [Expr1046]) ORDERED FORWARD)
       |    |--Clustered Index Seek(OBJECT:([OD].[dbo].[tblmain].[PK_tblmain] AS [Tblmain]), SEEK:([Tblmain].[id]=[OD].[dbo].[tblmain].[id] as [Tblmain].[id]) LOOKUP ORDERED FORWARD)
       |--Compute Scalar(DEFINE:([server2005].[SE].[dbo].[v].[cp_code]=[server2005].[SE].[dbo].[v].[cp_code] as [v].[cp_code], [server2005].[SE].[dbo].[v].[contact_salutation]=[server2005].[SE].[dbo].[v].[contact_salutation] as [v].[contact_salutation], [server2005].[SE].[dbo].[v].[contact_name]=[server2005].[SE].[dbo].[v].[contact_name] as [v].[contact_name], [server2005].[SE].[dbo].[v......
            |--Remote Query(SOURCE:(server2005), QUERY:(SELECT "Tbl1001"."cp_code" "Col1008","Tbl1001"."contact_salutation" "Col1009","Tbl1001"."contact_name" "Col1010","Tbl1001" ...... FROM "SE"."dbo"."v" "Tbl1001" WHERE ?=CONVERT(nvarchar(20),"Tbl1001"."cp_code",0)))

Мои предположения:
1) сетевые настройки Server2008
2) настройки SQL Server2008
3) абсолютно разный подход к формированию (исполнению) запросов в sql2008. Ну в этом случае, тогда в плохую сторону.

Помогите найти грабли.

PS
Update индексов и статистики был сделан.
Также добавил на SQL2008 индекс IX_tblmain_8194 , который покрывает весь запрос. (улучшения были на пару секунд)
Строк на выходе всего около 900.
11 июн 09, 08:39    [7288306]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
Проверка трассы показывает, что в случае 2008, сервер таскает по одной строчке с 2005 сервера.
11 июн 09, 08:42    [7288307]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Idol_111
...Помогите найти грабли...
Запустите профилер для обоих серверов и посмотрите, что там идет на самом деле...
11 июн 09, 10:07    [7288605]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
tpg
Idol_111
...Помогите найти грабли...
Запустите профилер для обоих серверов и посмотрите, что там идет на самом деле...

Что вы имеете ввиду? Я вроде уже написал, что на 2008 сервер таскает по одной строке из 2005 сервера (через linked serv). Это и дает такое большое время.
Вопрос, как с этим быть.

Хотя 2000 на профайлере я не проверял. Надо попробовать. Как считаете, что нужно смотреть?
11 июн 09, 10:15    [7288656]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Idol_111
Что вы имеете ввиду? Я вроде уже написал, что на 2008 сервер таскает по одной строке из 2005 сервера (через linked serv). Это и дает такое большое время.
Вопрос, как с этим быть.
Натолкнула на мысль вот эта статья - https://www.sql.ru/articles/mssql/2007/051803PushAndPullinMicrosoftSQLServerLinkedServers.shtml
11 июн 09, 10:31    [7288755]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3197
1. Права пользователей, под которыми выполняется (в которых мэппится) запрос, идентичные в обоих случаях?
Я как-то сталкивался с ситуацией, когда отсутствие у юзера прав на какую-то DBCC-шку, сейчас уже точно не помню какую, заставляет линк работать именно в построчном режиме, а как только тот получал хотя бы ddl_admin'а, все начинало летать.
2. Настройки линкед-серверов идентичные?
11 июн 09, 10:35    [7288783]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
Ennor Tiegael
1. Права пользователей, под которыми выполняется (в которых мэппится) запрос, идентичные в обоих случаях?
Я как-то сталкивался с ситуацией, когда отсутствие у юзера прав на какую-то DBCC-шку, сейчас уже точно не помню какую, заставляет линк работать именно в построчном режиме, а как только тот получал хотя бы ddl_admin'а, все начинало летать.
2. Настройки линкед-серверов идентичные?

1) это идея, так как права я порезал. Попробую отпишу.
2) нет, но я игрался с ними и делал иденитичными, без изменений (типа RPC settings).
11 июн 09, 10:47    [7288885]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
tpg
Idol_111
Что вы имеете ввиду? Я вроде уже написал, что на 2008 сервер таскает по одной строке из 2005 сервера (через linked serv). Это и дает такое большое время.
Вопрос, как с этим быть.
Натолкнула на мысль вот эта статья - https://www.sql.ru/articles/mssql/2007/051803PushAndPullinMicrosoftSQLServerLinkedServers.shtml

Читал. Мысль трезвая.
Я вот тоже думаю, что все дело в какой-нибудь маленькой настройке в БД, которая в 2008 по умолчанию другая, чем в 2000. Вот только какая?
Уж очень не верится, что 2008 соображает хуже, чем 2000.
11 июн 09, 14:43    [7290611]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
Idol_111
Ennor Tiegael
1. Права пользователей, под которыми выполняется (в которых мэппится) запрос, идентичные в обоих случаях?
Я как-то сталкивался с ситуацией, когда отсутствие у юзера прав на какую-то DBCC-шку, сейчас уже точно не помню какую, заставляет линк работать именно в построчном режиме, а как только тот получал хотя бы ddl_admin'а, все начинало летать.
2. Настройки линкед-серверов идентичные?

1) это идея, так как права я порезал. Попробую отпишу.
2) нет, но я игрался с ними и делал иденитичными, без изменений (типа RPC settings).

Ничего не выходит, запускал с правами админа - безрезультатно. Продолжает таскать данные по одной строчке.
16 июн 09, 01:16    [7302983]     Ответить | Цитировать Сообщить модератору
 Re: разное время выполнения запроса на разных серверах  [new]
Idol_111
Member

Откуда:
Сообщений: 598
SQL Server 2005 и 2008 использует SQLNCLI провайдера для связанного сервера, а у SQL 2000 такого провайдера нет. Может в этом проблема?
Гляньте на установки провайдера, может что-то не так:
<ProviderInformation>
	<Provider>SQLNCLI</Provider>
	<LinkedServer>server2005</LinkedServer>
	<ProviderCapabilitiesAndSettings>
		<Ansi92EntrySupport>1</Ansi92EntrySupport>
		<ODBCCoreSupport>1</ODBCCoreSupport>
		<ODBCMinimumSupport>1</ODBCMinimumSupport>
		<SimpleGrammarSupport>0</SimpleGrammarSupport>
		<AnsiLikeSupport>0</AnsiLikeSupport>
		<SQLLikeSupport>0</SQLLikeSupport>
		<DateLiteralsSupport>1</DateLiteralsSupport>
		<GroupBySupport>0</GroupBySupport>
		<InnerJoinSupport>0</InnerJoinSupport>
		<SubqueriesSupport>0</SubqueriesSupport>
		<SimpleUpdatesSupport>0</SimpleUpdatesSupport>
		<HistogramsSupport>1</HistogramsSupport>
		<ColumnLevelCollationSupport>1</ColumnLevelCollationSupport>
		<ConnectionSharingSupport>1</ConnectionSharingSupport>
		<MultipleActiveRowsetsSupport>1</MultipleActiveRowsetsSupport>
		<MultipleResultsSupport>1</MultipleResultsSupport>
		<AllowLimitingRowsReturned>1</AllowLimitingRowsReturned>
		<NullConcatenationYieldsNull>1</NullConcatenationYieldsNull>
		<StructuredStorageAccessToLargeObjects>1</StructuredStorageAccessToLargeObjects>
		<MultipleConcurrentLargeObjectSupport>0</MultipleConcurrentLargeObjectSupport>
		<DynamicParametersSupport>1</DynamicParametersSupport>
		<NestedQueriesSupport>1</NestedQueriesSupport>
		<IndicesAvailableAsAccessPath>0</IndicesAvailableAsAccessPath>
		<AllowDataAccessByReference>1</AllowDataAccessByReference>
		<RowsetChangesAreVisible>1</RowsetChangesAreVisible>
		<RowsetSupportsAppendOnly>0</RowsetSupportsAppendOnly>
		<UseLevelZeroOledbInterfacesOnly>0</UseLevelZeroOledbInterfacesOnly>
		<RowsetUpdatability>1</RowsetUpdatability>
		<AsynchronousRowsetProcessingSupport>1</AsynchronousRowsetProcessingSupport>
		<DataSourceUnicodeLocaleId>0</DataSourceUnicodeLocaleId>
		<DataSourceUnicodeComparisonStyle>0</DataSourceUnicodeComparisonStyle>
		<DataSourceCollationComparisonFlags>0</DataSourceCollationComparisonFlags>
		<DataSourceCharacterset></DataSourceCharacterset>
		<DataSourceSortOrder></DataSourceSortOrder>
		<DataSourceNullCollationOrder>4</DataSourceNullCollationOrder>
		<CurrentDbCollationSameAsDefaultRemoteDbCollation>0</CurrentDbCollationSameAsDefaultRemoteDbCollation>
		<UnicodeLiteralSupport>1</UnicodeLiteralSupport>
		<UnicodeLiteralPrefix>N'</UnicodeLiteralPrefix>
		<UnicodeLiteralSuffix>'</UnicodeLiteralSuffix>
		<DateLiteralPrefix>'</DateLiteralPrefix>
		<DateLiteralSuffix>'</DateLiteralSuffix>
		<ObjectNameConstructionFlags>54</ObjectNameConstructionFlags>
		<SchemaSeparator>.</SchemaSeparator>
		<CatalogSeparator>.</CatalogSeparator>
		<QuoteSeparator>"</QuoteSeparator>
		<ProviderOledbVersion>131152</ProviderOledbVersion>
		<HalloweenProtectionNeeded>1</HalloweenProtectionNeeded>
		<RowsetUsableAcrossThreads>0</RowsetUsableAcrossThreads>
		<ObjectNameIsSinglePart>0</ObjectNameIsSinglePart>
		<ObjectVersion>168281125833145</ObjectVersion>
		<Cardinality>-1</Cardinality>
		<BookmarkSupport>1</BookmarkSupport>
		<BookmarksReusable>0</BookmarksReusable>
		<BookmarkType>Numeric</BookmarkType>
		<BookmarkDataType>19</BookmarkDataType>
		<BookmarkSize>4</BookmarkSize>
		<TableFlags>0</TableFlags>
	</ProviderCapabilitiesAndSettings>
</ProviderInformation>
16 июн 09, 03:52    [7303066]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить