Чи можу я помістити цілу БД в пам'ять?


9

Моя база даних розміром близько 1 Гб (згідно з файлом mdf мого db). Мій сервер баз даних має 4 Гб оперативної пам’яті. Дивлячись на споживання пам’яті на комп’ютері під час активного використання, він становить приблизно 85% використовуваного (включаючи ОС тощо)

Чи означає це, що вся діяльність з читання БД працює лише в пам'яті (тобто весь db сидить в пам'яті)? чи все ж є випадок, коли він повинен був би перейти на диск?


1
Ну, для порівняння, яке використання, коли програма не активна? Як правило, однією з переваг системи баз даних є те, що їй не потрібен повний файл в пам'яті, але він буде відповідати тому, що ви витягнете з нього, в пам'ять, поки ви не залишите його в інше місце. Мені доведеться оголосити "ні".
Грант Томас

@Містер. Розчарування: я згоден, що це користь, але у випадку, коли він може залишити повний файл у пам'ять (як у цьому випадку), чи не так?

Якщо це потрібно, то так. Але на вимогу абонентів та даних, які вони вимагають, не само собою, як звичайно. Тож, як правило, якщо у вас є проблема з пам'яттю бази даних, це буде з кодом виклику або допоміжним програмним забезпеченням або сумішшю цих двох.
Грант Томас

1
Приклад для перспективи: Я знаю дуже велику Інтернет-компанію, яка володіє кількома дуже великими сайтами порталів. Вони доставляють приблизно. 300 мільйонів оголошень від їх власних прихильників для цих порталів. Структура рекламних серверів така, що є одна велика БД Oracle з усією інформацією для обліку та націлювання, але є 32 великі (32 ГБ оперативної пам’яті) сервери, що містять менші бази даних (з лише активними на даний момент оголошеннями) в оперативній пам’яті . Вони не торкаються диска, вони не повинні: у них є лише 1/1000 секунди, щоб знайти рекламу, яку розмістити, коли надходить запит, будь-який доступ до диска зробить цю мету неможливою.

Відповіді:


5

Так, вся база даних, ймовірно, зберігається в пам'яті. Він буде видаляти брудні сторінки на диск через проміжки пропуску. Зауважте, що всі оновлення повинні записуватись у журнал та чекати, коли записи журналу будуть затверджені на довговічному сховищі перед тим, як здійснити його. Ця стара стаття Основи вводу / виводу SQL Server 2000 містить усі деталі, які вам коли-небудь знадобляться, та багато іншого.

Але не потрібно здогадуватися, ви можете точно виміряти це і побачити, чи трапляється це чи ні. Відповідні лічильники ефективності :

  • Тривалість життя сторінки Кількість секунд сторінка залишиться в буферному пулі без посилань.
  • Читання сторінки / сек Кількість прочитаних сторінок фізичної бази даних, що видаються за секунду. Ця статистика відображає загальну кількість читань фізичних сторінок у всіх базах даних. Оскільки фізичний ввід / вивід дорогий, ви зможете мінімізувати витрати, використовуючи більший кеш даних, інтелектуальні індекси та більш ефективні запити, або змінивши дизайн бази даних.
  • Сторінка запису / сек Кількість записів сторінки фізичної бази даних, виданих за секунду.

"Так, вся база даних, ймовірно, зберігається в пам'яті." Так, у випадку нашого виробничого сервера, що має щонайменше ~ 60 веб-сайтів, які використовують спеціалізовану базу даних у майстрі SQL Server, де навіть лише декілька таких прирівнюються до розміру, більшого, ніж наявна в машині пам'ять, як це працює ? Мені спокушається сказати, що немає остаточного дефолту або ймовірності будь-якого сценарію - відповідно до попереднього коментаря, який я зробив, він дійсно більше залежить від навколишнього середовища на відміну від двигуна.
Грант Томас

@Містер. Розчарування: ви застосовуєте мою відповідь на інше питання. 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 .... Це розроблено так, щоб встановити ENTIRE db в пам'ять через кластер серверів для високої доступності / відновлення аварій та швидкого пошуку даних.


1
У мене недостатньо респондентів, щоб проголосувати це, але не впевнений, чому ви говорите, що це категорично не зберігатиметься в пам'яті. Після того, як сторінка буде прочитана в кеш-пам'ять буфера, вона залишиться там, поки тиск внутрішньої чи зовнішньої пам'яті не призведе до обрізання кешу.
Мартін Сміт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.