标签: sql-server

更改 SQL Server 中的索引创建内存设置有什么影响?

我正在尝试为 SQL Server 2008 数据库创建一些索引,但收到以下错误消息。

消息 8606,级别 17,状态 1,第 1 行 此索引操作每个 DOP 需要 1024 KB 内存。DOP 为 2 的 2048 KB 总需求大于为高级服务器配置选项“索引创建内存 (KB)”设置的 sp_configure 值 704 KB。增加此设置或减少 DOP 并重新运行查询。

目前,索引创建内存设置为 794KB,每个查询的最小内存设置为 1024KB。更改这些值会产生什么影响?尤其是在性能方面。我应该更改它们,创建索引并将它们更改回来还是应该将其设置为 0?

sql-server-2008 sql-server

12
推荐指数
1
解决办法
2943
查看次数

您如何从 Microsoft SQL Server 中清除所有旧的查询计划?

我们有一个使用 Microsoft SQL 数据库的现成应用程序。在这个应用程序中,我们为每个报告挑选和选择各种选择标准。此应用程序然后运行这些报告。

我相信我们有一个查询计划问题。我们每天运行的第一个报表,运行速度非常快 7 分钟。我们在第一个报告之后运行的任何报告都需要一个多小时。

每天晚上,我们都会运行一个计划任务来停止和启动 SQL Server 代理和 SQL Server。在这个 SQL Server 实例中还有大约 25 个其他数据库。没有其他数据库有性能问题,只有我之前提到的现成产品。

有没有办法清除 SQL Server 当前内存中的所有查询计划?

如何在不影响依赖同一服务器上其他数据库的 30 个左右的用户的情况下执行此操作?

performance sql-server query

12
推荐指数
3
解决办法
2万
查看次数

SQL Server 2005 中可空列的唯一约束

在我正在进行的这个项目中,我需要将特定字段设置为唯一(不是问题!)但如果该字段为空,我希望忽略约束。在 Sql Server 2008 中,我使用如下所示的过滤索引,但这在早期版本的 SQL 中不可用!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

但我不认为这在 SQL Server 2005 中可用。事实上,这篇博客文章表明有一种使用触发器来检查唯一性的解决方法。有没有人有这样的例子?或者也许是另一种选择?

不幸的是,升级到 SQL Server 2008 不是这个特定客户端的选项!!

sql-server-2005 sql-server constraint

12
推荐指数
2
解决办法
2223
查看次数

是否有可靠的方法来确定何时应该运行 DBCC CLEANTABLE 来回收空间?

最近,我不再只是在文件利用率接近 80% 时增加文件,而是更主动地通过常用技巧回收空间,例如对堆进行碎片整理、添加和删除聚集索引、实现行或页面压缩等。

但是,在某些情况下,我可以通过执行DBCC CLEANTABLE回收更多空间。我的环境中有数百个数据库,不可能知道用户在每个数据库中做了什么,并且完全可以接受涉及删除固定长度列的更改。我通常通过查看我编写的一些对象空间利用脚本中的行数与页数来发现这些机会。我想通过尝试自动检测这些场景来更进一步。

我想知道的是,是否有人在积极监控此类机会,如果是,您具体在寻找什么?

我的想法是写一些东西,收集一行的最大和最小大小、表中的行数、分配的页数和使用的页数,然后做一些基本的数学运算来记录结果远远超出了“预期”。

sql-server-2005 sql-server-2008 sql-server

12
推荐指数
1
解决办法
1410
查看次数

SQL Server:仅用于系统表的文件组?

我们的企业标准之一是为用户表/索引使用单独的文件组/文件。这被设置为默认值,因此无需限定 CREATE TABLE 语句。

所以它看起来像这样

  • fileid 1 = 系统表,MDF
  • 文件 ID 2 = t-log = LDF
  • fileid 3 = 用户资料 = NDF

这里的任何人都可以帮助我理解为什么强制执行此操作的原始理由吗?


我会坦白说我认为这是巫毒教。上午错了......?

编辑:我知道如何使用文件组来分离索引/分区/存档,以及如何逐步恢复。这个问题是关于在同一卷上为系统表使用单独的文件组。

sql-server filegroups disk-structures

12
推荐指数
2
解决办法
1502
查看次数

删除列上的约束(索引)

如何修改带有索引的表的类型?我试图在一个空表上做一个改变列来修改从日期时间到 varchar(15) 的类型,并得到错误说它依赖于列(结果是索引)。

通过右键单击索引并编写 drop 脚本,我能够在本地轻松解决此问题,但是我需要在无法访问索引名称的其他服务器上推出此功能。

有没有办法制作一个可以删除任何索引的脚本,让我在列上更改数据类型然后读取索引?谢谢!

sql-server constraint scripting alter-table

12
推荐指数
1
解决办法
9632
查看次数

在大型数据集上按小时分组

使用 MS SQL 2008,我从 250 万条记录中选择了一个平均字段。每条记录代表一秒。MyField 是这些 1 秒记录的每小时平均值。当然服务器CPU命中100%,选择时间太长。我可能需要保存这些平均值,以便 SQL 不必在每个请求中选择所有这些记录。可以做什么?

  SELECT DISTINCT
         CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour,
         MIN([timestamp]) as TimeStamp,
         AVG(MyField) As AvgField
    FROM MyData
   WHERE TimeStamp > '4/10/2011'
GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR)
ORDER BY TimeStamp
Run Code Online (Sandbox Code Playgroud)

sql-server query

12
推荐指数
2
解决办法
7778
查看次数

终止应用程序会终止 SQL 连接吗?

假设应用程序已与 SQL\xc2\xa0Server 建立了两个连接。

\n
    \n
  1. 会话正在主动运行查询
  2. \n
  3. 会话正在休眠,等待下一条指令
  4. \n
\n

通过任务管理器终止此应用程序是否会终止两个 SQL 连接?

\n

sql-server sql-server-2019

11
推荐指数
2
解决办法
3984
查看次数

如果禁用非聚集索引,统计信息是否仍然使用?

tl;dr - 正如标题所述 - 如果我禁用表上的非聚集索引,是否仍使用该索引的链接统计信息?


我知道有很多关于“删除与禁用索引”的问题......但我找不到专门涵盖统计数据的问题。

我知道统计数据没有改变或改变(至少这是我从 MS 文档中收集到的)。但我的问题是统计数据是否仍然被使用


作为背景,我正在开展一个大型索引调整项目。它涉及在数百个相同的数据库中添加/删除索引,但工作负载模式各不相同。总共有超过 200 万个索引。

我的第一步是删除所有“未使用”的索引。然而,我并没有放弃它们,而是考虑禁用它们,以便保留定义。这将允许我在表中记录任何禁用索引的实例、数据库、对象 ID 和索引名称/ID。如果此后性能开始下降,可以重新启用(重建)索引。

但是,如果已禁用索引的统计信息仍用于生成计划...那么禁用它们不会产生与删除它们相同的性能影响。如果是这种情况,那么禁用索引并不是“真正的”性能影响测试,如果禁用的索引最终被删除,我可能会面临引入性能问题的风险。

index sql-server sql-server-2017

11
推荐指数
1
解决办法
1464
查看次数

为什么 sys.fn_xe_file_target_read_file 需要对 datetime2 列进行显式转换?

根据文档,返回的列timestamp_utc应为datetime2(7)类型

但是当我这样查询时

SELECT 
    *
FROM sys.fn_xe_file_target_read_file('system_health*.xel', null, null, null)
WHERE timestamp_utc > dateadd(hour, -1, GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

它不返回任何行。仅当我向datetime2添加显式转换时,它才返回行

SELECT 
    *
FROM sys.fn_xe_file_target_read_file('system_health*.xel', null, null, null)
WHERE cast(timestamp_utc as datetime2(7)) > dateadd(hour, -1, GETUTCDATE())
Run Code Online (Sandbox Code Playgroud)

这与文档中的最后一个示例匹配(即使没有引起注意)

在此输入图像描述

这是为什么?

sql-server extended-events sql-server-2022

11
推荐指数
1
解决办法
472
查看次数