问题标签 [sql-server-performance]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 同一索引操作上的不同估计行?
简介和背景
我不得不优化一个简单的查询(下面的例子)。在重写了几次之后,我认识到一个相同索引操作的估计行数会因查询的编写方式而异。
最初该查询进行了聚集索引扫描,因为生产中的表包含一个二进制列,该表非常大(大约 100 GB)并且执行全表扫描需要太多时间。
问题
为什么同一索引操作的估计行数不同(示例将显示)?优化器在这里做什么?
示例数据库 - 我使用的是 SQL Server 2008 R2
我试图创建一个非常简单的生产表版本来显示行为。
准备工作做好了,我们开始查询
我们先来看看统计,看看RANGE_HI_KEY=8
,有 489 个 EQ_ROWS
现在我们进行查询。第一个是我必须优化的原始查询。执行时请激活当前执行计划。看一下操作“index seek (nonclustered) [DetailTable].[IX_DetailTable]”
分析和最终问题
请看一下操作“index seek (nonclustered) [DetailTable].[IX_DetailTable]”
上面脚本中的注释显示了我得到的估计和实际行数的值。
在我们的生产环境中,该表有 3300 万行,上述查询中的估计行数从 300 万到 1600 万不等。
总结一下:
当在 DetailTable 和 MasterTable 之间进行连接时,估计的行数是 12.5%(主表中有 8 个值,这是有道理的,有点……)
当在 DetailTable 和表变量之间进行连接时,估计的行数为 10%
当在 DetailTable 和临时表之间进行连接时,估计的行数与实际行数完全相同
问题是为什么这些值不同?
统计数据是最新的,做出估计应该很容易。
我只是想明白这一点。
.net - 优化每分钟有大量数据库请求的应用程序
我必须free demo
在我的应用程序中为最终用户提供一些服务。免费演示可能是30 mins, 1 hours, 5 hours
等 ( predefined time
) 为新用户一次。
用户也可以部分地消耗这些时间。就像在 30 分钟的免费演示中一样,他们可以使用今天的 10 分钟、明天的 15 分钟和第二天的其余时间等。现在,如果用户选择 30 分钟的免费演示并登录并使用该服务。我可以通过他的开始时间和结束时间限制用户 30 分钟。如果开始和结束时间的总和等于 30 分钟,我可以将它们发送到付款页面。
现在问题出现在一些不确定的情况下,例如用户在活动会话期间关闭浏览器或他们的互联网停止工作或其他任何事情。在此,由于缺少结束时间,我无法计算他们消耗的时间。
场景可能如下所示(30 分钟演示)。
我可能同时有超过 100000 个用户使用我们的服务,所以我正在为此寻找一个有效的解决方案。
据我了解,我可以创建一个单独的作业来检查用户的 LastActiviteTime,并在此基础上更新他们在数据库中的 Consumed(mins)。该作业将每分钟执行一次,另一方面,每个会话用户的浏览器都会更新LastActiveTime
数据库。
这可以解决我的问题,但我不太确定我的应用程序的性能,因为每分钟有大量的数据库请求。
sql - SQL 性能
我已经用Xeon 处理器替换了我的旧处理器。我没有超线程。我的旧处理器具有超线程并且工作正常。
我安装了 SQL Server 2012 标准版。我在服务器上有一个单独的 SQL 服务器实例,具有 92GB 的 RAM。
现在,在更改处理器之后。我在 perfmon 结果中得到了非常高的 CPU 和 100% 的页面错误。
1) 超线程是性能的关键因素吗
2) 是否需要进行任何检查以确保 SQL 服务器已设置为利用来缓解这些页面错误。
3) 是否有任何 DMV 用于等待统计信息,我需要检查 SQL 性能以提供一些关键见解。
4) 是否有我需要评估的 SQL/系统性能计数器的最佳实践。
我遇到的问题是 perfmon 非常占用资源,因此无法在生产服务器上运行它。是否有任何最佳实践来避免这些问题。
5) MAXDOP、处理器关联或 I/O 关联是否值得更改。
sql-server - 现在 NHibernate 生成的 SQL 是否比 SP 中的手写语句慢?
我想知道在 sql server 2012 db 中插入/更新/删除的一般性能,数据量有时会达到 20 m。表中的行。
我可以信任 NHibernate 生成最佳查询吗?
sql-server - SQL Server Over Partition By 和 Group By 的性能比较
Over Partition By
尽管 SO 中已经发布了一些关于和之间区别的问题Group By
,但我没有找到关于哪个表现更好的明确结论。
我在 SqlFiddle设置了一个简单的场景,Over (Partition By)
似乎拥有更好的执行计划(但是我对它们不太熟悉)。
表中的数据量是否应该改变这一点?Over (Partition By)
那么最终表现会更好吗?
sql-server - 在查询计划中强制位图过滤器
有没有办法在三表内连接中强制位图过滤器运算符。查询是并行运行的,我在其中有一个 where 子句,它从一个表中过滤了大约一半的行,但我没有看到位图过滤器运算符。
我找不到任何查询提示,只是想知道是否有任何其他方法可以使用位图运算符测试查询计划?
sql-server - 跟踪锁的最佳方法 - SQL Server
我们发布了一个新的 sp,在测试期间我们发现它在运行时会阻塞其他 OLTP 事务。我们发现最初是因为新的 sp 导致表上的锁升级,我们减少了批量大小的数量并且能够避免这种情况。即使在避免锁升级之后,它仍然会阻止即将到来的 oltp 事务。我认为它锁定了 oltp 事务正在更新的同一行。
我需要找到一种方法来跟踪新 sp 持有和释放的所有锁。我尝试了跟踪/xevents(锁定获取/释放),它看起来不像捕获所有锁,可能是因为它发生得太快了。
只是为了了解获取锁的样子,我通过 select * from atable 对其进行了测试。但它给了我不同的结果。当我们选择 * 时,它不会放置一系列页面锁,所以我应该在跟踪中看到共享页面锁。但我所看到的只是获取和释放 IS 锁。
跟踪给定事务的所有锁的最佳方法是什么?
sql-server - SQL Server 2012 - 100% CPU 直到冷重启
我们有一个带有数据库镜像的 SQL Server 2012:
- 2 Windows Server 2012 R2 (SQL Server) +
- 1 个 Windows 7 见证人 +
- 2 Windows Server 2012 R2 (IIS) 与 NLB 一起使用
服务器处理器:
- 英特尔至强 CPU E5-2609 v2
- 内存:16GB
在测试中,镜像服务器(B
)的 CPU 增加到 50% 左右(通常应该在 10% 以下),主服务器( )的 CPU 增加到 50%A
左右。
系统速度大大降低。
在我们软重启镜像服务器 ( B
) 后,CPU 增加到 70%,主体服务器 ( A
) 保持不变。但是当我们软重启主服务器 ( A
) 时, ( B
) CPU 增加到 100% 并且 ( A
) CPU 增加到 60%。大多数连接显示时间已过期。
我们断开与服务器的所有连接(拔下网线),只保留 4 台服务器和见证。
两台服务器的 CPU 保持不变。
A
我们在 ( ) & ( )上重启 SQL 服务后B
,问题没有改善。
我们检查了没有具体的阻塞查询,sp_who
连接正常。
直到我硬重启服务器,系统恢复正常。
感谢任何想法,谢谢!
sql-server - sql server 表值参数存储过程限制
我正在使用表值参数存储过程SQL Server 2008/2012
。过去我在传递 50k 行时遇到实例问题(实例停止响应、内存问题),所以现在我将 tvp 中的行数限制为 5-10k 。
传递给表值参数存储过程的行数是否有限制SQL Server 2012/2016?
有没有办法以安全的方式使用传递 >=100k 的 tvp 存储过程?有没有更好的方法来解决这个问题?
谢谢