У нас есть мощный 64-битный сервер Windows 2008 x 4 (4 х 4 ядра, 32 ГБ ОЗУ), работающий под управлением SQL Server 2005. У нас есть небольшая (6 ГБ), но очень важная база данных, доступ к которой несколько замедлен до тех пор, пока страницы не будут кэшированы в памяти (использование очень много случайных операций ввода-вывода, поэтому шансы очень низкие, данная страница находится в памяти и конечных пользователей пожаловаться на начальную медлительность). Диски достаточно быстрые (локальный 15K SAS), но я полагаю, что приложение написано несколько неуклюже (это решение COTS), поэтому мне интересно, есть ли способ «принудительного» размещения базы данных в памяти в SQL Server 2005 (2008 не поддерживается вендором, так что нам пока не стоит переходить на это), чтобы избежать первоначального блюза, заполняющего кеш?
Мой текущий метод состоит в том, что я запускаю SELECT * из каждой таблицы в скрипте, чтобы получить страницы данных в памяти, но некоторые объекты (индексы, полнотекстовый поиск и т. Д.) Не кэшируются этим методом (и модифицирую скрипт для опроса индексов и написать соответствующие пункты WHERE для кэширования - это комплекс кипения океана).
источник
Почему объекты базы данных сначала удаляются из кэша? Вы перезапускаете службы SQL или отключаете базу данных? Или они вытесняются кэшированием из других баз данных?
С Уважением,
SCM.
источник
Если база данных настолько мала, подумайте над тем, чтобы поместить ее на SSD?
источник
У меня было несколько сценариев, когда обновление статистики с помощью FULLSCAN по ключевым таблицам принудительно помещало данные в кэш и делало мои последующие DML-файлы вокруг этих таблиц намного быстрее. И это не было результатом устаревшей статистики, поскольку это не привело к изменениям в планах выполнения.
источник
Почему бы вам не установить второй экземпляр SQL Server только с этой базой данных и установить минимальный объем памяти для этого экземпляра равным 6 ГБ?
Это гарантирует, что ваши другие базы данных никогда не украдут память из вашей «маленькой, но очень важной» базы данных.
Это также будет означать, что вы можете перевести другой экземпляр в автономный режим, и ваша маленькая БД останется в памяти.
источник
Я бы использовал профилировщик, чтобы проверить ваш sql. Сравните «логическое» чтение с «физическим» чтением. SQL-сервер является интеллектуальным и использует оперативную память, необходимую ему для наиболее эффективных результатов.
Также убедитесь, что ваши автостаты обновлены.
Без дополнительной информации о типе запроса и размерах таблицы БД это звучит немного странно.
источник