SQL Express客户端内存使用情况与SQL Enterprise客户端内存使用情况不同

Jac*_*uit 5 .net sql sql-server sql-server-express sql-server-2008

我在.Net应用程序内存使用方面遇到了很大的不同,使用相同的应用程序对同一个数据库的两个副本.唯一的区别是在方案1中我使用注册到实例的数据库的本地副本SQL Server 2005 Express- 并且在方案2中我使用注册到实例的数据库的远程副本SQL Server 2008 Enterprise.

据我所知,我只期望SQL性能和SQL内存使用有所不同(因为Express有1GB的限制).

但是 - 我看到它们之间的内存使用量存在巨大差异(1GB) - 即SQL Express主要使用1GB内存的情况. SQL Express似乎也慢得多,特别是使用大表和大型查询 - 但我希望这个内存命中是在SQL而不是我的消费/客户端应用程序???

应用程序使用System.Data.SqlClient.SqlConnection并连接到SQL服务器并执行频繁SqlCommandSqlBulkCopy操作.

任何有用的想法将非常感谢!

dix*_*pac 1

对于您关于大表和查询上的慢速表达的第二个问题,这是正常的,因为表达版本比企业版本消耗更多的内存和磁盘。企业版使用了一种称为增强预读和扫描(又名旋转木马扫描)的功能,该功能在大型查询的性能方面存在巨大差异。

例如:

假设 UserA 和 UserB 都发出该SELECT * FROM Customer命令,这会导致表扫描。UserA先发出命令;20 秒后,UserB 发出命令。该表有 1 亿行(这是一个非常大的表),并且扫描在未安装非企业版的计算机上运行。UserA 的表扫描开始读取表第一页上的 Customer 表。二十秒后,对 UserB 的扫描开始读取 UserA 已读取的页面,即使某些页面可能已从缓存中刷新回来。有时,此过程会产生巨大的磁盘争用并占用内存。

企业版执行增强型预读和扫描的方式略有不同。与非企业版版本不同,当用户 A 发出SELECT * FROM Customer命令时,企业版开始扫描 Customer 表。当 UserB 20 秒后发出相同的命令时,UserB 的表扫描恰好从 UserA 当前读取的位置开始。UserA 和 UserB 的查询将几乎同时读取 Customers 表的最后一页,但随后 UserB 的扫描将返回到 Customer 表的开头,以扫描 UserA 在 UserB 开始查询之前扫描过的页面。此过程极大地减少了磁盘争用和内存消耗。

  • 这里的关键点是,除非您在配置中指定最大大小,否则企业将“吃掉”所有内存。该产品假定它是服务器上运行的唯一应用程序并适当地配置自身 (2认同)