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

select * from server1.db.dbo.table_1
union all
select * from server1.db.dbo.table_2
union all
select * from table_3

Таблицы на сервере server1.db.dbo.table_1 и server1.db.dbo.table_2 не предполагают каких либо изменений (архивные).

Есть процедура которая обновляет 1-ну строку данных посредством этой вью. Причем обновление касается только таблицы table_3 на локальном сервере.

Проблема в том, что из QA выполнение процедуры занимает 1 сек.
Из приложения 2 минуты.

Профайлер говорит, что основное время выполнения этой процедуры из приложения занимает тысячи sp_cursorfetch.
Из QA никаких sp_cursorfetch не наблюдаются.

Пользователь sa на обоих серверах.

Все сервера 2008 SP3 EE
Linked Server настроен с провайдером SQLNCLI.

Как избавится от этих sp_cursorfetch?
6 янв 14, 17:09    [15381672]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Да...
Имеет ли к этому непотребству то, что приложение использует DBLib (ntwdblib)?
6 янв 14, 17:14    [15381699]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

Откуда:
Сообщений: 104760
VadymA
Как избавится от этих sp_cursorfetch?

Как вы вызываете процедуру из вашего приложения ?
6 янв 14, 17:16    [15381706]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
aleks2
Guest
Серверу по-барабану как называется приложение.

Для началу приведите к единому знаменателю

DBCC USEROPTIONS
6 янв 14, 17:19    [15381720]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

профайлер говорит:

exec dbo.sc_Modify @Kind=1,
@Query1= 'DECLARE @@SysExpect int,@@SysError int, @@SysCount int,@@SysRowId int,@@SysResult int, @@UsrError int,@@UsrCount int,@@UsrResult int EXEC @@SysResult=dbo.sc_SetDocumentState @Id=1474692, @Stamp=0x000000000B317E3E ,@ProcessFlag=3 ,@ProcessMode=0 SELECT @@SysCount=@@ROWCOUNT,@@SysError=@@ERROR IF @@UsrCount IS NOT NULL SET @@SysCount=@@UsrCount IF @@UsrError IS NOT NULL SET @@SysError=@@UsrError IF @@UsrResult IS NOT NULL SET @@SysResult=@@UsrResult RAISERROR(66667,1,1,@@SysCount,@@SysError,@@SysResult)'


dbo.sc_Modify выполняет dbo.sc_SetDocumentState который изменяет запись в ProcessFlag=3 и ProcessMode=0
6 янв 14, 17:28    [15381750]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
aleks2,

идентично на обоих серверах
6 янв 14, 17:28    [15381755]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1558
VadymA
aleks2,

идентично на обоих серверах
Речь шла о Вашем приложении и об QA, а не о серверах.
6 янв 14, 17:34    [15381771]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

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

профайлер говорит:

exec dbo.sc_Modify @Kind=1,
@Query1= 'DECLARE @@SysExpect int,@@SysError int, @@SysCount int,@@SysRowId int,@@SysResult int, @@UsrError int,@@UsrCount int,@@UsrResult int EXEC @@SysResult=dbo.sc_SetDocumentState @Id=1474692, @Stamp=0x000000000B317E3E ,@ProcessFlag=3 ,@ProcessMode=0 SELECT @@SysCount=@@ROWCOUNT,@@SysError=@@ERROR IF @@UsrCount IS NOT NULL SET @@SysCount=@@UsrCount IF @@UsrError IS NOT NULL SET @@SysError=@@UsrError IF @@UsrResult IS NOT NULL SET @@SysResult=@@UsrResult RAISERROR(66667,1,1,@@SysCount,@@SysError,@@SysResult)'


dbo.sc_Modify выполняет dbo.sc_SetDocumentState который изменяет запись в ProcessFlag=3 и ProcessMode=0

А где же тут "Профайлер говорит, что основное время выполнения этой процедуры из приложения занимает тысячи sp_cursorfetch." ?
6 янв 14, 17:39    [15381802]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Sergey Sizov,

Аналогично и в приложениях
6 янв 14, 17:49    [15381844]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

Откуда:
Сообщений: 104760
VadymA
Аналогично и в приложениях

Что вот так прямо в тексте приложения нативный TSQL код ?
И что же это за язык программирования, где можно писать на TSQL ?
6 янв 14, 17:51    [15381857]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

Смотрю профайлером на линкованный сервер.
При выполнении этого кода из QA никаких sp_cursorfetch.

