Данные булавки SQL Server 2005 в памяти - PullRequest
1 голос
/ 24 ноября 2010

Мы работаем с базой данных нашего приложения на выделенном компьютере, работающем только на SQL Server 2005. Этот сервер БД имеет 32 ГБ ОЗУ ... а сам файл базы данных составляет всего 6 ГБ.

Я бы хотел принудительно заставить несколько таблиц с интенсивным чтением / запросом в буфер памяти SQL для увеличения скорости.

Я понимаю, что SQL-сервер действительно хорош в хранении необходимых данных, кэшированных в памяти, после того, как они будут считаны с диска ... Но наши клиенты, вероятно, предпочли бы, чтобы их запрос выполнялся быстро в ПЕРВЫЙ раз. «Самая быстрая производительность Секунда Время» не совсем изюминка продукта.

Если не считать старой команды DBCC "Таблица выводов" ... есть мысли?

Я написал «CacheTableToSQLMemory» Proc, который просматривает все индексы таблицы (Clustered & Non), выполняя «Select *» в таблице Temp. Я запланировал, что агент SQL будет запускать «кэшировать множество таблиц» Proc каждые 15 минут, пытаясь сохранить страницы в памяти.

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

У нас работает PAE & AWE. SQL настроен на использование от 8 до 20 ГБ ОЗУ.

Ответы [ 2 ]

6 голосов
/ 24 ноября 2010

Узкое место в x86 - ваша настоящая проблема.AWE может обслуживать только страницы данных, поскольку они могут отображаться в и из областей AWE, но любое другое выделение памяти должно занимать 2 ГБ виртуального адресного пространства процесса.Это будет включать в себя каждый стек потоков, весь код, все данные, в настоящее время отображаемые «используемые» из AWE, и, что наиболее важно, каждый отдельный кэшированный план, план выполнения, кэшированный маркер безопасности, кэшированные метаданные и так далее и так далее.и я даже не считаю CLR, надеюсь, вы его не используете.

Учитывая, что в системе 32 ГБ ОЗУ, вы даже не можете попробовать / 3 ГБ и посмотреть, поможет ли это из-зав этом случае общее сокращение PAE до 16 ГБ, что сделало бы половину вашей оперативной памяти невидимой ...

Вы действительно должны перейти на x64.AWE может помочь только так много.Вы можете получить счетчики производительности из диспетчера буфера и диспетчера памяти объектов и монитора sys.dm_os_memory_clerks , чтобы вы могли получить более полное представление о том, как ведет себя память экземпляра(куда уходит используемая память, кто ее использует и т. д.).Я не ожидаю, что это действительно поможет вам решить проблему, но я надеюсь, что она даст вам достаточно информации, чтобы обосновать необходимость обновления до x64.

2 голосов
/ 24 ноября 2010

Невозможно закрепить таблицы в памяти в SQL Server 2005. Если SQL Server удаляет таблицы из памяти, это происходит из-за нехватки памяти в других частях системы. Поскольку размер вашей базы данных составляет всего 6 ГБ, она должна оставаться в памяти ... при условии, что на сервере нет других баз данных.

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

Вы также можете изменить выделение памяти на сервере на фиксированный размер. Если на вашем сервере базы данных нет чего-то еще, вы можете установить минимальную и максимальную память SQL Server на одно и то же значение. Это не обязательно предотвратит это в будущем (это зависит от того, как SQL Server должен работать), но, безусловно, не помешает настроить SQL Server на использование фиксированного объема памяти (если у вас нет другого). проблемы с памятью).

...