Czy pamięć SQL Server Express i limit procesora przypadają na instancję?

32

Jeśli mam 8 GB pamięci RAM na serwerze i uruchamiam 4 instancje SQL Server Express, czy całkowity limit pamięci używany przez SQL Server będzie wynosił 1 GB czy 4 GB?

Czy wskazane byłoby uruchomienie wielu takich instancji, aby umożliwić każdej bazie danych lepsze wykorzystanie zasobów (przy założeniu, że serwer ma dużo zasobów)?

wizzardmr42
źródło

Odpowiedzi:

27

Jeśli mam 8 GB pamięci RAM na serwerze i uruchamiam 4 instancje SQL Express, czy całkowity limit pamięci używany przez SQL Server wyniesie 1 GB czy 4 GB?

Każde wystąpienie może wykorzystać do 1 GB pamięci dla puli buforów . Każde wystąpienie może zużyć nieco więcej niż 1 GB, ponieważ nie wszystkie przydziały pamięci przechodzą przez pulę buforów. W twoim przypadku maksymalna pamięć używana przez cztery instancje dla puli buforów wynosiłaby 4 GB.

Ekstrakt BOL

Aby to potwierdzić, uruchomiłem dwa wystąpienia aparatu bazy danych Express Server SQL Server 2008 , wykonałem pewne czynności, aby załadować (osobne) pule buforów, a następnie spojrzałem na wykorzystanie pamięci na wystąpienie na wiele sposobów, na przykład używając DBCC MEMORYSTATUS lub przez zliczenie liczby buforów za pomocą DMV sys.dm_os_buffer_descriptors .

Poniższe numery wykorzystania pamięci fizycznej uzyskano przy użyciu jednoczesnych zapytań przeciwko systemowej pamięci DMV sys.dm_os_process_memory dla każdej instancji silnika bazy danych:

SELECT 
    dopm.physical_memory_in_use_kb 
FROM sys.dm_os_process_memory AS dopm;

Wydajność:

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

Każda z nich przekracza nieco 1 GB, ponieważ całkowite użycie pamięci fizycznej obejmuje więcej niż tylko użycie puli buforów, jak wspomniano wcześniej.

Czy wskazane byłoby uruchomienie wielu takich instancji, aby umożliwić każdej bazie danych lepsze wykorzystanie zasobów (przy założeniu, że serwer ma dużo zasobów)?

Jeśli bazy danych w każdej instancji są funkcjonalnie niezależne, to co najmniej wykonalne jest uruchomienie wielu instancji Express w ten sposób, chociaż należy zwrócić szczególną uwagę na konfigurację, a konserwacja może być bardziej złożona.

Lepszym rozwiązaniem może być skorzystanie z innej edycji, takiej jak w pełni funkcjonalna (i bardzo tania) wersja dla programistów, jeśli zamierzone użycie jest zgodne z licencją). Aby uzyskać jasną odpowiedź na ten temat, musisz powiedzieć znacznie więcej o okolicznościach.

Paul White mówi GoFundMonica
źródło
3
Warto również zauważyć, że dla bystrego czytelnika: SQL Server Database Engineoznacza A Single Instance. Za każdym razem, gdy musisz zmienić serwer okna dialogowego połączenia, z którym się łączysz (np. localhost\devVs localhost\test), jest to nowy „Instancja” lub nowy „Silnik”. Pomyślałem, że to wyjaśnię.
jcolebrand
7

Każda instancja liczy się osobno, ponieważ ma osobny proces.

TomTom
źródło
1
Zakładam, że masz pewność, że ogranicznik nie jest stosowany we wszystkich procesach?
-8

W programie SQL Express aparat bazy danych może zużywać tylko 1 GB pamięci RAM , a dowolna baza danych nie może być większa niż 10 GB.

Tak więc 4 instancje nadal musiałyby współdzielić 1 GB pamięci RAM.

Możesz dowiedzieć się o wiele więcej na http://msdn.microsoft.com/en-us/library/cc645993(v=SQL.110).aspx .

Podobna dyskusja na temat przepełnienia stosu mówi, że jest to właściwa odpowiedź BTW, więc nie trzeba głosować za: https://stackoverflow.com/questions/1169634/limitations-of-sql-server-express

Ta strona mówi to samo, nawet jeśli dotyczy SQL Server Express 2005: http://www.edugeek.net/forums/windows-server-2000-2003/55183-sql-server-express-2005-memory-limit- per-instance.html

Społeczność
źródło
3
Niekoniecznie musi to nastąpić - czy jest to 1 silnik na serwer czy na instancję?
1
OK, to implikuje, ale możliwe jest również, że przegapili to na linii limitu pamięci.
1
Tylko dlatego, że jest w Internecie, to musi być prawda. Nigdy nie pozwolą, aby coś złego było w Internecie. ~ Mówiąc, że w tym przypadku chodzi o to, że musi istnieć proces zarządzania lub coś upieczonego w systemie operacyjnym wyłącznie w celu ograniczenia wszystkich SQL Express na zawsze. Naprawdę nie sądzę, aby tak się stało (AKA absolutnie tak się nie stało, ponieważ oddycham tlenem i potrafię naprawdę dobrze podążać za logiką), więc faktem jest, że sam proces zarządza ilością pamięci RAM używany.
jcolebrand
2
Błaganie ludzi o usunięcie negatywnych opinii na temat naturalnie złej odpowiedzi jest mało prawdopodobne, aby uzyskać pozytywne opinie, bez względu na cytowane źródło. Jeśli naprawdę chcesz zacytować źródło, załaduj kilka wystąpień i pokaż ich rzeczywiste obciążenie w pamięci. To jedyny sposób, aby wiedzieć na pewno. Albo to, albo pokaż nam kod Microsoft, który reguluje zachowanie SQL Express. Jest to zawsze zarządzanie instancjami, ponieważ każda usługa jest niezależna od góry do dołu. Wszystkie usługi zarządzania działają na portach.
jcolebrand
2
Maximum memory utilized (SQL Server Database Engine)Zauważ, że używają tam tej samej terminologii, co na linii: Maximum Compute Capacity Used by a Single Instance (SQL Server Database Engine)1(dla tych, którzy grają w domu, chodzi o to, że są oni tymi samymi pomiarami) msdn.microsoft.com/en-us/library/... i ja również Uwielbiam to, jak odpowiedź na SO, która była powiązana, jest ZŁA ŹLE ŹLE ŹLE. Zacznij od „1 rdzenia lub 4 gniazd”, redaktorzy nie mogą nawet poprawnie skopiować i wkleić.
jcolebrand