Колоночные индексы, особенности использования

by Alexey Knyazev 27. марта 2012 20:30

01 марта 2012 года в рамках очередной встречи МСР-клуба г. Екатеринбург (http://www.ekbit.pro/), я читал доклад по теме "SQL Server 2012. Columnstore Indexes" - Columnstore-Index.pptx (2,11 mb).
Прошло совсем немного времени, но я уже получил несколько вопросов по теме моего доклада. Колоночные индексы - одна из ключевых новинок SQL Server 2012, но на данный момент документации в сети не так много, тем более на русском языке, поэтому я решил собрать все ключевые особенности, связанные с использование колоночных индексов (по мотивам http://social.technet.microsoft.com/wiki/contents/articles/3540.sql-server-columnstore-index-faq.aspx).
Кроме того, новая версия SQL Server 2012 уже доступна для скачивания по подпискам MSDN и TechNet. Редакции Microsoft® SQL Server® 2012 Express и Microsoft® SQL Server® 2012 Evaluation доступны всем.

Официальный выход запланированный на 01 апреля 2012.



[Ещё]

Tags: ,

SQL Server

История SQL Server от версии 1.0 до 11.0

by Alexey Knyazev 2. марта 2012 02:23

Tags: ,

SQL Server

ONLINE добавление нового столбца с DEFAULT в SQL Server 2012

by Alexey Knyazev 22. февраля 2012 00:55
В текущих версиях SQL Server ( SQL Server 2008R2 и ниже ) операция добавления нового столбца NOT NULL с DEFAULT-значением может занять значительное время, если таблица имеет большой размер. Для небольших таблиц эта операция допустима, но, когда объём данных в таблице велик, то мы получаем блокировку Sch-M для таблицы на длительное время, т.к. при этой операции происходит построчное заполнение нового столбца значением по умолчанию.

В SQL Server 2012 ситуация кардинально изменилась, теперь при добавлении в таблицу нового NOT NULL столбца с DEFAULT-значением мы не производим физического изменения данных построчно, а лишь изменяем таблицу на уровне метаданных, поэтому операция практически мгновенна.

[Ещё]

Tags: ,

SQL Server

Секционирование и влияние RANGE RIGHT/LEFT на разбиение и слияние

by Alexey Knyazev 14. февраля 2012 22:20
Секционирование делает большие таблицы и индексы более управляемыми, так как позволяет быстро и эффективно получать доступ к поднаборам данных и управлять ими, при этом сохраняя целостность всей коллекции. При использовании секционирования такие операции, как загрузка данных из системы OLTP в систему OLAP, занимают всего несколько секунд вместо минут и часов, затрачивавшихся на это в предыдущих версиях SQL Server. Операции обслуживания, выполняемые на поднаборах данных, также выполняются значительно эффективнее, так как нацелены только на те данные, которые действительно необходимы, а не на всю таблицу.
В SQL Server все таблицы и индексы в базе данных считаются секционированными, даже если они состоят всего лишь из одной секции. Фактически, секции представляют собой базовую организационную единицу в физической архитектуре таблиц и индексов. Это означает, что логическая и физическая архитектура таблиц и индексов, включающая несколько секций, полностью отражает архитектуру таблиц и индексов, состоящих из одной секции. Дополнительные сведения см. на MSDN.
При создании секционированной функции, мы указываем, к какой области интервала значений принадлежит аргумент boundary_value [ ,...n ] (к левой или правой). Сегодня я расcкажу, как выбор RANGE [ LEFT | RIGHT ] влияет на операции SPLIT/MERGE RANGE.
[Ещё]

Tags: , , , ,

SQL Server

Параметризованная процедура и гарантированный план запроса

by Alexey Knyazev 30. января 2012 00:07
- Процедура стала работать медленнее, чем обычно?
- Запрос выполняется быстро, а процедура, в которой подобный запрос, работает очень долго?
- У процедуры неоптимальный план запроса?

Если ответ "Да" хоть на один из вопросов, то эта статья для вас. Я расскажу и покажу, как можно повлиять на работу процедуры и быть уверенным, что в кэше окажется ожидаемый план запроса (а значит никаких больше сюрпризов) для вашей процедуры.

Тема не нова, но если вы это читаете, то моё время потрачено не зря.

[Ещё]

Tags: , , , , ,

SQL Server

Временные таблицы и проблемы, связанные с их использованием

by Alexey Knyazev 25. сентября 2011 00:32
Temp Table Прежде, чем я расскажу о проблемах с которыми вы можете столкнуться при использовании временных таблиц, немного теории.
Временные таблицы отличаются от постоянных только тем, что хранятся в базе данных tempdb и автоматически удаляются, когда необходимость в них отпадает.

Существует два вида временных таблиц: локальные и глобальные. Они отличаются друг от друга именами, видимостью и доступностью. Имена локальных временных таблиц начинаются с одного символа (#); они видны только текущему соединению пользователя и удаляются, когда пользователь отключается от экземпляра SQL Server. Имена глобальных таблиц начинаются с двух символов номера (##); они видны любому пользователю и удаляются, когда все пользователи, которые на них ссылаются, отключаются от экземпляра SQL Server.

Например, если создать таблицу employees, она будет доступна любому пользователю, которому предоставлены разрешения на ее использование до тех пор, пока не будет удалена. Если во время сеанса базы данных создается локальная временная таблица #employees, с ней сможет работать только данный сеанс. Таблица будет удалена при завершении сеанса. Если создать глобальную временную таблицу ##employees, с ней сможет работать любой пользователь базы данных. Если другие пользователи не будут работать с этой таблицей, она будет удалена после отключения от нее. Если другой пользователь обратится к созданной таблице, SQL Server удалит ее, когда произойдет отключение и другие сеансы перестанут активно к ней обращаться.

[Ещё]

Tags: , , , , ,

SQL Server