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服务器并执行频繁SqlCommand
和SqlBulkCopy
操作.
任何有用的想法将非常感谢!
对于您关于大表和查询上的慢速表达的第二个问题,这是正常的,因为表达版本比企业版本消耗更多的内存和磁盘。企业版使用了一种称为增强预读和扫描(又名旋转木马扫描)的功能,该功能在大型查询的性能方面存在巨大差异。
例如:
假设 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 开始查询之前扫描过的页面。此过程极大地减少了磁盘争用和内存消耗。
归档时间: |
|
查看次数: |
209 次 |
最近记录: |