如果服务器中有8GB RAM,并且运行4个SQL Server Express实例,那么SQL Server使用的总内存限制是1GB还是4GB?

是否建议运行多个实例,例如这可以使每个数据库更好地利用资源(假设服务器有足够的资源)?

#1 楼


如果服务器中有8GB RAM,并且运行4个SQL Express实例,
SQL Server使用的总内存限制是1GB还是4GB?


每个实例最多可将1GB内存用于缓冲池。每个实例总共可以使用超过1GB的空间,因为并非所有内存分配都通过缓冲池进行。在您的情况下,四个实例用于缓冲池的最大内存为4GB。



要确认,我启动了两个SQL Server 2008 Express数据库实例引擎执行了一些活动以加载(单独的)缓冲池,然后以多种方式查看了每个实例的内存利用率,例如使用DBCC MEMORYSTATUS或通过使用sys.dm_os_buffer_descriptors DMV计数缓冲区的数量。 br />
下面的物理内存使用量是通过在数据库引擎的每个实例上同时对系统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 ║
╚═══════════╩═══════════╝


如前所述,每个物理内存都略大于1GB,因为总物理内存使用量不仅仅包括缓冲池使用率。


建议运行这样的多个实例来启用
每个数据库以更好地利用资源(假设
服务器有足够的资源)?


如果每个实例上的数据库在功能上都是独立的,则至少可以在其中运行Express的多个实例方式,尽管您需要仔细注意配置和维护可能会变得更加复杂。

使用其他版本(例如功能全面(且非常便宜)的Developer)可能会更好版本(如果预期用途与许可相符)。您需要更多地谈论环境,以便在这一点上得到明确的答案。

评论


同样要注意的是,对于精明的读者:SQL Server数据库引擎表示单个实例。每当您必须更改要连接到的连接对话框服务器(例如localhost \ dev与localhost \ test)时,它们都是新的“实例”或新的“引擎”。只是以为我会澄清这一点。

–jcolebrand♦
2012年12月3日在17:20

#2 楼

每个实例都具有独立的进程,因此每个计数都是独立的。

评论


我假设您确定限制器没有应用到所有进程中吗?

– wizzardmr42
2012年12月3日14:27

#3 楼

在SQL Express中,数据库引擎只能消耗1 GB RAM,并且任何DB都不能大于10 GB。因此,仍然有4个实例必须共享该1 GB RAM。

您可以在http://msdn.microsoft.com/zh-cn/library/cc645993(v=SQL.110).aspx中找到更多信息。

此处类似的讨论BTW上的on表示这是正确的答案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

评论


不一定遵循-每个服务器或每个实例1个引擎吗?

– wizzardmr42
2012年12月3日下午14:28

好的,这确实暗示了这一点,但也有可能他们在内存限制行上错过了它。

– wizzardmr42
2012年12月3日15:19

仅仅是因为它在互联网上,所以它必须是真实的。他们绝不会让互联网出现问题。 〜说这儿的问题是,必须有一个管理程序或某些程序要放入OS中,其唯一目的是永远限制所有SQL Express。我真的不认为这发生了(基于我呼吸氧气并且可以很好地遵循逻辑这一事实,也绝对没有发生),所以事实是该过程本身可以管理正在占用的RAM数量。用过的。

–jcolebrand♦
2012年12月3日15:37

不管人们引用什么来历,乞求人们就不好的答案自然而然地删除否决票,并不太可能使您获得赞成票。如果您确实要引用源,请加载多个实例并在内存中显示其实际负载。那是唯一确定的唯一方法。要么,要么向我们展示控制SQL Express行为的Microsoft代码。它始终是按实例管理的,因为每个服务都是自上而下的。所有管理服务都通过端口工作。

–jcolebrand♦
2012年12月3日15:39

使用的最大内存(SQL Server数据库引擎)请注意,它们在此处使用的方式与在线使用的术语相同:单实例(SQL Server数据库引擎)使用的最大计算容量1(对于那些在家中玩耍的人来说,关键在于是因为它们是相同的度量)msdn.microsoft.com/zh-cn/library / ...而且我也喜欢链接到SO的答案是WRONG WRONG WRONG。从“ 1核或4个插槽”开始,编辑器甚至无法正确地复制粘贴。

–jcolebrand♦
2012年12月3日在16:03