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

Откуда:
Сообщений: 31
Доброго дня.
Изучаю создание индексов, пример кода
USE ApressFinancial
GO
CREATE UNIQUE CLUSTERED INDEX IX_TransactionTypes
ON TransactionDetails.TransactionTypes
(
TransactionTypeId ASC )
WITH (STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = ON,
DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = ON,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
GO

Получил ошибку:
Msg 1712, Level 16, State 1, Line 8
Online index operations can only be performed in Enterprise edition of SQL Server.


Да, у меня Standard edition. Поменял на ONLINE = OFF, скрипт исполнился. Пошёл читать за что этот параметр отвечает, в частности в статье CREATE INDEX (Transact-SQL) на MSDN есть подробное, но сложное сейчас для меня описание:

+

ONLINE = { ON | OFF }

Определяет, будут ли базовые таблицы и связанные индексы доступны для запросов и изменения данных во время операций с индексами.Значение по умолчанию — OFF.

ON

Долгосрочные блокировки таблицы не поддерживаются во время операций с индексами.Во время главной фазы операций с индексами только блокировка с намерением совмещаемого доступа (IS) удерживается в исходной таблице.Это включает запросы или обновления применительно к обрабатываемой базовой таблице и индексам.В начале операции совмещаемая блокировка (S) удерживается на исходном объекте в течение очень короткого времени.В конце операции на источнике на короткое время удерживается совмещаемая блокировка (S), если создается некластеризованный индекс. Если в режиме в сети создается или удаляется кластеризованный индекс и, если перестраивается кластеризованный или некластеризованный индекс, удерживается блокировка SCH-M (изменения схемы).При создании индекса для временной локальной таблицы параметр ONLINE не может принимать значение ON.
OFF

Блокировки таблиц применяются во время выполнения операций с индексами.Блокировку изменения схемы (Sch-M) в таблице получает операция с индексами вне сети, которая создает, перестраивает или удаляет кластеризованный индекс либо перестраивает или удаляет некластеризованный индекс.Это предотвращает доступ к базовой таблице всех пользователей во время операции.Операция с индексами вне сети, создающая некластеризованный индекс, получает совмещаемую блокировку (S) в таблице.Это запрещает проводить обновления базовой таблицы, но разрешает проводить операции чтения, например инструкции SELECT.

Т.е. как я понял, поддержка online перестроения индексов подразумевает доступность БД на внесение изменение во время перестроения индексов, и всё? А в версии Standard такого нет, и просто придётся подождать со своими alter, insert и др. правками.
3 дек 15, 16:11    [18509294]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
Владислав Колосов
Member

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

онлайн подразумевает работу пользователей с одновременным выполнением индексирования.
3 дек 15, 16:21    [18509365]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Arvalon
Т.е. как я понял, поддержка online перестроения индексов подразумевает доступность БД на внесение изменение во время перестроения индексов, и всё? А в версии Standard такого нет, и просто придётся подождать со своими alter, insert и др. правками.

Не усложняйте.
Поддержка online подразумевает наличие определенной редакции.
3 дек 15, 16:22    [18509370]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
o-o
Guest
What is the difference between OFFLINE and ONLINE index rebuild in SQL Server?
Remus Rusanu
In ONLINE mode the new index is built while the old index is accessible to reads and writes.
any update on the old index will also get applied to the new index.
An antimatter column is used to track possible conflicts between the updates and the rebuild
(ie. delete of a row which was not yet copied). See Online Index Operations.
When the process is completed the table is locked for a brief period and the new index replaces the old index.
If the index contains LOB columns, ONLINE operations are not supported in SQL Server 2005/2008/R2.

In OFFLINE mode the table is locked upfront for any read or write, and then the new index gets built from the old index,
while holding a lock on the table.
No read or write operation is permitted on the table while the index is being rebuilt.
Only when the operation is done is the lock on the table released and reads and writes are allowed again.

Note that in SQL Server 2012 the restriction on LOBs was lifted,
see Online Index Operations for indexes containing LOB columns.

причем движок сервера одинаков, что у Экспресса, что у Энтерпрайза.
только в Энтерпрайзе доступно все, а в Эскпрессе(Стандарде и т.д.) нет.
вы за страховку для машины платите?
базовая у всех одна (это Экспресс), но какие-то опции за какие-то деньги можно подключить.
вот и тут примерно так.
при покупке редакции вы оцениваете, какие опции за какие деньги будете иметь.
т.е. не "потом можно подключить", а сразу надо решить, какая редакция нужна
3 дек 15, 16:34    [18509453]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
к слову про "online"... если в индексе встречаются лобы (например, в кластерном индексе NVARCHAR(MAX), TEXT, IMAGE, ....), то online опцию использовать нельзя...

в 2012 это поправили для всех типов кроме устаревших:

CREATE TABLE t1
(
	a TEXT,
	b INT PRIMARY KEY
)

ALTER INDEX ALL ON t1 REBUILD WITH(ONLINE=ON)


Msg 2725, Level 16, State 2, Line 13
An online operation cannot be performed for index 'PK__t1__3BD0198FEF55DF86' because the index contains column 'a' of data type text, ntext, image or FILESTREAM. For a non-clustered index, the column could be an include column of the index. For a clustered index, the column could be any column of the table. If DROP_EXISTING is used, the column could be part of a new or old index. The operation must be performed offline.
3 дек 15, 17:26    [18509829]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
o-o
Guest
AlanDenton
к слову про "online"... если в индексе встречаются лобы (например, в кластерном индексе NVARCHAR(MAX), TEXT, IMAGE, ....), то online опцию использовать нельзя...

то ваще, как на инглише, так никто не читает
o-o
What is the difference between OFFLINE and ONLINE index rebuild in SQL Server?
Remus Rusanu
In ONLINE mode the new index is built while the old index is accessible to reads and writes.
any update on the old index will also get applied to the new index.
An antimatter column is used to track possible conflicts between the updates and the rebuild
(ie. delete of a row which was not yet copied). See Online Index Operations.
When the process is completed the table is locked for a brief period and the new index replaces the old index.
If the index contains LOB columns, ONLINE operations are not supported in SQL Server 2005/2008/R2.

In OFFLINE mode the table is locked upfront for any read or write, and then the new index gets built from the old index,
while holding a lock on the table.
No read or write operation is permitted on the table while the index is being rebuilt.
Only when the operation is done is the lock on the table released and reads and writes are allowed again.

Note that in SQL Server 2012 the restriction on LOBs was lifted,
see Online Index Operations for indexes containing LOB columns.

3 дек 15, 17:30    [18509864]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
"Note that in SQL Server 2012 the restriction on LOBs was lifted"

а про депрекейтед типы тут не сказано ;)
3 дек 15, 17:49    [18509989]     Ответить | Цитировать Сообщить модератору
 Re: Парметр ONLINE при создании индексов.  [new]
o-o
Guest
AlanDenton,

там в оригинале сразу за этим следует ссылка на то, где самим прочесть подробности:
Remus Rusanu
Note that in SQL Server 2012 the restriction on LOBs was lifted,
see Online Index Operations for indexes containing LOB columns

но мне да, лениво было еще и ссылку оформить
3 дек 15, 18:04    [18510082]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить