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

StackOverflow https://stackoverflow.com/questions/42936

Вопрос

В одном из моих приложений у меня есть таблица базы данных объемом 1 ГБ, которая используется для справочных данных.Из этой таблицы поступает огромное количество операций чтения, но записи никогда не производятся.Мне было интересно, есть ли какой-нибудь способ загрузить данные в оперативную память, чтобы к ним не нужно было обращаться с диска?

Я использую SQL Server 2005

Это было полезно?

Решение

Если у вас достаточно оперативной памяти, SQL отлично справится с определением того, что загружать в оперативную память и что искать на диске.

Этот вопрос задают часто, и он напоминает мне о людях, пытающихся вручную установить, на каком "ядре" будет выполняться их процесс - позволить ОС (или, в данном случае, БД) делать то, для чего она была разработана.

Если вы хотите убедиться, что SQL действительно считывает ваши поисковые данные из кэша, то вы можете инициировать нагрузочный тест и использовать Sysinternals ФилеМон, Обозреватель процессов и Монитор процесса чтобы убедиться, что таблица объемом 1 ГБ не считывается из.По этой причине мы иногда помещаем наши данные "поиска" в отдельную файловую группу, чтобы было очень легко отслеживать, когда к ним осуществляется доступ на диске.

Надеюсь, это поможет.

Другие советы

Вам наверняка захочется взглянуть на memcached.Это то, что многие огромные (и хорошо масштабируемые) сайты использовали для решения подобных проблем.Если у вас есть несколько запасных серверов, вы можете легко настроить их таким образом, чтобы большая часть ваших данных хранилась в памяти.

http://en.wikipedia.org/wiki/Memcached

http://www.danga.com/memcached/

http://www.socialtext.net/memcached/

Просто чтобы прояснить проблему для sql2005 и выше:

Этот функционал был введен для производительность в SQL Server версии 6.5.DBCC PINTABLE имеет крайне нежелательные побочные эффекты.К ним относятся возможность повреждения пула буферов.DBCC PINTABLE не требуется и был удален для предотвращения дополнительных проблем.Синтаксис этой команды по-прежнему работает, но не влияет на сервер.

ВЫВОДИМЫЙ DBCC явно закрепит таблицу в ядре, если вы хотите убедиться, что она остается кэшированной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top