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.
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.
SQL Server Database Engine
oznaczaA Single Instance
. Za każdym razem, gdy musisz zmienić serwer okna dialogowego połączenia, z którym się łączysz (np.localhost\dev
Vslocalhost\test
), jest to nowy „Instancja” lub nowy „Silnik”. Pomyślałem, że to wyjaśnię.Każda instancja liczy się osobno, ponieważ ma osobny proces.
źródło
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
źródło
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ć.