In-Memory OLTP (оптимизация в памяти)
Новые возможности SQL Server 2014 (12.x) In-Memory OLTP могут значительно повысить производительность приложения базы данных OLTP. In-Memory OLTP — это оптимизированное для памяти ядро СУБД, интегрированное в ядро SQL Server, оптимизированное для OLTP.
Хотите попробовать 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 в памяти доступны в следующих источниках:
Выполняемая в памяти OLTP — общие замечания по шаблонам рабочей нагрузки и миграции
Краткое описание внутренних компонентов SQL Server In-Memory OLTP