Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
создаю таблицу по SELECT INTO,
затем
	ALTER table T 
	ADD CONSTRAINT [PK_T] PRIMARY KEY CLUSTERED 
	   ([FIELD1] ASC, [FIELD2] ASC)
	WITH (fillfactor = 100) ON [PS_PART]([FIELD1])

всего 20 млн. строк
создание индекса длится почти вдвое дольше, чем таблица заполняется.
зато если просто создать PK без секционирования,
то создается за половину времени заполнения таблицы.
почему так?

CREATE PARTITION FUNCTION [PF_PART](int) AS RANGE LEFT FOR VALUES (999999999)


реально всего 1 секция, потому что вообще секции ненужны,
сделано для того, чтоб реальную таблицу очень быстро подменять вновь созданной через switch partition.
я бы вообще не секционировала новую, а только бы повесила check constraint (20 sec!!!),
но забраковали, сказали им удобнее, чтоб она сразу была как новая секция.
почему тормозит, объяснить не могу, но пеняю именно на секционирование
14 мар 12, 16:31    [12247471]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

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

потому что при построении индекса для каждой записи проверяется условие секционирования.

А вообще мне побудительные мотивы непонятны. Просто переименовать вновь созданную не?
14 мар 12, 16:35    [12247511]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
vopros99
сделано для того, чтоб реальную таблицу очень быстро подменять вновь созданной через switch partition


вроде бы это и так доступно...
14 мар 12, 16:42    [12247587]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
При построении индекса ваши 20 млн. надо еще отсортировать. Или у вас кластерный _без_ секционирования строится быстрее, чем с секционированием?

Делайте таблицу сразу секционированной и ПК. Минимального протоколирования вставки можно, по идее, и в этом случае добиться.
14 мар 12, 16:43    [12247593]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
iljy,

даже в голову не пришло, сейчас узнаю, чем переименование не угодило
14 мар 12, 16:46    [12247629]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
Гавриленко Сергей Алексеевич
При построении индекса ваши 20 млн. надо еще отсортировать. Или у вас кластерный _без_ секционирования строится быстрее, чем с секционированием?



да, именно кластерный _без_ секционирования строится быстрее, чем с секционированием.
14 мар 12, 16:48    [12247646]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

Откуда:
Сообщений: 8711
vopros99
iljy,

даже в голову не пришло, сейчас узнаю, чем переименование не угодило

Я могу только один вариант представить: сложные права настроены и триггеры, может вьюшки еще, перенастраивать не хочется. Но тогда можно так сделать:
use tempdb
create table t1 (id int identity primary key, val int)
insert t1(val)
select number from master..spt_values
where type = 'P' and number between 1 and 1000

create table t2 (id int identity primary key, val int)
go

alter table t1 switch to t2
go
select * from t2
go

drop table t1 drop table t2
14 мар 12, 16:48    [12247652]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
iljy,

сказали именно что там куча всего навешана.
а про switch без секций впервые слышу, огромное спасибо.
будем пробовать
14 мар 12, 18:08    [12248359]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
простите, а где почитать про switch без секций?
мне гугл вываливает только секционирование
14 мар 12, 18:25    [12248451]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

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

где обычно - в БОЛ. Оно ничем принципиально от переключения секций не отличается.
14 мар 12, 18:48    [12248581]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
пардон за тупость, но все тот же ALTER TABLE?
с того как там написано, я думала что хоть один из участников должен быть секционирован.
наверное читаю предвзято...

a еще можно вопрос вдогонку?
переключение происходит мгновенно,
но если на момент переключения кто-то читал из старой таблицы (которую подменяем новой),
как будет происходить переключение, оно ждать будет пока дочитают?
или надо как-то предварительно таблицу блокировать?
14 мар 12, 19:24    [12248756]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

Откуда:
Сообщений: 8711
vopros99
пардон за тупость, но все тот же ALTER TABLE?
с того как там написано, я думала что хоть один из участников должен быть секционирован.
наверное читаю предвзято...

С чего вы сделали такой вывод? Там описано, что может быть источником, что может быть приемником. И там, и там может быть обычная таблица, и нигде не сказано, что обязательно долно быть секционирование
vopros99
a еще можно вопрос вдогонку?
переключение происходит мгновенно,
но если на момент переключения кто-то читал из старой таблицы (которую подменяем новой),
как будет происходить переключение, оно ждать будет пока дочитают?
или надо как-то предварительно таблицу блокировать?

Переключение требует наложения блокировки Sch-M, она ни с чем не совместима, т.е. операция переключения будет ждать.
14 мар 12, 19:33    [12248778]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
iljy
Переключение требует наложения блокировки Sch-M, она ни с чем не совместима, т.е. операция переключения будет ждать.


During the time that it is held, the Sch-M lock prevents concurrent access to the table.
правильно ли я понимаю, что только переключаемая таблица будет недоступной, а не вся схема? а можно ли как-то всю схему залочить?
надо будет переключить не 1 таблицу, а кучу, и из старых таблиц может быть чтение. и будет оч. нехорошо, если какой-то отчет, читающий с разных таблиц, прочтет данные из старой таблицы и из другой новойю это как-то можно порешать?
14 мар 12, 22:44    [12249404]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

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

выполняйте переключение всех таблиц в одной транзакции. Правда у вас будет весьма велика вероятность дедлока. В этом случае самое правильное - отключить всех пользователей, уронив базу в SINGLE_USER.
14 мар 12, 22:48    [12249416]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
vopros99
Guest
а если будут дедлоки, то жертвой же станут отчетники, да? они у нас только читают. это нам подходит, главное, чтоб не откатили переключение, но вроде ж дешевле читателей откатывать, их и выберет, правильно?
15 мар 12, 00:25    [12249809]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
iljy
Member

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

филосовский вопрос надо в любом случае проверять выполнение и при необходимости повторять.
15 мар 12, 01:11    [12249948]     Ответить | Цитировать Сообщить модератору
 Re: почему долго секционируется кластерный индекс (все в 1 секцию)  [new]
Crimean
Member

Откуда:
Сообщений: 13147
откатит того, кого решит дешевле откатить
15 мар 12, 01:19    [12249976]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить