In-Memory OLTP (оптимизация в памяти)

Новые возможности SQL Server 2014 (12.x) In-Memory OLTP могут значительно повысить производительность приложения базы данных OLTP. In-Memory OLTP — это оптимизированное для памяти ядро СУБД, интегрированное в ядро SQL Server, оптимизированное для OLTP.

Виртуальная машина Azure Хотите попробовать SQL Server 2016? Зарегистрируйтесь в Microsoft Azure, а затем перейдите сюда, чтобы развернуть виртуальную машину с уже установленным SQL Server 2016. Вы можете удалить виртуальную машину после завершения работы.

Чтобы использовать In-Memory OLTP, необходимо определить таблицу с большим доступом как оптимизированную для памяти. Оптимизированные для памяти таблицы полностью транзакционные, устойчивы и доступны с помощью Transact-SQL так же, как и дисковые таблицы. Запрос может ссылаться и на таблицы, оптимизированные для памяти, и на таблицы, находящиеся на диске. Транзакция может обновлять данные в таблицах, оптимизированных для памяти и в таблицах, находящихся на диске. Хранимые процедуры, которые ссылаются только на таблиц, оптимизированные для памяти, могут быть скомпилированы в машинный код для последующего улучшения производительности. Подсистема In-Memory OLTP предназначена для чрезвычайно высокого уровня параллелизма сеансов для транзакций типа OLTP, управляемых на среднем уровне с высоким уровнем масштабирования. Для этих целей оно использует структуры данных без защелок и оптимистичное управление многовариантным параллелизмом. Результат является предсказуемым, малая задержка до миллисекунды и высокая пропускная способность с линейной шкалой для транзакций базы данных. Фактический рост производительности зависит от многих факторов, но улучшение производительности в 5–20 раз является обычным явлением.

В следующей таблице перечислены шаблоны рабочей нагрузки, которые могут оказаться наиболее полезными при использовании In-Memory OLTP.

Сценарий Реализации Сценарий Реализации Преимущества In-Memory OLTP
Высокая интенсивность данных от многих конкурентных подключений. Первоначально хранение только путем присоединения.

Невозможность быть на одном уровне с добавленной рабочей нагрузкой.
Устранение конкуренции.

Сокращение журнала.
Чтение производительности и масштабирование с периодичным добавлением пакетов и обновлений. Высокопроизводительные операции чтения, особенно когда каждый запрос сервера должен выполнить многие операции чтения.

Неспособность соответствовать требованиям вертикального масштабирования.
Устранение конкуренции при получении новых данных.

Малая задержка при извлечении данных.

Уменьшение времени на выполнение кода.
Интенсивная обработка бизнес-логики на сервере базы данных. Добавление, обновление и удаление рабочей нагрузки.

Интенсивные вычисления внутри хранимых процедур.

Конкуренция чтения и записи.
Устранение конкуренции.

Уменьшение времени на выполнение кода для сокращенной задержки и улучшенной пропускной способности.
Низкая задержка. Необходима бизнес-транзакции с низкой задержкой, которые обычно не могут быть достигнуты решениями базы данных. Устранение конкуренции.

Уменьшение времени на выполнение кода.

Низкая задержка выполнения кода.

Эффективное извлечение данных.
Управление состоянием сеанса. Частый ввод, обновление и поиск точки.

Большая нагрузка от многочисленных веб-серверов.
Устранение конкуренции.

Эффективное извлечение данных.

Дополнительное снижение или удаление операций ввода-вывода при использовании не устойчивых таблиц

Дополнительные сведения о сценариях, в которых In-Memory OLTP приведет к наибольшему повышению производительности, см. в разделе On-Memory OLTP — общие шаблоны рабочей нагрузки и рекомендации по миграции.

In-Memory OLTP лучше всего повышает производительность в OLTP с короткими транзакциями.

К шаблонам программирования, которые In-Memory OLTP, относятся сценарии параллелизма, поиск по точкам, рабочие нагрузки, в которых есть много операций вставки и обновления, а также бизнес-логика в хранимых процедурах.

Интеграция с SQL Server означает, что вы можете иметь оптимизированные для памяти и дисковые таблицы в одной базе данных, а также выполнять запросы к таблицам обоих типов.

В SQL Server 2014 (12.x) существуют ограничения в контактной области Transact-SQL, поддерживаемой для In-Memory OLTP.

In-Memory OLTP обеспечивает значительное повышение производительности и масштабируемости за счет использования:

  • алгоритмов, оптимизированных для доступа к хранимым в памяти данным;

  • управления оптимистичным параллелизмом, устраняющим логические блокировки;

  • Блокирует свободные объекты, которые устраняют все физические блокировки и защелки Потоки, выполняющие транзакционные операции, не используют блокировки или кратковременные блокировки для управления параллелизмом.

  • Хранимые процедуры, скомпилированные в собственном коде, которые обладают значительно лучшей производительностью, чем интерпретированные хранимые процедуры, во время доступа к оптимизированной для памяти таблице.

Важно!

Для использования OLTP в памяти потребуется внести некоторые изменения в синтаксис таблиц и хранимых процедур. Дополнительные сведения см. в статье Миграция в In-Memory OLTP. Прежде чем пытаться перенести таблицу на диске в оптимизированную для памяти таблицу, ознакомьтесь с разделом Определение того, следует ли переносить таблицу или хранимую процедуру в In-Memory OLTP , чтобы узнать, какие таблицы и хранимые процедуры будут полезны для In-Memory OLTP.

В этом разделе

В разделе рассматриваются следующие понятия.

Раздел Описание
Требования для использования таблиц, оптимизированных для памяти Перечисляются требования к программному обеспечению и оборудованию, а также рекомендации по использованию оптимизированных для памяти таблиц.
Использование In-Memory OLTP в среде ВМ Описывает использование функций In-Memory OLTP в виртуализированной среде.
Примеры кода In-Memory OLTP Содержит образцы кода, которые показывают, как создавать и использовать оптимизированные для памяти таблицы.
Таблицы, оптимизированные для памяти Дает вводное описание таблиц, оптимизированных для памяти.
Основные сведения о табличных переменных, оптимизированных для памяти Пример кода, показывающий, как использовать переменную оптимизированной для памяти таблицы вместо традиционной табличной переменной для уменьшения использования базы данных tempdb.
Индексы для оптимизированных для памяти таблиц Содержит базовое описание индексов, оптимизированных для памяти.
Скомпилированные в собственном коде хранимые процедуры Содержит базовое описание хранимых процедур, скомпилированных в собственном коде.
Управление памятью для компонента "Выполняющаяся в памяти OLTP" Основные сведения об управлении памятью системы.
Создание и управление хранилищем для оптимизированных для памяти объектов Описывает файлы данных и разностные файлы, в которых хранятся сведения о транзакциях в оптимизированных для памяти таблицах.
Резервное копирование и восстановление оптимизированных для памяти таблиц Описывает резервное копирование, восстановление и восстановление оптимизированных для памяти таблиц.
Поддержка Transact-SQL для выполняющейся в памяти OLTP Обсуждается поддержка Transact-SQL для In-Memory OLTP.
Поддержка высокого уровня доступности в базах данных OLTP в памяти Обсуждаются группы доступности и кластеризация отработки отказа в In-Memory OLTP.
Поддержка SQL Server для In-Memory OLTP Описание нового и обновленного синтаксиса и функций, поддерживающих оптимизированные для памяти таблицы.
Миграция в In-Memory OLTP Рассматриваются способы миграции дисковых таблиц в оптимизированные для памяти таблицы.

Дополнительные сведения о модуле OLTP в памяти доступны в следующих источниках:

См. также:

Функции базы данных