Хранение таблиц данных SQL Server в памяти — это функция SQL Server, которая редко используется в процессе разработки обычных небольших систем. Сопутствующие документы собраны здесь, чтобы продемонстрировать, как поместить все данные таблицы SQL Server в память для реализации базы данных в памяти и повышения производительности в реальном времени.
1, DBCC PINTABLE
Отмечаеттаблицу
для закрепления, что означает, что Microsoft SQL Server не удаляет страницы таблицы из памяти.
DBCC PINTABLE (database_id, table_id)
Чтобы определить идентификатор базы данных, используйте функцию DB_ID.
Чтобы определить идентификатор таблицы, используйте функцию OBJECT_ID.
Комментирование
DBCC PINTABLE не приводит к чтению таблицы в память. Когда страницы таблицы считываются в кэш обычными инструкциями Transact-SQL, они помечаются как резидентные страницы. Резидентные страницы памяти не очищаются, когда SQL Server требуется место для чтения новых страниц. SQL Server по-прежнему записывает обновления страницы и, при необходимости, записывает обновленную страницу обратно на диск. Однако SQL Server сохраняет копии доступных страниц в кэше до тех пор, пока таблица не станет нерезидентной с помощью инструкции DBCC UNPINTABLE.
DBCC PINTABLE лучше всего использовать для хранения в памяти небольших часто используемых таблиц. Считайте страницы небольшой таблицы в память сразу, и все будущие ссылки на ее данные не нужно будет читать с диска.
ПРИМЕЧАНИЕ. DBCC PINTABLE может повысить производительность, но его следует использовать с осторожностью. Если существует большая таблица, она изначально использует большую часть кэша, не оставляя достаточного количества кэша для других таблиц в системе. Если размещенная таблица больше кэша, таблица заполняет весь кэш. Член фиксированной роли сервера sysadmin должен завершить работу и перезапустить SQL Server, а затем сделать таблицу нерезидентной. Размещение слишком большого количества таблиц создает ту же проблему, что и размещение таблиц, размер которых превышает размер кэша.
Пример:
Объявить @db_id int, @tbl_id int
Использовать DATABASE_NAME
Установить @db_id = DB_ID('DATABASE_NAME')
Установить @tbl_id = Object_ID('Department')
Pintable DBCC (@db_id, @tbl_id)
может установить для таблицы Department значение памяти. житель.
Объявить @db_id int, @tbl_id int
Использовать DATABASE_NAME
Установить @db_id = DB_ID('DATABASE_NAME')
Установить @tbl_id = Object_ID('Department')
DBCC UNpintable (@db_id, @tbl_id)
может отменить настройку таблицы Department как резидентной в памяти.
Для обнаружения выполнения можно использовать следующую команду SQL:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Если возвращаемый результат равен 1: это означает, что таблица установлена для размещения в памяти; 0: это означает; что он не установлен в резервной памяти.
2. SP_TableOption
Устанавливает значения параметров для пользовательских таблиц. sp_tableoption можно использовать для включения функции текста в строке в таблицах с синтаксисом текста, ntext или изображения
.
sp_tableoption [ @TableNamePattern = ] 'таблица'
, [ @OptionName = ] 'имя_опции'
, [ @OptionValue = ] 'value'
, где 'option_name' используется следующим образом:
pintable — если отключено (по умолчанию), таблица помечается как нерезидентная в ОЗУ. Если включено, таблица помечается как резидентная в ОЗУ. (Указанная таблица может быть резидентной в памяти).
Кроме того, блокировка таблицы при массовой загрузке, блокировка вставки строки, текст в строке и другие дополнительные значения не задействуют резидентную таблицу в памяти. Для конкретного использования вы можете запросить книги SQL Server.
ЗначениеOnline.
Используется следующим образом:
имя_опции включено (истина, включено или 1) или отключено (ложь, выключено или 0).
Пример:
EXEC sp_tableoption 'Department','pintable', 'true'
приведет к тому, что таблица данных Department будет находиться в памяти.
EXEC sp_tableoption 'Department','pintable', 'false'
отменит нахождение таблицы данных Department в памяти. .
Для обнаружения выполнения можно использовать следующую команду SQL:
Select ObjectProperty(Object_ID('Department'),'TableIsPinned')
Если возвращаемый результат равен 1: это означает, что таблица установлена для размещения в памяти; 0: это означает; что он не установлен в резервной памяти.
3. Выводы.
При настройке таблицы данных как резидентной в памяти таблица фактически не считывается в память до тех пор, пока она не будет получена. Таким образом, вы можете использовать следующие инструкции SQL для дальнейшего размещения таблицы данных Department в памяти:
Выберите * From Department.
Кроме того, вы можете использовать следующие инструкции SQL, чтобы легко отображать/обнаруживать все таблицы, которые будут находиться в памяти базы данных:
SELECT * FROM INFORMATION_SCHEMA.Tables
WHERE TABLE_TYPE = 'BASE TABLE'
AND OBJECTPROPERTY(object_id(TABLE_NAME), 'TableIsPinned' ) > 0