Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Сразу прокомментирую. Честно говоря лень сейчас разбираться что работает для каких версий SQL. Поэтому буду благодарен если кто знает и подскажет.
Итак, что нужно. Для систем 24*7 необходимо реализовать качественное обслуживание индексов. Разумеется как составлять графики пересчета и т.п. я знаю. Интересует другое. Когда есть большой индекс и его нужно пересчитать без блокировки на изменение. Первый вопрос - реализовано ли это и если да то с какой версии? Какие ограничения?(режим совместимости БД и т.п.)
Для секционирования - тут вроде все понятно. Например если присутствует дата, то можно разбить правильно на группы и пересчитывать частями.
Насчет колумнари индексов - есть ли возможность изменять данные?(не помню - она будет в 14 сервере или уже есть?)

Теперь концептуально если нет - как можно обойти. Заменяем необходимую таблицу на копию. Разбиваем ее на две части постоянную и инкрементальную(туда пишутся триггером изменения), их объединяем вьюхой.(в этот момент проходит небольшая блокировка) Затем копируем постоянную таблицу и считаем для нее все индексы. Затем блокируем инкрементальную а т.е. изменения(небольшая блокировка) и сливаем все изменения в постоянную после чего переименуем рабочую а копию ренаймим в рабочую.(после чего дропаем старую версию) Вариант испытанный но не нравятся ограничения(например нужен уникальный индекс либо праймари кей, и еще некоторые). А также дополнительные накладные расходы.
Заранее благодарю.
1 сен 13, 10:49    [14780756]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 599
МуМу
Интересует другое. Когда есть большой индекс и его нужно пересчитать без блокировки на изменение. Первый вопрос - реализовано ли это и если да то с какой версии? Какие ограничения?(режим совместимости БД и т.п.)


Начиная с 2008 версии в Enterprise редакциях есть возможность выполнять перестройку и создание индексов без блокировок
опция ONLINE = { ON | OFF }
1 сен 13, 11:21    [14780780]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Уточню. Блокировка на чтение или на изменение тоже?
1 сен 13, 11:51    [14780827]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Кстати как там дела с эффективностью использования индексов(планов выполнения) с учетом доп. служебных полей версионности?
В контексте темы https://www.sql.ru/forum/1001011-a/podskazhite-sposob-zastavit-server-rabotat-24-7?hl=online on off
Я так понимаю методика пересчета онлайн концептуально аналогична той которую я описал.
1 сен 13, 12:05    [14780840]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Я так понял в текущей версии MSSQL поддержки изменений колумнари индексов нет
1 сен 13, 12:06    [14780841]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Andrey Sribnyak
Начиная с 2008 версии в Enterprise редакциях есть возможность выполнять перестройку и создание индексов без блокировок
опция ONLINE = { ON | OFF }

На самом деле такая возможность доступна, начиная с 2005 версии.
2 сен 13, 00:21    [14782125]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
Andrey Sribnyak
Начиная с 2008 версии в Enterprise редакциях есть возможность выполнять перестройку и создание индексов без блокировок
опция ONLINE = { ON | OFF }

На самом деле такая возможность доступна, начиная с 2005 версии.

Ну и, к сожалению, невозможно онлайн-перестроение одной секции секционированного индекса.
2 сен 13, 00:23    [14782130]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
МуМу
Насчет колумнари индексов - есть ли возможность изменять данные?(не помню - она будет в 14 сервере или уже есть?)

В MSSQL 2012 такой возможности нет.
В MSSQL 2014 появятся clustered colmnstore indexes, которые будут обновляемыми. Некластерные colmnstore индексы останутся не обновляемыми.
2 сен 13, 00:30    [14782145]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
ElenHim
Member

Откуда: Москва
Сообщений: 204
Гость333
МуМу
Насчет колумнари индексов - есть ли возможность изменять данные?(не помню - она будет в 14 сервере или уже есть?)

В MSSQL 2012 такой возможности нет.


Сторого говоря, это так.

Тем не менее, колумнстор индексы поддержиают секционирование, что позволяет невозбранно включать новые секции в таблицу, а при необходимости - выключать старые.
2 сен 13, 10:40    [14782835]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Не понял. Предположим ,у меня колумнари индекс по 5-и полям. Я хочу сделать апдейт одного из полей. У меня получится это сделать? При чем здесь секции?
2 сен 13, 11:33    [14783137]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
ElenHim
Member

Откуда: Москва
Сообщений: 204
1. Переключаете секцию из таблицы во временную
2. Апдейтите во временной таблице нужные поля
3. Переключаете секцию обратно в таблицу
4. Повторить по мере необходимости
5. Profit
2 сен 13, 14:18    [14784314]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
rralf
Member

Откуда:
Сообщений: 27
МуМу
Сразу прокомментирую. Честно говоря лень сейчас разбираться что работает для каких версий SQL. Поэтому буду благодарен если кто знает и подскажет.
Итак, что нужно. Для систем 24*7 необходимо реализовать качественное обслуживание индексов. Разумеется как составлять графики пересчета и т.п. я знаю. Интересует другое. Когда есть большой индекс и его нужно пересчитать без блокировки на изменение.


Что означает "пересчитать" ?
"drop/create" ?

МуМу
Первый вопрос - реализовано ли это и если да то с какой версии? Какие ограничения?(режим совместимости БД и т.п.)
Для секционирования - тут вроде все понятно. Например если присутствует дата, то можно разбить правильно на группы и пересчитывать частями.

для разбиения на партишки не обязательно "присутствие даты". необходим некий "критерий сегментирования" и в 99% случаев это дата :)


МуМу
Насчет колумнари индексов - есть ли возможность изменять данные?(не помню - она будет в 14 сервере или уже есть?)


с 2014

МуМу
Теперь концептуально если нет - как можно обойти. Заменяем необходимую таблицу на копию. Разбиваем ее на две части постоянную и инкрементальную(туда пишутся триггером изменения), их объединяем вьюхой.(в этот момент проходит небольшая блокировка) Затем копируем постоянную таблицу и считаем для нее все индексы. Затем блокируем инкрементальную а т.е. изменения(небольшая блокировка) и сливаем все изменения в постоянную после чего переименуем рабочую а копию ренаймим в рабочую.(после чего дропаем старую версию) Вариант испытанный но не нравятся ограничения(например нужен уникальный индекс либо праймари кей, и еще некоторые). А также дополнительные накладные расходы.


а зачем это все?
(представь что у тебя табличка в терабайт ;)

бьешь на партишки и "alter index XXX on <table> reorganize partition=<partitionID>"
7 сен 13, 01:36    [14807769]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
rralf
бьешь на партишки и "alter index XXX on <table> reorganize partition=<partitionID>"

ага...и куришь на блокировках... т.к. онлайн перестроение индексов на секциях работает только с SQL Server 2014
10 сен 13, 14:01    [14819927]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Еще один вопрос. Пересчет статистики. По идее он не должен блокировать вообще.(статистика является только подсказкой оптимизатору а не конечной инстанцией расположения страниц) Не должен блокировать изменения а тем более чтение. Тем не менее смутно помню что подобные ситуации были(сейчас буду перепроверять). Кто нибудь может прокомментировать? Какие могут быть блокировки при пересчете статистики? Как их избежать? (первое что приходит в голову, может на темп дб при определенных условиях)
10 сен 13, 14:51    [14820377]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
МуМу
Еще один вопрос. Пересчет статистики. По идее он не должен блокировать вообще.(статистика является только подсказкой оптимизатору а не конечной инстанцией расположения страниц) Не должен блокировать изменения а тем более чтение. Тем не менее смутно помню что подобные ситуации были(сейчас буду перепроверять). Кто нибудь может прокомментировать? Какие могут быть блокировки при пересчете статистики? Как их избежать? (первое что приходит в голову, может на темп дб при определенных условиях)


статистика собирается с хинтом READUNCOMMITTED, соответственно есть все шансы "повесить" таблицу... т.к. например блокировки sch-m и sch-s не совместимы...
10 сен 13, 15:15    [14820592]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Knyazev Alexey
rralf
бьешь на партишки и "alter index XXX on <table> reorganize partition=<partitionID>"

ага...и куришь на блокировках... т.к. онлайн перестроение индексов на секциях работает только с SQL Server 2014

Вы чего-то путаете... reorganize — это не перестроение, а дефрагментация индекса. Она всегда работает в онлайне.
10 сен 13, 15:24    [14820645]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Мда уж... Нашел в мониторинге. Висит блокировка на схема модификашион лок. :( А почему ей нужна статистика с таким хинтом? Можно ли это как то обойти?
10 сен 13, 15:27    [14820667]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Гость333
Knyazev Alexey
пропущено...

ага...и куришь на блокировках... т.к. онлайн перестроение индексов на секциях работает только с SQL Server 2014

Вы чего-то путаете... reorganize — это не перестроение, а дефрагментация индекса. Она всегда работает в онлайне.

...увидел ребилд, каким-то образом
10 сен 13, 15:27    [14820672]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Ну например, онлайн пересчет индексов по идее должен пересчитывать и статистику. Этого будет достаточно?
10 сен 13, 15:29    [14820691]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Гость333
Member

Откуда:
Сообщений: 3683
МуМу
Висит блокировка на схема модификашион лок. :( А почему ей нужна статистика с таким хинтом?

Где вы увидели такую блокировку? При пересчёте статистики (UPDATE STATISTICS) используется блокировка Sch-S (Schema Stability).
10 сен 13, 15:36    [14820741]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
То Гость333.
Я эту блокировку увидел в системе мониторинга. Могу показать скриншот, сам очень удивился. То есть она накладывает схема модификайшен и на ней потом висят схема стабилити. Сейчас вопрос исследую.
10 сен 13, 15:45    [14820809]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Вот скриншот

К сообщению приложен файл. Размер - 7Kb
10 сен 13, 15:49    [14820839]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Возникает вопрос нафига для расчета статистики такой уровень изоляции? Ну будет план запроса с учетом статистики изменений грязного чтения. Это же принципиально не повлияет. Может я чего то не знаю, возможно статистики используется где нибудь кроме оптимизации запросов?
10 сен 13, 15:59    [14820911]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
МуМу
Возникает вопрос нафига для расчета статистики такой уровень изоляции? Ну будет план запроса с учетом статистики изменений грязного чтения. Это же принципиально не повлияет. Может я чего то не знаю, возможно статистики используется где нибудь кроме оптимизации запросов?


Sch-M-UPD-STATS: Schema Modification Lock
-----------------------------------------
This is a non-blocking lock that is used by the system to ensure that
only one automatic UPDATE STATISTICS process is run against a table at
any given point in time. The sp_lock stored procedure will report this
lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M.
10 сен 13, 16:02    [14820959]     Ответить | Цитировать Сообщить модератору
 Re: Обслуживание индексов,секционирования для систем 24*7  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
у вас какая версия сиквела?
10 сен 13, 16:06    [14820999]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить