Могу ли я разместить всю БД в памяти?


9

Моя база данных составляет около 1 ГБ (в соответствии с файлом mdf моего БД). Мой сервер базы данных имеет 4 ГБ оперативной памяти. Если посмотреть на потребление памяти на компьютере, когда он активен, он используется примерно на 85% (включая ОС и т. Д.)

Означает ли это, что все операции чтения БД работают только в памяти (т. Е. Весь БД находится в памяти)? или есть еще случай, когда он должен был бы пойти на диск?


1
Ну, для сравнения, какая польза, когда приложение не активно? Как правило, одним из преимуществ системы баз данных является то, что ей не нужен полный файл в памяти, но она будет помещать то, что вы извлекаете из нее, в память, пока вы не сбросите ее в другом месте. Я собираюсь объявить «нет».
Грант Томас

@Г-н. Разочарование: я согласен, что это преимущество, но в случае, когда он может поместить полный файл в память (как в этом случае), не так ли?

Если это необходимо, то да. Но по требованию абонентов и данных, которые им требуются, а не изначально как само собой разумеющееся. Так что, как правило, если у вас есть проблема с памятью базы данных, это будет с вызывающим кодом или вспомогательным программным обеспечением, или смесью этих двух.
Грант Томас

1
Пример для перспективы: я знаю очень большую интернет-компанию, владеющую несколькими очень большими портальными сайтами. Они доставляют ок. 300 миллионов объявлений от их собственных рекламодателей для этих порталов. Структура рекламных серверов такова, что существует одна большая БД Oracle со всей информацией для учета и таргетинга, но есть 32 больших (32 ГБ ОЗУ) сервера, которые содержат небольшие базы данных (с только активными в настоящее время объявлениями) в ОЗУ . Они не касаются диска, они не должны: у них есть только 1/1000 секунды, чтобы найти объявление для размещения при поступлении запроса на него, любой доступ к диску сделает эту цель невозможной для достижения.

Ответы:


5

Да, вся база данных, скорее всего, хранится в памяти. Он будет сбрасывать грязные страницы на диск с интервалами контрольных точек. Учтите, однако, что все обновления должны будут записываться в журнал и ждать, пока записи журнала будут надежно закреплены в долговременном хранилище, прежде чем выполнять фиксацию. Эта старая бумажная Основа ввода / вывода SQL Server 2000 содержит все детали, которые вам когда-либо понадобятся, и даже больше.

Но вам не нужно угадывать, вы можете точно измерить это и посмотреть, произойдет это или нет. Соответствующие счетчики производительности:

  • Ожидаемая продолжительность жизни страницы Число секунд, в течение которых страница будет оставаться в пуле буферов без ссылок.
  • Число операций чтения в секунду / сек. Число операций чтения страниц физической базы данных в секунду. Эта статистика отображает общее количество чтений физической страницы во всех базах данных. Поскольку физический ввод-вывод является дорогим, вы можете минимизировать затраты, используя больший кэш данных, интеллектуальные индексы и более эффективные запросы, либо изменив структуру базы данных.
  • Записи Page / сек Количество физических записей страниц базы данных , выпущенных в секунду.

«Да, вся база данных, вероятно, хранится в памяти». Таким образом, в случае нашего производственного сервера с минимум 60 веб-сайтами, каждый из которых использует выделенную базу данных в пределах SQL Server Master, где даже немногие из них соответствуют размеру, превышающему доступную память компьютеров, как это работает? ? Я испытываю желание сказать, что нет никакого определенного дефолта или вероятности того или иного сценария - согласно предыдущему комментарию, который я сделал, он действительно больше зависит от окружающей среды, чем от двигателя.
Грант Томас

@Г-н. Разочарование: вы применяете мой ответ на другой вопрос. OP сказал: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Если вы хотите получить ответ для случая, когда у вас есть 60 веб-сайтов и как работает кэширование пула буферов, задайте этот вопрос :)
Remus Rusanu

Вы здесь эксперт, но, пожалуйста, извините за мою любознательность: разве эта теория предполагает (потому что у нас нет конкретных данных), что машина больше ничего не делает? Или объясняет определенный порог использования памяти неизвестными потребителями?
Грант Томас

Как я уже сказал: you don't have to guess, you can measure this exactly.
Ремус Русану

-5

Вся БД (т.е. данные) не будет храниться в памяти (сервер sql). После изучения индексов и / или ключей он извлечет указатель на то, где в файле данных находятся искомые данные, и, скорее всего, затем отправится на диск для его извлечения. Если нет ключей или индексов, придется сканировать всю кучу.

В зависимости от того, какую версию SQL Server вы используете, могут существовать стратегии для кэширования хорошо используемых данных, чтобы минимизировать чтение с диска.

Вы МОЖЕТЕ получить базы данных в памяти, например, базу данных MySql Cluster .... Это разработано, чтобы поместить всю базу данных в память на кластере серверов для обеспечения высокой доступности / аварийного восстановления и быстрого извлечения данных.


1
У меня недостаточно представителей, чтобы проголосовать за это, но я не уверен, почему вы говорите, что он категорически не будет храниться в памяти. Когда страница считывается в буферный кеш, она остается там до тех пор, пока внутренняя или внешняя нагрузка памяти не приведет к обрезке кеша.
Мартин Смит,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.