gpt4 book ai didi

.net - SQL Express 客户端内存使用量与 SQL Enterprise 客户端内存使用量不同

转载 作者:行者123 更新时间:2023-12-03 00:46:55 25 4
gpt4 key购买 nike

我在使用同一应用程序针对同一数据库的两个副本时,发现 .Net 应用程序内存使用情况存在很大差异。唯一的区别是,在场景 1 中,我使用的是注册到 SQL Server 2005 Express 实例的数据库的本地副本,而在场景 2 中,我使用的是注册到 SQL Server 2005 Express 实例的数据库的远程副本。 SQL Server 2008 Enterprise 的实例。

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

但是 - 我看到它们之间的内存使用量存在巨大差异 (1GB) - 即 SQL Express 场景主要使用 1GB 以上的内存。 SQL Express 似乎也慢得多,特别是在处理大表和大型查询时 - 但我希望此内存命中发生在 SQL 中,而不是发生在我的消费/客户端应用程序上???

该应用使用 System.Data.SqlClient.SqlConnection 连接到 SQL Server,并执行频繁的 SqlCommandSqlBulkCopy 操作。

任何有用的想法将不胜感激!

最佳答案

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

例如:

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

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

关于.net - SQL Express 客户端内存使用量与 SQL Enterprise 客户端内存使用量不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com