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

Откуда:
Сообщений: 167
Привет всем

Пытаюсь разобраться с partitioned view я наткнулся на странную вещь.
CREATE TABLE tblInterval_05
(
  IntervalId UNIQUEIDENTIFIER NOT NULL
 ,Payload VARCHAR(50) NOT NULL
 ,ValidFrom DATETIME NOT NULL
 ,ValidTill DATETIME NOT NULL
 ,CONSTRAINT PK_Interval_05
    PRIMARY KEY ( ValidFrom, IntervalId )
 ,CONSTRAINT CK_Interval_05_Partition
    CHECK ( ValidFrom BETWEEN '20130501' AND '20130531' )
 ,CONSTRAINT CK_Interval_05_Range
    CHECK ( ValidFrom <= ValidTill )
)
CREATE TABLE tblInterval_06
(
  IntervalId UNIQUEIDENTIFIER NOT NULL
 ,Payload VARCHAR(50) NOT NULL
 ,ValidFrom DATETIME NOT NULL
 ,ValidTill DATETIME NOT NULL
 ,CONSTRAINT PK_Interval_06
    PRIMARY KEY ( ValidFrom, IntervalId )
 ,CONSTRAINT CK_Interval_06_Partition
    CHECK ( ValidFrom BETWEEN '20130601' AND '20130630' )
 ,CONSTRAINT CK_Interval_06_Range
    CHECK ( ValidFrom <= ValidTill )
)
CREATE TABLE tblInterval_07
(
  IntervalId UNIQUEIDENTIFIER NOT NULL
 ,Payload VARCHAR(50) NOT NULL
 ,ValidFrom DATETIME NOT NULL
 ,ValidTill DATETIME NOT NULL
 ,CONSTRAINT PK_Interval_07
    PRIMARY KEY ( ValidFrom, IntervalId )
 ,CONSTRAINT CK_Interval_07_Partition
    CHECK ( ValidFrom BETWEEN '20130701' AND '20130731' )
 ,CONSTRAINT CK_Interval_07_Range
    CHECK ( ValidFrom <= ValidTill )
)
CREATE VIEW vwInterval
AS 
  SELECT * FROM tblInterval_05
  UNION ALL
  SELECT * FROM tblInterval_06
  UNION ALL
  SELECT * FROM tblInterval_07
GO

Теперь вставляем запись
INSERT 
  INTO vwInterval
       ( IntervalId
        ,Payload
        ,ValidFrom
        ,ValidTill
       )
  SELECT NEWID(), 'Jeff', '20130515', '20130520'

И наблюдаем вот какой план
Картинка с другого сайта.

Вопрос: зачем там три раза clustered index insert?
Запись вставляеся в правильную таблицу, тут вопросов нет, но в реале у меня будет десяток таблиц по несколько миллионов записей в каждой, и если все десять индексов будут сканироваться при вставке, то тормоза обеспечены.
15 авг 13, 13:23    [14712782]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Гость333
Member

Откуда:
Сообщений: 3683
SergASh
и если все десять индексов будут сканироваться при вставке, то тормоза обеспечены.

Вы смотрели STATISTICS IO для запроса вставки?
15 авг 13, 13:33    [14712844]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Glory
Member

Откуда:
Сообщений: 104760
На скриншоте переменные @1, @2, @3, а не константы
Как оптимизатор заранее узнает, в какую секцию будет добавление ?
15 авг 13, 13:36    [14712874]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
SergASh
Member

Откуда:
Сообщений: 167
Glory
На скриншоте переменные @1, @2, @3, а не константы


Я привел полный текст запроса, который порождает указанный план. Вы можете выполнить его сами для проверки. Не знаю откуда там взялись переменные, тоже удивился.
15 авг 13, 13:42    [14712937]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Glory
Member

Откуда:
Сообщений: 104760
SergASh
Я привел полный текст запроса, который порождает указанный план

Т.е. на скришоте неверный текст запроса что ли ?
15 авг 13, 13:45    [14712960]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
SergASh
Member

Откуда:
Сообщений: 167
Гость333
Вы смотрели STATISTICS IO для запроса вставки?

Я пока только пытаюсь понять, помогут ли мне partitioned view или нет. Сейчас все в одной таблице. Так что смотреть особо некуда
15 авг 13, 13:45    [14712964]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
SergASh
Member

Откуда:
Сообщений: 167
Glory
SergASh
Я привел полный текст запроса, который порождает указанный план

Т.е. на скришоте неверный текст запроса что ли ?


