Tag Archives: Column Store Indexes

SQL Server 2016: увеличен максимальный размер ключа в некластерном индексе

В SQL Server 2016 и в Azure SQL Database увеличен максимальный размер ключа в некластерном индексе с 900 до 1700 байт. Максимальный размер ключа для кластерного индекса по-прежнему остается 900 байт.

Ниже приведен пример, когда создается таблица со строковым полем фиксированной длины 1700 байт и индексом на этом поле.

if object_id('dbo.test_table', 'U') is not null
	drop table dbo.test_table;
go

create table dbo.test_table (
	c1 varchar(1700) not null
);
go

create index ix_test_c1 on dbo.test_table (c1)
go

insert into dbo.test_table values (replicate('A', 1700))
go

Скрипт успешно отрабатывает на SQL Server 2016. На ранних версиях SQL Server команда CREATE INDEX выдает предупреждение.

Warning! The maximum key length is 900 bytes. The index ‘ix_test_c1’ has maximum length of 1700 bytes. For some combination of large values, the insert/update operation will fail.

А при попытке вставить какие данные в таблицу – ошибку.

Msg 1946, Level 16, State 3, Line 13
Operation failed. The index entry of length 1700 bytes for the index ‘ix_test_c1’ exceeds the maximum length of 900 bytes.

При создании некластерных колоночных индексов вы можете указать столбцы, которые будут храниться в колоночном формате. Эти колонки не будут являться ключом индекса, и здесь нет жесткого ограничения на их размер.

Для некластерных индексов в in-memory таблицах ограничение на размер ключа составляет 2500 байт, для hash индексов ограничений нет.

Что нового в SQL Server 2014

Microsoft SQL Server 2014 был анонсирован 3 июня на основном вступительном докладе Microsoft TechEd 2013. В этом месяце будет доступна для скачивания публичная сборка CTP1, а окончательная версия выйдет ориентировочно в начале 2014 года. Если откинуть в сторону все громкие маркетинговые заявления, что же действительно нового и полезного появляется в этом релизе?

  • In-Memory OLTP (кодовое название Hekaton) – встроенный в движок механизм, позволяющий создавать таблицы с данными, оптимизированные для непосредственного размещения в оперативной памяти, а также для хранимых процедур становится доступна возможность компилирования их в машинный код. Все это позволяет получить выигрыш в производительности в несколько раз. Наверное, это самая главная и ожидаемая «фишка» новой версии.
  • Колоночные индексы (Column Store Indexes) теперь становятся обновляемыми.
  • Появляется возможность расширения буферного пула на SSD.
  • Будут изменения непосредственно в движке исполнения запросов, что опять же должно будет положительно сказаться на производительности.
  • В AlwaysOn теперь будет поддерживаться до 8 реплик вместо 4х.
  • Улучшения при перестроении индексов в режиме онлайн.
  • Через Resource Governor теперь можно будет управлять IO ресурсами.
  • Также обещают возможность более гибкой выдаче прав, например, администратор сможет управлять системой и не иметь доступа к важным данным.
  • В SSMS появится мастер миграции БД с обычного сервера в Windows Azure Infrastructure Services.
  • Резервное копирование в Azure Storage.
  • Интеграция AlwaysOn с Windows Azure Infrastructure Services: появится возможность иметь реплики в облаке, а также мастер в SSMS для их легкого развертывания.

Также нас порадовали тем, что выйдет Windows Server 2012 R2 и SQL Server сможет воспользоваться новыми возможностями этой ОС:

  • Поддержка до 640 логических процессоров и до 4 TB оперативной памяти (для виртуальных машин поддерживается до 64 логических процессоров и до 1 TB RAM).
  • Виртуализация сетей облегчит миграцию SQL Server между ЦОД.
  • Появится возможность более гибко управлять дисковыми ресурсами. Например, автоматически вынести наиболее запрашиваемые данные на быстрое хранилище, а данные, к которым обращаются редко, наоборот, на более медленные диски.

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