А если из приложения:

В профайлере
declare @p1 int
set @p1=180150453
declare @p3 int
set @p3=1
declare @p4 int
set @p4=16388
declare @p5 int
set @p5=470790
exec sp_cursoropen @p1 output,N'select * from server1.db.dbo.table_1',@p3 output,@p4 output,@p5 output
select @p1, @p3, @p4, @p5

и более 5000
exec sp_cursorfetch 180150451,16,1,1
6 янв 14, 17:54    [15381866]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1558
VadymA
Sergey Sizov,

Аналогично и в приложениях
То есть Вы встроили вызов DBCC USEROPTIONS в приложение прямо перед вызовом exec dbo.sc_Modify и результат совершенно одинаковый с результатом вызова DBCC USEROPTIONS в QA?
6 янв 14, 17:54    [15381873]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

Откуда:
Сообщений: 104760
VadymA
Смотрю профайлером на линкованный сервер.

Еще раз вопрос - как вашем клиентском приложении организован вызов процедуры ?
6 янв 14, 17:55    [15381875]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

В приложении есть возможность выполнить SQL код
6 янв 14, 17:55    [15381880]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

Откуда:
Сообщений: 104760
VadymA
В приложении есть возможность выполнить SQL код

Да что вы говорите. Т.е. ваше приложение - это sql server ?
6 янв 14, 17:57    [15381889]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

Если бы приложение было мое....

Попробую разобраться, но скорее всего ничего не получится.
Это консольное вин32 приложение
6 янв 14, 18:00    [15381895]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

Вы меня не правильно поняли:-)
В приложении есть возможность отправить SQL Query на сервер и получить результат)
6 янв 14, 18:02    [15381901]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
Glory
Member

Откуда:
Сообщений: 104760
VadymA
В приложении есть возможность отправить SQL Query на сервер и получить результат)

Разумеется есть. Вот только делать это можно по-разному.
Что ваше приложение отправляет на локальный сервер, а не на линкованный ?
6 янв 14, 18:12    [15381931]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
Glory,

Я наверное не совсем Вас понимаю. В профайлере вижу только
SQL:BatchStarting DBCC USEROPTIONS
SQL:BatchCompleted DBCC USEROPTIONS

Если Вы про процедуру, то только то, что я привел выше.
(это все на локальный сервер)

Если Вы про что то другое, то у меня исходников приложения нет. Или же я не понимаю/не знаю как посмотреть.
6 янв 14, 18:35    [15382001]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
iap
Member

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

Ваша программа в состоянии послать на сервер UPDATE [View] SET ... или нет?
Если не в состоянии, то при чём здесь сервер?
Скрипты создания таблиц с констрейнтами можете показать?
Может, VIEW и не секционированная вовсе?


P.S. Вот когда-то мне пришлось иметь дело с ERP PeopleSoft (оно же J.D.Edwards) EnterpriseOne (не дай бог никому!).
Это "чудо" ВСЕ запросы на MSSQL выполняло через sp_cursorfetch.
И никакого выхода в этом случае не было.
Так реализовывалась постраничная выборка...
6 янв 14, 19:00    [15382086]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
VadymA
Guest
VadymA,

Всем спасибо за помощь, проблему решил

ALTER DATABASE [DB] SET AUTO_CREATE_STATISTICS ON WITH NO_WAIT
GO
ALTER DATABASE [DB] SET AUTO_UPDATE_STATISTICS ON WITH NO_WAIT
GO
ALTER DATABASE [DB] SET AUTO_UPDATE_STATISTICS_ASYNC ON WITH NO_WAIT
GO
6 янв 14, 23:54    [15382946]     Ответить | Цитировать Сообщить модератору
 Re: Linked server и обновляемая партиционированная вью  [new]
aleks2
Guest
VadymA
VadymA,

Всем спасибо за помощь, проблему решил

ALTER DATABASE [DB] SET AUTO_CREATE_STATISTICS ON WITH NO_WAIT
GO
ALTER DATABASE [DB] SET AUTO_UPDATE_STATISTICS ON WITH NO_WAIT
GO
ALTER DATABASE [DB] SET AUTO_UPDATE_STATISTICS_ASYNC ON WITH NO_WAIT
GO


Шаман живет в глухой тайге!...

ЗЫ. Бубен он знатный нашел.
7 янв 14, 10:54    [15383465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить