Почему мои переменные таблицы, оптимизированные для памяти, используют дисковое пространство
Я создал оптимизированный для памяти тип таблицы в моей базе данных следующим образом:
create type tblLocation_InMem as table(
IndexLocation int not null index IX_LocInMem,
IndexRootLocation int not null,
fldLocCrumbs nvarchar(1024) not null
)
with (memory_optimized=on)
Этот тип таблицы должен использоваться в большом запросе, который должен получить доступ к данным, хранящимся в нем, через несколько операторов выбора, например, так:
declare @myLocTbl as tblLocation_InMem;
insert into @myLocTbl <some select statement>;
select <stuff> from <some table> join @myLocTbl on <join stuff>;
select <other stuff> from <other table> join @myLocTbl on <more join stuff>;
Все работает нормально, но я заглянул в свою папку данных SQL для группы файлов File_MemOpt базы данных, и я вижу такие вещи для моего типа таблицы In-Memory в папке $HKv2:
Видимо мой тип таблицы в памяти не совсем в памяти. Есть ли способ, которым я могу использовать этот тип таблицы и хранить его строго в памяти без всей этой записи на диск. Я думал, создавая только табличный тип в памяти, я избегал любой дисковой активности. Я также попытался создать определение таблицы в памяти и указать durability = schema_only, но это все равно создало материал на диске. Должен ли я просто использовать переменные таблицы?
Я не беспокоюсь о сохранении после перезагрузки или чего-то в этом роде. Запрос на выбор происходит в контексте веб-запроса REST. Если сервер перезагружается во время запроса, то запрос должен будет начаться заново.
1 ответ
Оптимизированные для памяти таблицы все еще сохраняются на диске. Если вы действительно хотите таблицу только для памяти без сохранения данных, создайте ее с
(with memory_optimized=on, durability=schema_only)
Прочитайте документацию для получения дополнительной информации:
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql