Очередная раздача книг по SQL Server (Microsoft_eBooks)

by Alexey Knyazev 11. июля 2014 13:51

Troubleshooting
SQL Server
AlwaysOn

5 Tips for a Smooth
SSIS Upgrade to
SQL Server 2012

A Hitchiker's Guide
to Microsoft StreamInsight
Queries

Data Mining Extensions
(DMX) Reference

Data Quality Services

High Availability
Solutions

Master Data Services

Monitor and Tune
for Performance
[Ещё]

Tags: , , ,

SQL Server

Database Engine Permissions (Постеры)

by Alexey Knyazev 1. июля 2014 17:59

Tags: , , ,

SQL Server

Секционированные представления и магические 64 таблицы

by Alexey Knyazev 30. июня 2014 17:31

Хочу показать на живом примере, как план запроса может меняться в зависимости от того, сколько таблиц фигурирует в секционированном представлении (или просто в запросе). При этом и производительность может существенно "просесть" на таких запросах. Пример из реальной жизни, но с тестовыми данными.

Ситуация воспроизводится на разных версиях SQL Server, в том числе и на версии SQL Server 2014.

[Ещё]

Tags: , ,

SQL Server

Индексы в табличных переменных

by Alexey Knyazev 9. апреля 2014 18:22

Сегодня я немного расскажу о том, как создать индексы на табличных переменных (это которые @table) в SQL Server 2014 и в ранних версиях. При этом я не буду останавливаться на том, зачем нужны индексы и не буду сравнивать табличные переменные с временными таблицами, т.к. на эту тему достаточно статей, например: http://www.sql-server-performance.com/2007/temp-tables-vs-variables/ или http://www.mssqltips.com/sqlservertip/2825/sql-server-temp-table-vs-table-variable-performance-testing/. При этом сразу оговорюсь, что одним из недостатков табличных переменных было именно отсутствие возможности явно создать индекс. Но давайте по порядку.

[Ещё]

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

Аудит в 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 30. ноября 2012 21:33
Достаточно неприятная вещь, с которой пришлось столкнуться. Был вполне себе рабочий скрипт, который долгое время функционировал и не приносил никаких головных болей, пока не появилась необходимость реплицировать несколько справочников...

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

[Ещё]

Tags: , , ,

SQL Server

Минимальное протоколирование. Индексы.

by Alexey Knyazev 30. сентября 2012 00:23
Минимальное протоколирование — это протоколирование только информации, необходимой для восстановления транзакции без поддержки восстановления на момент времени.
Эта особенность может быть очень полезна, когда необходимо сократить время на выполнение некоторых операций. Сегодня я хочу поговорить о минимальном протоколировании некоторых DDL-операции с индексом.

Минимально протоколируются следующие операции с индексами:
  • Операции CREATE INDEX (включая индексированные представления)
  • Операции ALTER INDEX REBUILD или DBCC DBREINDEX
  • Перестроение новой кучи DROP INDEX (если применимо)
[Ещё]

Tags: , , , , ,

SQL Server

READPAST и эскалация блокировок

by Alexey Knyazev 5. июня 2012 02:45
Сегодня я хочу поговорить о табличной подсказке READPAST, которая появилась впервые в SQL Server 2005. Эта подсказка указывает, что компонент Database Engine не считывает строки и страницы, заблокированные другими транзакциями. Если указан аргумент READPAST, то блокировки уровня строк будут пропускаться. Компонент Database Engine будет пропускать строки вместо блокировки текущей транзакции до тех пор, пока блокировки не будут сняты.

Например, предположим, что в таблице T1 есть один целочисленный столбец со значениями 1, 2, 3, 4, 5. Если транзакция A изменит значение 3 на 8, но еще не будет зафиксирована, то инструкция SELECT * FROM T1 (READPAST) возвратит значения 1, 2, 4, 5. Параметр READPAST главным образом используется для устранения конфликта блокировок при реализации рабочей очереди, использующей таблицу SQL Server. Средство чтения очереди, использующее аргумент READPAST, пропускает прошлые записи очереди, заблокированные другими транзакциями, до следующей доступной записи очереди, не дожидаясь, пока другие транзакции снимут свои блокировки.

Аргумент READPAST можно задать для любой таблицы, к которой обращается инструкция UPDATE или DELETE, и к любой таблице, на которую ссылается предложение FROM. Если аргумент READPAST задан в инструкции UPDATE, он применяется только при считывании данных для идентификации подлежащих обновлению записей вне зависимости от того, где он указан в инструкции. Аргумент READPAST для таблиц из предложения INTO инструкции INSERT задать нельзя. Операции чтения, в которых используется аргумент READPAST, не блокируются. Операции обновления или удаления, использующие аргумент READPAST, могут блокироваться либо при считывании внешних ключей или индексированных представлений, либо при изменении вторичных индексов.

Аргумент READPAST можно указывать только в транзакциях, выполняемых на уровнях изоляции READ COMMITTED или REPEATABLE READ. При указании подсказки READPAST в транзакциях, выполняемых с уровнем изоляции SNAPSHOT, она должна использоваться в сочетании с другими табличными подсказками, требующими блокировки, например UPDLOCK или HOLDLOCK.

Табличная подсказка READPAST не может быть указана, если параметр базы данных READ_COMMITTED_SNAPSHOT установлен в ON и выполняется одно из следующих условий.
  • Уровень изоляции транзакций сеанса имеет значение READ COMMITTED.
  • В запросе также указана табличная подсказка READCOMMITTED.
Чтобы в этих случаях указать подсказку READPAST, удалите табличную подсказку READCOMMITTED (если существует) и включите в запрос табличную подсказку READCOMMITTEDLOCK.


Всё, что написано выше является выдержкой из BOL, при этом хотелось бы особо подчеркнуть фразу, которую я выделил жирным:
Операции чтения, в которых используется аргумент READPAST, не блокируются.

Но так ли всё на самом деле? Или возможны исключения? Об этом чуть ниже.

[Ещё]

Tags: , , , ,

SQL Server