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

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
имеется таблица на нескольких серверах


/****** Object: Table [dbo].[bn_Repl_unionTable] Script Date: 05/14/2012 17:07:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[bn_Repl_unionTable](
[srv] [varchar](128) NOT NULL,
[vcode] [int] NOT NULL,
[tsqlstr] [varchar](8000) NULL,
CONSTRAINT [PK_bn_Repl_unionTable] PRIMARY KEY NONCLUSTERED
(
[srv] ASC,
[vcode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 70) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING ON
GO
ALTER TABLE [dbo].[bn_Repl_unionTable] WITH CHECK ADD CONSTRAINT [DF__bn_Repl_uni__srv__4CB57556] CHECK (([srv]>='lexserv8' AND [srv]<='lexserv8'))
GO
ALTER TABLE [dbo].[bn_Repl_unionTable] CHECK CONSTRAINT [DF__bn_Repl_uni__srv__4CB57556]



изменения в строке чека
ALTER TABLE [dbo].[bn_Repl_unionTable] WITH CHECK ADD CONSTRAINT [DF__bn_Repl_uni__srv__4CB57556] CHECK (([srv]>='lexserv1' AND [srv]<='lexserv1'))


имеем секционированное представление

alter view all_bn_Repl_unionTable as select * from [bn_Repl_unionTable]
union all select top 1 * from lexserv8.aupbneft.dbo.[bn_Repl_unionTable]
union all select top 1 * from lexserv16.BN_DOB.dbo.[bn_Repl_unionTable]


Select отрабатывает нормально, из план выполнения видно что обращение идет к нужным секциям.
Проблема со вставкой

insert into all_bn_Repl_unionTable (srv,vcode,tsqlstr) values ('lexserv1',3,'Примечание')

Msg 4406, Level 16, State 1, Line 1
Update or insert of view or function 'all_bn_Repl_unionTable' failed because it contains a derived or constant field.
14 май 12, 15:23    [12550755]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
step_ks
Member

Откуда:
Сообщений: 936
а без top 1 ?
14 май 12, 15:55    [12551071]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Пишите триггер instead of insert.
14 май 12, 15:56    [12551087]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
за TOP1 1 спасибо. ускорить хотел, одновременно работаю только с одной записью каждого удаленного сервера. вроде заработало.
15 май 12, 06:37    [12553892]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
step_ks
Member

Откуда:
Сообщений: 936
Хм, перечитал несколько раз
CREATE VIEW
Modifying Data in Partitioned Views
и не нашел упоминания TOP в ограничениях для использования INSERT для partitioned view.
15 май 12, 08:42    [12554028]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Читатель неместный
Guest
Stilet
Select отрабатывает нормально, из план выполнения видно что обращение идет к нужным секциям.

а при недоступности любого из серверов эта конструкция рухнет (в ошибку), даже если по условию запроса обращение идет к рабочему серверу.
...на2005м, правда возможно есть какие то параметры сервера, влиюящие на выполнение запроса при недоступности сервера- не знаю.
15 май 12, 14:14    [12556606]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
новая неприятность. Хотел проверить паралельность апдейтов. на всех серверах повесил тригер
Create TRIGGER trgIns_bn_Repl_unionTable
ON dbo.bn_Repl_unionTable
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
waitfor delay '00:00:10'
-- Insert statements for trigger here

END


по идее, время выполнения апдейта, с учетом распаралеливания должно равняться 10 секундам, независимо от числа затрагиваемых секций., а по факту оно равно=10*(полное количество секций)

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

может кто нибудь сказать почему все секции отрабатывают последовательно и почему отрабатывают тригера задержки на секциях не вовлеченных в апдейт ?
16 май 12, 07:10    [12560098]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stilet
распаралеливание на сервере стот равным нулю, т.е. сервер просто обязан пустить апдейт в паралельных потоках.

Почему это вдруг обязан ?

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

Наверное так ваш апдейт написан
Вы план выполнения смотрели ?
16 май 12, 08:13    [12560177]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
любая из этих строк выполняется 30 сек, SRV поле секционирования
update all_bn_Repl_unionTable set [tsqlstr]='123' where srv in ('lexserv1','lexserv8','lexserv16')
update all_bn_Repl_unionTable set [tsqlstr]='123' where srv in ('lexserv1','lexserv8')
update all_bn_Repl_unionTable set [tsqlstr]='123' where srv in ('lexserv1')
update all_bn_Repl_unionTable set [tsqlstr]='123'
16 май 12, 13:04    [12562505]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
invm
Member

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

1. Триггер вам не нужен. Все необходимая информация есть в плане выполнения, который вы скрываете.
2. Триггер срабатывает на операцию, поэтому в нем необходимо проверять @@rowcount, чтобы убедиться в наличии изменений в данных.
16 май 12, 13:23    [12562695]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
Вот план выполнения, как я понимаю сервер пытается провести апдейт на всех распределенных серверах. Но даже если так, задержка в тригере ровно 10 секунд, при паралельном запуске апдейта на всех серверах общая задержка должна остаться примерно равной 10 сек + какие то накладные расходы на распаралеливание.

К сообщению приложен файл. Размер - 22Kb
17 май 12, 06:41    [12566900]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
причем если выполняем select то отрабатывают только нужные секции

К сообщению приложен файл. Размер - 19Kb
17 май 12, 06:46    [12566904]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stilet
при паралельном запуске апдейта на всех серверах

Вот с чего вы решили, что на всех серверах апдейт запускается параллельно то ?
17 май 12, 08:02    [12567002]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Stilet
Member

Откуда: УФА, БАШКОРТОСТАН
Сообщений: 411
Просто предположил, что раз везде пишут что при использовании распределенных view идет ускорние выборок, значит данные обрабатываются паралельно.
18 май 12, 06:19    [12573976]     Ответить | Цитировать Сообщить модератору
 Re: секционированное представление  [new]
Glory
Member

Откуда:
Сообщений: 104751
Stilet
Просто предположил, что раз везде пишут что при использовании распределенных view идет ускорние выборок, значит данные обрабатываются паралельно.

Ускорение секционированных представлений - в уменьшении i/o за счет работы с отдельными секциями, а не всеми таблицами
Кроме того выборка и изменение данных - это не одно и тоже
18 май 12, 08:10    [12574093]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить