Назад | Перейти на главную страницу

Хранить таблицу в памяти

Есть ли способ заставить SQL Server хранить в памяти таблицу с 10 атрибутами и 10 строками, подобными этой?

a1   a2   a3  a4  a5  a6  a7  a8  a9 a10
----------------------------------------
138 498  365 345 500 473 498 125 134 800
448 498  362 348 500 463 498 625 165 700
468 498  625 329 500 435 498 625 345 600
437 701  365 326 500 453 498 625 645 500
438 498  326 329 500 438 498 625 745 400
439 499  626 329 500 438 498 525 685 300
440 500  327 328 500 423 498 627 655 200
444 214  331 334 500 428 498 125 615 100
448 498  362 348 500 463 498 225 165 700
468 498  625 329 500 435 498 425 345 600

Я думал сделать что-то вроде вектора и сделать таблицу одной строкой (вместо 10 атрибутов на 10 строк сделать вектор размером 100. Есть ли способ сделать это?

Вы можете спросить, почему я хочу это сделать. Это потому, что я хотел бы провести некоторые вычисления в памяти, избегая записи или использования диска, а затем получить доступ к памяти или вектору в C ++ или .NET (может быть, C #?)

Я думал о создании UDF, который может преобразовывать таблицу в массив, но хотел бы, чтобы этот процесс был полностью внутренним.

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

В предыдущих версиях до SQL Server 2005 DBCC PINTABLE использовалась для вставки таблицы в память, но у нее были некоторые проблемы с повреждением данных. Хотя команда DBCC PINTABLE все еще существует, она просто ничего не делает.

Я думаю, вы слишком усложняете. SQL Server будет читать данные с диска только если его еще нет в памяти. Попав в память, он останется там до тех пор, пока НЕ ​​перестанет использоваться какое-то время или не уступит место чтению чего-то еще. Если у вас достаточно памяти (это совершенно относительно), ваша таблица может уже быть в памяти. Я здесь немного упростил. Он использует алгоритм LRU-k для хранения страниц в кеше. 10 строк и 10 столбцов данных smallint / int уместятся на одной странице, т.е. 8 КБ, и вам следует прекратить следовать своему первоначальному плану.

Ссылка: http://msdn.microsoft.com/en-us/library/ms191475.aspx

Одна страница находится в кеше, даже если вы обновите данные, она не будет записана на диск немедленно, и существует асинхронный процесс (CHECKPOINT, Lazy Writing) для сброса этих данных на диск позже. Вы можете обновить данные, например, 100 раз, и возможно, что SQL Server записывает на диск только один раз. Это зависит от того, испортили ли вы внутренний флаг восстановления, количество изменений данных и тому подобное. Думаю, сейчас слишком много информации.