Чи обмеження пам’яті SQL Server Express та процесора на примірник?


32

Якщо у мене на сервері є 8 Гб оперативної пам’яті і я запускаю 4 екземпляри SQL Server Express, чи буде загальний обсяг пам’яті, який використовує SQL Server, 1 Гб або 4 ГБ?

Чи було б доцільно запустити кілька екземплярів на кшталт цього, щоб кожна база даних змогла краще використовувати ресурси (якщо припустити, що сервер має достатньо ресурсів)?

Відповіді:


27

Якщо у мене на сервері є 8 ГБ оперативної пам’яті і я виконую 4 екземпляри SQL Express, чи буде загальний обсяг пам’яті, який використовує SQL Server, 1 Гб або 4 ГБ?

Кожен екземпляр може використовувати до 1 ГБ пам'яті для буферного пулу . Кожен екземпляр може використовувати трохи більше 1 ГБ, оскільки не всі виділення пам'яті проходять через буферний пул. У вашому випадку максимальна пам'ять, що використовується чотирма екземплярами для буферного пулу, складе 4 Гб.

Екстракт BOL

Для підтвердження я запустив два екземпляри бази даних SQL Server 2008 Express Data Engine, здійснив деяку діяльність для завантаження (окремих) пулів буфера, а потім роздивився використання пам’яті певного екземпляра кількома способами, наприклад, використовуючи DBCC MEMORYSTATUS або шляхом підрахунку кількості буферів за допомогою DMV sys.dm_os_buffer_descriptors .

Наведені нижче цифри використання фізичної пам'яті були отримані за допомогою одночасних запитів до системи DMV sys.dm_os_process_memory для кожного примірника двигуна бази даних:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Вихід:

╔═══════════╦═══════════╗
 Instance1  Instance2 
╠═══════════╬═══════════╣
   1102872    1059812 
╚═══════════╩═══════════╝

Кожен з них трохи перевищує 1 Гб, оскільки загальне використання фізичної пам'яті включає більше, ніж просто використання буферного пулу, як згадувалося раніше.

Чи було б доцільно запустити кілька екземплярів на кшталт цього, щоб кожна база даних змогла краще використовувати ресурси (якщо припустити, що сервер має достатньо ресурсів)?

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

Можливо, вам краще послужити за допомогою іншого видання, наприклад, повнофункціонального (і дуже дешевого) версії для розробників, якщо призначене використання відповідає ліцензії). Вам потрібно буде сказати набагато більше про обставини, щоб отримати чітку відповідь з цього приводу.


3
Також зверніть увагу, для проникливого читача: SQL Server Database Engineзасоби A Single Instance. Кожен раз, коли вам доведеться змінювати діалоговий сервер підключення, до якого ви підключаєтесь (наприклад, localhost\devпроти localhost\test), це новий "Екземпляр" або новий "Двигун". Просто думав, що я проясню це.
jcolebrand

7

Кожен екземпляр вважається окремим, оскільки він має окремий процес.


1
Я припускаю, що ви впевнені, що обмежувач застосовується не в усіх процесах тоді?

-8

У SQL Express двигун бази даних може споживати лише 1 ГБ оперативної пам’яті , а будь-яка БД не може перевищувати 10 ГБ.

Таким чином, 4 екземпляри все одно повинні були б поділити цю 1 Гб оперативної пам’яті.

Дізнатися більше можна на веб- сайті http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Подібна дискусія тут, на Stack Overflow, говорить, що це правильна відповідь BTW, тому не потрібно зволікати: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Ця сторінка говорить те саме, навіть якщо йдеться про SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- per-instance.html


3
Це не обов'язково слідувати - це 1 двигун на один сервер чи екземпляр?

1
Гаразд, це означає, але також можливо, що вони пропустили його на ліміті пам'яті.

1
Просто тому, що це в Інтернеті, це повинно бути правдою. Вони ніколи не дозволять, щоб щось не було в Інтернеті. ~ Сказавши це, щоб сказати, що тут проблема полягає в тому, що повинен бути процес управління або щось випечене в ОС з єдиною метою - назавжди обмежити всі SQL Express. Я дійсно не думаю, що цього сталося (AKA, це абсолютно не сталося, виходячи з того, що я дихаю киснем і дуже добре слідую логіці), тому факт полягає в тому, що сам процес управляє кількістю оперативної пам'яті б / в.
jcolebrand

2
Просити людей зняти потворні записки на те, що, природно, є поганою відповіддю, навряд чи зможе отримати вас, незалежно від того, яке джерело ви цитуєте. Якщо ви дійсно хочете цитувати джерело, завантажте кілька екземплярів і покажіть їх фактичне навантаження в пам'яті. Це єдиний спосіб точно знати. Або це, або покажіть нам код Microsoft, який керує поведінкою SQL Express. Це завжди управління екземплярами, тому що кожна служба є самодостатньою зверху вниз. Всі служби управління працюють над портами.
jcolebrand

2
Maximum memory utilized (SQL Server Database Engine)Зверніть увагу, як вони там використовують ту саму термінологію, що і в лінії: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(для тих, хто грає вдома, суть у тому, що вони є однаковими вимірюваннями) msdn.microsoft.com/en-us/library/…, і я також люблю, як відповідь на SO, з якою було пов'язано, WRONG WRONG WRONG. Почніть з "1 ядра або 4 розеток", редактори навіть не можуть скопіювати їх правильно.
jcolebrand
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.