在我的SQL Server 2008 Std Edition安装中跟踪性能监视器时,我注意到SQL Compilations/sec每5秒左右就会从3秒到大约50秒.
我们还有相对较高的编译率与批量请求/秒.我理解这应该是1/10的比例,但我们的工作更像是8/10.
数据库支持一个繁忙的网站,其中包含许多应用程序,因此很难确定造成过多编译的原因,特别是5秒的峰值.几乎所有的查询都是存储过程调用而不是嵌入式SQL,我们有大量的(48gb)RAM.
有没有办法在给定的时刻查看当前正在编译的查询?如果是这样,我们可以解决任何问题.
我在SQL Server 2012(网络版)中有一个非常大的表(150米+行),它没有聚簇索引和一个非聚集索引.
当我运行这个删除语句时:
DELETE TOP(500000)
FROM pick
WHERE tournament_id < 157
Run Code Online (Sandbox Code Playgroud)
(列名在非聚集索引中),SQL Server生成的执行计划如下所示:
排序步骤看起来有问题 - 它占用了45%的成本,并且它引发了一个警告,说"操作员在执行期间使用tempdb溢出数据".查询需要几分钟才能运行,我觉得它应该更快.
两个问题:
如果这可能会有所帮助,我绝对可以重新审视此表上的索引策略.
希望这一切都有意义 - 提前感谢任何提示.
我正在寻找一种快速的方法来创建在特定列分区的大型SQL Server 2008数据集中的累积总计,可能通过使用多分配变量解决方案.作为一个非常基本的示例,我想在下面创建"cumulative_total"列:
user_id | month | total | cumulative_total
1 | 1 | 2.0 | 2.0
1 | 2 | 1.0 | 3.0
1 | 3 | 3.5 | 8.5
2 | 1 | 0.5 | 0.5
2 | 2 | 1.5 | 2.0
2 | 3 | 2.0 | 4.0
Run Code Online (Sandbox Code Playgroud)
我们传统上使用相关子查询来完成此操作,但是对于大量数据(200,000多行和几个不同类别的运行总计),这并没有给我们提供理想的性能.
我最近阅读了有关在此处使用多个赋值变量进行累积求和的信息
http://sqlblog.com/blogs/paul_nielsen/archive/2007/12/06/cumulative-totals-screencast.aspx
在该博客的示例中,累积变量解决方案如下所示:
UPDATE my_table
SET @CumulativeTotal=cumulative_total=@CumulativeTotal+ISNULL(total, 0)
Run Code Online (Sandbox Code Playgroud)
对于上述示例中的单个用户(用户1或用户2),此解决方案似乎非常快速.但是,我需要按用户进行有效分区 - 按用户按月累计累计.
有没有人知道扩展多重赋值变量概念的方法来解决这个问题,或者除了相关子查询或游标之外的任何其他想法?
非常感谢任何提示.