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

Откуда:
Сообщений: 107
Вот мой сиквел:

Microsoft SQL Server Enterprise Edition (64-bit)
Microsoft Windows NT 6.1 (7601)
10.50.2500.0


Вот вьюха:

ALTER VIEW [dbo].[A]
AS
SELECT     (ACCOUNTNUM + '1' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, VENDGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], 
                      (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, OKPO_RU AS ОКПО, OKDP_RU AS ОКПД, 
                      LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 1 AS 'Тип контрагента'
FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.VENDTABLE
UNION ALL
SELECT     (ACCOUNTNUM + '0' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, CUSTGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], 
                      (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, CODEOKPO_RU AS ОКПО, CODEOKDP_RU AS ОКПД, 
                      LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 0 AS 'Тип контрагента'
FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.CUSTTABLE
UNION ALL
(SELECT     (EMPLID + '' + LTRIM(RTRIM(EmplTable.DATAAREAID))) AS [Код], DirPartyTable.NAME AS Название, EmplGroupId_RU AS [Группа], EMPLID AS [Код AXAPTA], 
                        'Нет' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, LTRIM(RTRIM(EmplTable.DATAAREAID)) AS 'Компания', 2 AS 'Тип контрагента'
 FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.EmplTable INNER JOIN
                        [sql-ax2k9-db].nidan_real_2k9.dbo.DirPartyTable ON (EmplTable.partyID = DirPartyTable.PartyID) AND (EmplTable.dataareaid = DirPartyTable.dataareaid)
 WHERE     (EMPLTABLE.AdvHolder_RU = 1) AND (EMPLTABLE.Status <> 2))

[b]UNION ALL
SELECT     '0' AS [Код], '(нет данных)' AS Название, '' AS [Группа], 'EMPTY' AS [Код AXAPTA], 'Да' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, 
                      '' AS 'Компания', 0 AS 'Тип контрагента'[/b]



Вот запрос:

exec sp_executesql N'SELECT TOP (100) [t0].[Код], [t0].[Название], [t0].[Группа], [t0].[Код AXAPTA]
 AS [Код_AXAPTA], [t0].[Блокировано], [t0].[ИНН], [t0].[КПП], [t0].[ОКПО], [t0].[ОКПД], [t0].[Компания], [t0].[Тип контрагента] AS [Тип_контрагента]
FROM [dbo].[A] AS [t0]
WHERE ([t0].[Название] LIKE @p0) AND ([t0].[Тип контрагента] = @p1) AND ([t0].[Компания] = @p2)',N'@p0 nvarchar(9),@p1 int,@p2 nvarchar(2)',
@p0=N'%maneesh%',@p1=2,@p2=N'НС'


Выполняется секунд 30 минимум и ничего не возвращает. Если закомментить выделенные в определении вьюхи строки, то выполнится влет. Почему и как исправить вьюху?
14 сен 12, 17:03    [13166401]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
senglory
Member

Откуда:
Сообщений: 107
Т.е. для такой вьюхи:

ALTER VIEW [dbo].[A]
AS
SELECT     (ACCOUNTNUM + '1' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, VENDGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], 
                      (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, OKPO_RU AS ОКПО, OKDP_RU AS ОКПД, 
                      LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 1 AS 'Тип контрагента'
FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.VENDTABLE
UNION ALL
SELECT     (ACCOUNTNUM + '0' + LTRIM(RTRIM(DATAAREAID))) AS [Код], ACCOUNTNUM + '-' + NAME AS Название, CUSTGROUP AS [Группа], ACCOUNTNUM AS [Код AXAPTA], 
                      (CASE BLOCKED WHEN 0 THEN 'Нет' ELSE 'Да' END) AS Блокировано, INN_RU AS ИНН, KPP_RU AS КПП, CODEOKPO_RU AS ОКПО, CODEOKDP_RU AS ОКПД, 
                      LTRIM(RTRIM(DATAAREAID)) AS 'Компания', 0 AS 'Тип контрагента'
FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.CUSTTABLE
UNION ALL
(SELECT     (EMPLID + '' + LTRIM(RTRIM(EmplTable.DATAAREAID))) AS [Код], DirPartyTable.NAME AS Название, EmplGroupId_RU AS [Группа], EMPLID AS [Код AXAPTA], 
                        'Нет' AS Блокировано, '' AS ИНН, '' AS КПП, '' AS ОКПО, '' AS ОКПД, LTRIM(RTRIM(EmplTable.DATAAREAID)) AS 'Компания', 2 AS 'Тип контрагента'
 FROM         [sql-ax2k9-db].nidan_real_2k9.dbo.EmplTable INNER JOIN
                        [sql-ax2k9-db].nidan_real_2k9.dbo.DirPartyTable ON (EmplTable.partyID = DirPartyTable.PartyID) AND (EmplTable.dataareaid = DirPartyTable.dataareaid)
 WHERE     (EMPLTABLE.AdvHolder_RU = 1) AND (EMPLTABLE.Status <> 2))


все выполняется быстро
14 сен 12, 17:04    [13166409]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
chatm
Member

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

в качестве офф по вопросу.

а что, Нидан до сих пор на косяпте? вроде бы проходила инфа, что перешли на R/3

а по сути, неплохо бы и планы выполнения приложить
14 сен 12, 17:29    [13166624]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
имхо неявное преобразование данных
14 сен 12, 17:32    [13166638]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
user89
Member

Откуда:
Сообщений: 2083
senglory,

exec sp_executesql N'SELECT TOP (100) [t0].[Код], ...
order by отсутствует...
14 сен 12, 17:36    [13166678]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
Alexander Titkin
Member

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

А если попробовать перенести выделенную часть в начало запроса?
14 сен 12, 18:56    [13167137]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
senglory
Member

Откуда:
Сообщений: 107
user89,

Пофиг на ORDER BY и его присутствие/отсутствие. Влияет, похоже, последний UNION.
14 сен 12, 23:36    [13168086]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 32173
senglory
Влияет, похоже, последний UNION.
Да, какой то уникальный случай. Вы бы планы сравнили, может, что то понятно будет. Ещё нужно в плане посмотреть на приведение типов.
15 сен 12, 00:27    [13168233]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
senglory
Member

Откуда:
Сообщений: 107
alexeyvg,

В общем, анализ плана показал, что больше всего времени тратится на

FROM [sql-ax2k9-db].nidan_real_2k9.dbo.XXXXXXXXX

т.е. вызов удаленного сервера
17 сен 12, 22:51    [13179357]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
Glory
Member

Откуда:
Сообщений: 104751
senglory
В общем, анализ плана показал, что больше всего времени тратится на

FROM [sql-ax2k9-db].nidan_real_2k9.dbo.XXXXXXXXX

т.е. вызов удаленного сервера

В каком из запросов ?
18 сен 12, 09:12    [13180067]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
senglory
Member

Откуда:
Сообщений: 107
Glory,

В последнем. Еще возможный фикс - это если вызов делать так:
exec sp_executesql N'SELECT TOP (100) [t0].[Код], [t0].[Название], [t0].[Группа], [t0].[Код AXAPTA] AS [Код_AXAPTA], [t0].[Блокировано], [t0].[ИНН], [t0].[КПП], [t0].[ОКПО], [t0].[ОКПД], [t0].[Компания], [t0].[Тип контрагента] AS [Тип_контрагента] 
FROM [DAXView].[dbo].[SP_CustVendTable] AS [t0] 
WHERE ([t0].[Название] LIKE @p0) AND ([t0].[Тип контрагента] = @p1) AND ([t0].[Компания] = @p2) option(recompile)',N'@p0 nvarchar(10),@p1 int,@p2 nvarchar(2)',@p0=N'%степанов%',@p1=2,@p2=N'НС' 


С option(recompile) выполняется за секунду.
18 сен 12, 15:39    [13183330]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
Glory
Member

Откуда:
Сообщений: 104751
Это - https://www.sql.ru/forum/actualthread.aspx?tid=970114 - тоже вы ?
Вы планы то _сравнили_ ?
Они одинаковые или разные ?
18 сен 12, 15:41    [13183354]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1310
Проверте сначала
OPTION (OPTIMIZE FOR UNKNOWN) или переобъявить параметры внутри
18 сен 12, 17:48    [13184247]     Ответить | Цитировать Сообщить модератору
 Re: SQL 2008 - Странные тормоза во вьюхе  [new]
senglory
Member

Откуда:
Сообщений: 107
Glory,

Нет не я, чес-слово :)

Планы отличаются. В аттаче лежат скрины с планами для обоих случаев.

К сообщению приложен файл (sql plans.zip - 31Kb) cкачать
18 сен 12, 18:26    [13184458]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить