SQL Server 2014: ONLINE операции над отдельными секциями секционированных объектов

by Alexey Knyazev 10. июля 2013 00:03

SQL Server 2014

Продолжу серию заметок о новых возможностях SQL Server 2014. И сегодня поговорим об ещё одной приятной конструкции - ONLINE перестроение отдельных секций секционированных объектов (таблиц или индексов).

Напомню, что некоторые редакции SQL Server (Enterprise, Evaluation, Developer) позволяют выполнять ряд операций в режиме ONLINE. Основное преимущество этого режима - это то, что в момент создания/изменения индекса мы можем продолжать работать с данными, в том числе вносить изменения в эти данные. Происходит это за счёт того, что блокировка схемы (Sch-M) не удерживается на всём этапе создания/изменения. С более полным списком возможностей, поддерживаемых различными выпусками, можно ознакомиться по ссылке: http://msdn.microsoft.com/ru-ru/library/cc645993.aspx


Действительно, возможность очень полезная, особенно, если у вас доступность данных - это одно из ключевых требований к системе. Но до версии SQL Server 2014 у нас возникает ряд ограничений, если мы работаем с секционированными объектами. Основное ограничение в том, что мы не можем проводить ONLINE операции над отдельно взятой секцией, а только над всем объектом целиком.

При попытке выполнить инструкцию:

alter table [MyTable] rebuild partition = 1 with (online = on)

мы получим исключение:

'online' is not a recognized ALTER INDEX REBUILD PARTITION option


Без указания режима ONLINE для секции мы получаем блокировку Sch-M на всю таблицу, что, согласитесь не приятно. При этом мы можем изменить режим эскалации (LOCK_ESCALATION) для нашей таблицы в надежде избавиться от укрупнения блокировки до уровня таблицы, т.к. в BOL сказано, что по умолчанию укрупнение стоит = TABLE, а для секционированной таблицы мы можем задать режим AUTO:


В секционированных таблицах допускается укрупнение блокировки до секций. После укрупнения блокировки до уровня секции дальнейшее укрупнение до гранулярности TABLE выполняться не будет.


Но для операций REBUILD это правило не действует и мы все-равно получаем блокировку уровня таблицы. И в том же BOL есть об этом упоминание:

Перестроение секционированного индекса нельзя выполнять в режиме в сети(ONLINE). Во время этой операции вся таблица блокируется.


А теперь представьте, что нам необходимо провести сжатие данных (data_compression) лишь в одной из секций, а при этой операции мы заблокируем всю таблицу. На эту тему даже есть фидбэк на официальном сайте: http://connect.microsoft.com/SQLServer/feedback/details/709976/table-lock-during-partition-compression.


И выдержка из ответа:

We are currently working on supporting Online Index Rebuild for a single partition and hopefully this will be available in our next release.


И это случилось! Поддержка ONLINE операций на уровне одной секции появилась в SQL Server 2014.

[Ещё]

Tags: , ,

SQL Server

SQL Server 2014 CTP1: новые системные объекты

by Alexey Knyazev 9. июля 2013 02:04

SQL Server 2014

На данный момент не так много информации в сети о всем изменениях, которые нас ждут в SQL Server 2014. При этом не стоит забывать, что это всего лишь первая публичная версия СТР (Community Technology Preview), а это значит, что до RTM (Release To Manufacturing) нас ещё ждёт очень много сюрпризов.

Но прежде, чем мы увидим публичное описание новых объектов, мы можем уже сейчас сравнить список системных объектов в SQL Server 2014 CTP1 со списком системных объектов в SQL Server 2014 SP1.

Для этого я прилинкую к экземпляру SQL Server 2014 экземпляр с SQL Server 2012 SP1. В моём случаи это именованный экземпляр: [ALOHAPC\SQL2012].


Теперь мы можем сравнить какие объекты появились в системном представлении sys.all_objects, а какие исчезли.

[Ещё]

Tags: ,

SQL Server

SQL Server 2014: Параллельная операция SELECT INTO

by Alexey Knyazev 30. июня 2013 01:07

SQL Server 2014Совсем недавно в общем доступе появилась версия SQL Server 2014 CTP1 - http://technet.microsoft.com/ru-ru/evalcenter/dn205290.aspx.

Microsoft SQL Server 2014 представляет на рынке новые возможности памяти, встроенные в основную базу данных, включая встроенную в память оперативную обработку транзакций (OLTP), дополняющую существующие возможности бизнес-аналитики и хранения данных в памяти, для создания самого многофункционального решения хранящейся в памяти базы данных. SQL Server 2014 также предлагает новые облачные возможности, позволяющие упростить перемещение существующих баз данных SQL в облако и открыть для себя новые сценарии гибридного развертывания.

Поэтому пора начать смотреть, что нового, что интересного нас ждёт в новой версии самой популярной промышленной СУБД.
Говоря о новинках стоит обратиться к ряду документов, которые так же появились в общем доступе:

Но обо всём по порядку, и начнём с одной очень интересной возможности, которая появилась в SQL Server 2014 - это параллельное выполнение операции SELECT...INTO.

[Ещё]

Tags: ,

SQL Server

SQL Server 2012 System Views Map

by Alexey Knyazev 31. мая 2013 23:59

Долгожданная схема связей системных объектов SQL Server 2012:



Прямая ссылка на www.microsoft.com/downloads

Для SQL Server 2008R2, 2008, 2005 и 2000 System Views Map можно найти в одном из моих прошлых постов: http://t-sql.ru/post/SystemViewsMap2008R2.aspx

[Ещё]

Tags: ,

SQL Server

xp_readerrorlog

by Alexey Knyazev 18. апреля 2013 23:12
Сегодня я расскажу про недокументированные расширенные хранимые процедуры (Extended Stored Procedures) для работы с журналом ошибок SQL Server и SQL Server Agent.
На самом деле при просмотре журнала SQL Server Logs через SSMS (SQL Server Management Studio) идёт обращение именно к этим двум основным процедурам (xp_readerrorlog и xp_enumerrorlogs), хоть и не на прямую, а через системные интерфейсные процедуры.
Особое внимание я уделю описанию входных параметрам этих недокументированных процедур.

[Ещё]

Tags:

SQL Server

Аудит в SQL Server 2012. Что нового!?

by Alexey Knyazev 23. марта 2013 19:40

21 марта 2013 года прошла вторая онлайн конференция "24 Hours of PASS. Russian Edition". Это крупнейшая русскоязычная конференция, посвященная SQL Server. Доклад, который читал я, был как раз про аудит. В рамках своего блога я решил осветить, что нового появилось в SQL Server 2012 касаемо аудита. Так же в конце этой статьи я выложу презентацию и скрипты из своего доклада, а чуть позже должна будет появиться запись.

Эту статью я хочу начать с перечисления всех инструментов, которые позволяют отслеживать события, происходящие на вашем сервере баз данных. У вас, как всегда, есть возможность использовать, как конкретную возможность для "слежки", так и комбинировать решения. Но в основном в этой заметке я буду повествовать про подсистему аудита (SQL Server Audit), которая появилась в SQL Server 2008 и дополнилась рядом интересных возможностей в SQL Server 2012.

Но обо всём по порядку…

[Ещё]

Tags: , ,

SQL Server

Секционирование, как способ обеспечения высокой доступности данных

by Alexey Knyazev 14. февраля 2013 00:51
Секционирование (partitions) - один из основных инструментов для обеспечения оптимальной работы с большим объёмом данных за счёт горизонтального масштабирования. Повышается управляемость и производительность, как модификации данных, так и запросы на выборку.
Кроме того, можно повысить производительность, применяя блокировки на уровне секций, а не всей таблицы. Это может уменьшить количество конфликтов блокировок для таблицы.

Но не все обращают внимание на ещё одну уникальную возможность, которую предоставляет секционирование, а именно: обеспечение высокой доступности данных. Сокращает время восстановления после сбоев.

[Ещё]

Tags: , ,

SQL Server

Пошаговая инструкция восстановления повреждённой БД

by Alexey Knyazev 31. января 2013 01:32

Tags: ,

SQL Server

SSIS: ReplaceNull

by Alexey Knyazev 21. декабря 2012 20:15

Одной из частовозникающих задач в пакетах SSIS является замена значений NULL на какое-то конкретное значение. К сожалению, прежде это была не совсем тривиальная задача, т.к. в Integration Services не было оператора аналогичного оператору ISNULL() в языке T-SQL. Точнее даже так: оператор такой есть, но работает он немного иначе.
ISNULL (SSIS) - Возвращает результат в виде логического выражения, в зависимости от того, имеет ли выражение значение NULL.

[Ещё]

Tags:

SQL Server

Баг: переключение секций через параметр при включенной репликации

by Alexey Knyazev 30. ноября 2012 21:33
Достаточно неприятная вещь, с которой пришлось столкнуться. Был вполне себе рабочий скрипт, который долгое время функционировал и не приносил никаких головных болей, пока не появилась необходимость реплицировать несколько справочников...

Но, давайте по порядку:

[Ещё]

Tags: , , ,

SQL Server