Вот выполните запрос, он же приведен, и увидите тот же план, что я привел на скриншоте. Не знаю как еще яснее это сказать.
15 авг 13, 13:46    [14712976]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
xcvnnn
Guest
SergASh,

instead of trigger?
15 авг 13, 13:47    [14712980]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Glory
Member

Откуда:
Сообщений: 104760
SergASh
Вот выполните запрос, он же приведен, и увидите тот же план, что я привел на скриншоте. Не знаю как еще яснее это сказать.

Вы правы. Студия отображает переменные
15 авг 13, 13:51    [14713025]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Гость333
Member

Откуда:
Сообщений: 3683
SergASh
Гость333
Вы смотрели STATISTICS IO для запроса вставки?

Я пока только пытаюсь понять, помогут ли мне partitioned view или нет. Сейчас все в одной таблице. Так что смотреть особо некуда

Так у вас даже готовые скрипты есть :-) Осталось только добавить SET STATISTICS IO ON перед вставкой.
У меня так получилось:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'tblInterval_05'. Scan count 0, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

То есть никаких обращений к не нужным для этого запроса таблицам tblInterval_06 и tblInterval_07.
15 авг 13, 13:52    [14713031]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
xcvnnn
Guest
SergASh,

посмотрите в предикаты ассертов

и

set statistics io on

INSERT 
  INTO vwInterval
       ( IntervalId
        ,Payload
        ,ValidFrom
        ,ValidTill
       )
  SELECT NEWID(), 'Jeff', '20130615', '20130620'
set statistics io off


Таблица "Worktable". Число просмотров 0, логических чтений 0, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.
Таблица "tblInterval_06". Число просмотров 0, логических чтений 2, физических чтений 0, упреждающих чтений 0, lob логических чтений 0, lob физических чтений 0, lob упреждающих чтений 0.

(1 row(s) affected)

(1 row(s) affected)
15 авг 13, 13:52    [14713034]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
SergASh
Member

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

Интересно, что если смотреть Estimated Execution Plan, то там котстанты, а если Actual, то переменные.
Непонятно, правда, какое это имеет отношение к вопросу, который я тут пытаюсь выяснить.
15 авг 13, 13:54    [14713051]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Гость333
Member

Откуда:
Сообщений: 3683
SergASh
Интересно, что если смотреть Estimated Execution Plan, то там котстанты, а если Actual, то переменные.

Параметризация запроса.

SergASh
Непонятно, правда, какое это имеет отношение к вопросу, который я тут пытаюсь выяснить.

Никакого не имеет :-)
15 авг 13, 13:57    [14713076]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Glory
Member

Откуда:
Сообщений: 104760
SergASh
Непонятно, правда, какое это имеет отношение к вопросу, который я тут пытаюсь выяснить.

К тому, что для переменных план строится для общего случая.
Потому что значение переменной неизвестно
15 авг 13, 13:58    [14713083]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
SergASh
Непонятно, правда, какое это имеет отношение к вопросу, который я тут пытаюсь выяснить.

Никакого не имеет :-)

А, сорри, ваш вопрос был "Вопрос: зачем там три раза clustered index insert?"
Тогда имеет непосредственное отношение :-)
15 авг 13, 14:00    [14713111]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
refwe
Guest
SergASh,

Switch

http://technet.microsoft.com/en-us/library/ms187852(v=sql.105).aspx

Switch is a special type of concatenation iterator that has n inputs. An expression is associated with each Switch operator. Depending on the return value of the expression (between 0 and n-1), Switch copies the appropriate input stream to the output stream.


с ним у тебя предикат Ptn1023 который вычисляется во внешней ветке nested loops

Scalar Operator(CASE WHEN [Expr1021]>='2013-05-01 00:00:00.000' AND [Expr1021]<='2013-05-31 00:00:00.000' THEN (0) ELSE CASE WHEN [Expr1021]>='2013-06-01 00:00:00.000' AND [Expr1021]<='2013-06-30 00:00:00.000' THEN (1) ELSE CASE WHEN [Expr1021]>='2013-07-01 00:00:00.000' AND [Expr1021]<='2013-07-31 00:00:00.000' THEN (2) ELSE NULL END END END)

оно по номеру определяет в какую мироносицу пихать.
15 авг 13, 14:03    [14713134]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про вставку в partitioned view  [new]
SergASh
Member

Откуда:
Сообщений: 167
Всем спасибо.
SET STATISTICS IO ON открыло мне глаза :)
16 авг 13, 17:09    [14719879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить