标签: sql-server-2005

DBCC show_statistics:密度与我计算的不符

我在几篇文章中读到列的密度是 (1.0 / count(distinct columnname))。我有一列包含超过 270 万行的大约 260 万个不同值,但 DBCC show_statistics 中的列密度即使在使用 fullscan 更新统计信息后也是 0.48。

我对这个数字可能来自哪里感到困惑。谁能给我解释一下?

sql-server-2005 sql-server

4
推荐指数
1
解决办法
282
查看次数

查询调整以满足超时设置

我们有一个在搜索屏幕上有 30 秒超时的网络应用程序。我已经分析了原始查询并为查询的 9 个连接之一添加了一个缺失的索引。其他诸如预期行数和实际行数之类的东西都很好。没有表或索引扫描。但它仍然没有在 30 秒内出现。它很接近。

我通过使用临时表分解成更小的步骤来重写查询,并且每步骤不超过 2 个连接。它现在在5秒内尖叫。都好。

我的具体问题是这是解决此类问题的正常/常见方法吗?为什么我要以这种方式帮助优化器?

performance sql-server-2005 sql-server query-performance

4
推荐指数
1
解决办法
643
查看次数

使用打印跟踪时间密集型存储过程

我不是数据库管理员,我的 SQL-foo 也不是很好(还),但是有一些任务需要在 MSSQL 中完成,其中一个是一个相当耗时的过程,我从 a CURSORand 中获取WHILE @@FETCH_STATUS = 0,我有多个SELECTs 和 an UPDATEon巨大的桌子。(该程序有效,我已与同事核对过)

现在在脚本或程序中,我将有一个简单的打印 @current_cursor或在每个打印一个计数器WHILE只是为了获得一些反馈。

我怎么能在 MSSQL 中做这样的事情?(使用 Microsoft SQL Server Enterprise Edition v9.00.3042.00,即 SQL Server 2005 Service Pack 2)

我可以做一个print @current_cursor,还是在我的情况下不可行?

编辑

我已经RAISEERROR用以下语句测试了:

DECLARE @cur_id int; 
SET @cur_id = 0;

DECLARE Cur CURSOR FOR
    SELECT ID FROM TableA
    WHERE ID > 100  ORDER BY ID DESC

OPEN Cur
FETCH NEXT FROM …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 sql-server cursors

4
推荐指数
2
解决办法
1692
查看次数

在单个文件中保存多个 SQL 作业

我使用的是 SQL Server 2005,我需要将每个 SQL 代理作业保存在单个“创建于”*.sql 文件中。问题是我得到了大约 20 个 SQL Server,其中包含 15 个(最多 51 个)SQL 作业。

如何在单个文件中轻松导出这些作业?

如果我标记所有作业,它们将保存在一个文件中。手动将每个作业导出到文件需要很长时间。

有人有想法吗?

sql-server-2005 sql-server jobs

4
推荐指数
1
解决办法
2562
查看次数

NUMA 节点 - MAXDOP - PLE

我们有一个服务器,在 2 个 NUMA 上有 8 个 CPU,并启用了超线程。当前 Maxdop 设置为 8,但实际上应该按照本文的 Maxdop 部分设置为 4:

https://support.microsoft.com/en-us/kb/322385

所以我们需要把它改成4。

但是我的问题是将 maxdop 设置为 8 有什么影响?那么并行跨越两个 NUMAS 吗?我问的原因是我们刚刚遇到了一个奇怪的问题,查询返回非常慢,而 PLE 迅速下降。

即使没有针对 SQL 运行,PLE 也没有改进。CXPACKET 等待类型上升。然后突然 CXPACKET 等待类型完全下降,PLE 开始上升,现在已经恢复正常。

在这段时间里,对数据库执行了小查询,但并不是一个查询完成导致 CXPACKET 等待类型下降而 PLE 再次上升的情况 - 我们不知道是什么原因造成的。

一个可能的解释是 MAXDOP 设置不正确。

谁能向我解释跨 NUMA 节点并行执行的影响,是否与使用外部内存时耗尽工作线程和更慢的访问时间相同?

谢谢

sql-server-2005 sql-server memory maxdop numa

4
推荐指数
1
解决办法
717
查看次数

静默启用约束失败

为什么 SQL Server 会默默地无法重新启用外键约束?

我最近尝试使用ALTER TABLE. 大多数成功启用;然而,少数约束仍被 报告为禁用sys.foreign_keys

例子:

ALTER TABLE [dbo].[Table] WITH CHECK NOCHECK CONSTRAINT FK_ConstraintName; 
-- Command(s) completed successfully.

SELECT is_disabled FROM sys.foreign_keys 
WHERE name = 'FK_Constraint' AND parent_object_id = OBJECT_ID('[dbo].[Table]');
-- returns "1", indicating that the constraint is still disabled
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 foreign-key sql-server constraint

4
推荐指数
1
解决办法
311
查看次数

创建视图时无权使用“dbo”

我想创建一个user对服务器内两个数据库的访问最少的数据库。该用户将由第三方人员使用,将商业智能工具集成到我们的数据库中。他们已经指定他们只需要创建视图。

所以,我在服务器上创建一个新用户,那么使用的每个数据库的数据库属性授予他们SELECTCREATE VIEW特权数据库。

然后我使用该用户登录 SSMS,并尝试创建一个视图,但我收到一条消息说

'dbo' 要么不存在,要么我无权使用它。

我试图通过反复试验自己解决这个问题,但我只是不了解 sql server 上的用户权限。我做错了什么,我需要采取哪些额外/不同的步骤?

请记住,我不希望他们拥有比他们需要的最低限度更多的控制权。

sql-server-2005 permissions users

4
推荐指数
1
解决办法
1993
查看次数

日期时间仅作为日期

我知道 SQL Server 2005 不支持DATE,因此不可能将日期时间转换为日期。

我想要做的是在当前一周的一整天内列出所有具有日期时间的记录。

所以我需要在本周星期一创建的所有记录忽略时间戳。目前我正在使用以下内容,它确实显示了本周的周一至周五,但包括时间戳,这意味着我将根据查询的运行时间看到不同的输出:

set datefirst 1

select 
    DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Monday,
    DATEADD(day, 2 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Tuesday,
    DATEADD(day, 3 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as wednesday,
    DATEADD(day, 4 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Thursday,
    DATEADD(day, 5 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) as Friday
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供帮助吗?

我的预期输出将是本周每一天的一列,每周从星期一开始(即:Datefirst 1)。最终,我将在 case 语句中使用它,例如:

CASE
WHEN DateColumn >= DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT( DATETIME, GETDATE())) …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 datetime

4
推荐指数
1
解决办法
1645
查看次数

删除固定长度的列以释放空间是否明智?

我在 SQL Server 2005 中有一个巨大的表。(该表大约 40GB)我正在寻找最安全、最轻松的方式来释放空间或延迟其增长。

该表具有三个固定长度 ( char(10)) 列,它们 a) 完全不需要,b) 几乎完全填充了NULL.

如果我删除这些列,SQL Server 是否会在导入新记录时开始使用数据文件中释放的空间?或者由于分散在许多记录上,它们的碎片性质(我假设)是否意味着 SQL Server 将出于性能原因忽略该空间?

如果我删除它们,我可以运行收缩数据库来释放空间吗?

我是唯一使用这个数据库的开发人员,我知道这些列对于需求来说是多余的。15 年前,当不同的懒惰开发人员创建此数据库时,它们与其他所有列一起添加到平面文件中。

sql-server-2005 sql-server shrink disk-space

4
推荐指数
1
解决办法
554
查看次数

查询 XML 嵌套节点

我需要将每日 XML 文件集成到我的系统中。

XML 文件具有与此类似的架构:

create table txml(id int identity, data xml);
insert into txml (data) values ('
<order>
    <trans DTrans="20170102" HTrans="10:52"></trans>
    <head Id="552665566"></head>
    <lin headId="552665566">
        <dLin Id="00001" CoArt="1111111" CoArtCust="05220001" NameArt="Product1" dateVal="20161115" />
        <acum DCalAcm="20170101" DIniAcm="20161115"><qtyAcm Qty="1101163.00" /></acum>
        <lastOrd Id="95767" QtyLastOrd="12000.00" DLastOrd="20170101" />
        <pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170104"/><dEnd Date="20170108"/></pLin>
        <pLin LType="4"><uni Qty="20000.00"/><dIni Date="20170109"/><dEnd Date="20170112"/></pLin>
        <pLin LType="4"><uni Qty="24000.00"/><dIni Date="20170113"/><dEnd Date="20170116"/></pLin>
    </lin>
    <lin headId="552665566">
        <dLin Id="00002" CoArt="2222222" CoArtCust="05269958" NameArt="Product2" dateVal="20161101" />
        <acum DCalAcm="20170101" DIniAcm="20161101"><qtyAcm Qty="552652.00" /></acum>
       <lastOrd Id="49956" QtyLastOrd="5000.00" DLastOrd="20170101" />
        <pLin LType="4"><uni …
Run Code Online (Sandbox Code Playgroud)

sql-server-2005 xml sql-server

4
推荐指数
1
解决办法
4603
查看次数