标签: sql-server-2005

为什么我们需要重建和重组 SQL Server 中的索引

在网上搜索后,我找不到原因

  1. 为什么我们需要在 SQL Server 中重建和重组索引?

  2. 当我们重建和重组时,内部会发生什么?

网站上的一篇文章说:

当索引碎片大于 40% 时应该重建索引。当索引碎片在 10% 到 40% 之间时,应该重新组织索引。索引重建过程使用更多 CPU 并锁定数据库资源。SQL Server 开发版和企业版有 ONLINE 选项,可以在重建 Index 时开启。ONLINE 选项将在重建期间保持索引可用。

我无法理解这一点,虽然它说WHEN要这样做,但我想知道WHY我们是否需要重建和重组索引?

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

28
推荐指数
1
解决办法
3万
查看次数

是否可以同时恢复sql-server bak和收缩日志?

我们有一个客户的 bak 文件,我们已将其转移到我们的开发人员办公室进行问题调查。备份当前为 25GB,还原的数据库大小大致相同,但需要 100GB 才能还原。我相信这是因为数据库设置为具有 75GB 的事务日志大小。恢复数据库后,我们可以缩小日志文件,但有没有办法在恢复中做到这一点?

sql-server-2005 sql-server backup restore

27
推荐指数
3
解决办法
4万
查看次数

用户定义函数的优化问题

我有一个问题理解为什么 SQL 服务器决定为表中的每个值调用用户定义的函数,即使只应提取一行。实际的 SQL 要复杂得多,但我能够将问题简化为:

select  
    S.GROUPCODE,
    H.ORDERCATEGORY
from    
    ORDERLINE L
    join ORDERHDR H on H.ORDERID = L.ORDERID
    join PRODUCT P  on P.PRODUCT = L.PRODUCT    
    cross apply dbo.GetGroupCode (P.FACTORY) S
where   
    L.ORDERNUMBER = 'XXX/YYY-123456' and
    L.RMPHASE = '0' and
    L.ORDERLINE = '01'
Run Code Online (Sandbox Code Playgroud)

对于此查询,SQL Server 决定为 PRODUCT 表中存在的每个值调用 GetGroupCode 函数,即使从 ORDERLINE 返回的估计行数和实际行数为 1(它是主键):

查询计划

显示行数的计划资源管理器中的相同计划:

计划浏览器 表格:

ORDERLINE: 1.5M rows, primary key: ORDERNUMBER + ORDERLINE + RMPHASE (clustered)
ORDERHDR:  900k rows, primary key: ORDERID (clustered)
PRODUCT:   6655 rows, primary key: PRODUCT (clustered)
Run Code Online (Sandbox Code Playgroud)

用于扫描的索引是: …

sql-server-2005 sql-server

26
推荐指数
2
解决办法
5058
查看次数

带有“NOT FOR REPLICATION”选项的主键

我最近接手了一个项目,我发现在大多数表中,主键都有属性“ NOT FOR REPLICATION”。

我不是 DBA,但肯定在大多数数据库中,没有主键的记录将被视为已损坏。大多数这些记录的主键几乎肯定会在某处用作外键。

这是前开发人员(不再为公司工作)的错误,还是涉及其他一些逻辑?我们甚至不在生产环境中使用复制,所以这实际上并没有影响任何严重的事情,但我想知道删除所有这些我不知道的指令是否有任何其他副作用。

对于与该主题相关的许多搜索词,我没有找到很多有用的点击,所以我相当肯定这只是一个我需要扭转的愚蠢错误,所以这个问题真的是为了缓解我的偏执。

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

25
推荐指数
1
解决办法
3万
查看次数

SQL 编译对 SQL Server 性能的影响有多大?

我正在分析 SQL Server 2005 的一个实例,通过 PerfMon 的SQLServer:SQL Statistics - SQL Compilations/sec指标,我看到平均值约为 170 左右。

我拿出 SQL Profiler 并寻找 SP:Compile 或 SQL:Compile 事件。显然它们不存在。我确实发现Stored Procedure/SP:RecompileTSQL/SQL:StmtRecompile事件。我在 Profiler 中看到的数据量表明这些是错误的事件,尽管我不确定。

所以我的问题。对其中任何一个的回答都会很棒。

  1. 如何查看 SQL Server 中编译的内容?
  2. 我是否选择了错误的指标来查看?在 Perfmon 或 SQL Profiler 中?
  3. 至于Stored Procedure/SP:RecompileTSQL/SQL:StmtRecompile事件在SQL事件探查器,他们不包括持续时间度量。如果这些事件无法查看对系统的时序影响,我该如何衡量这些事件对系统的影响。

performance sql-server-2005 sql-server perfmon

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

SQL Server 中的“No Join Predicate”究竟是什么意思?

MSDN“缺少连接谓词事件类”表示“表示正在执行没有连接谓词的查询”。

但不幸的是,这似乎并不那么容易。

例如,非常简单的情况:

create table #temp1(i int);
create table #temp2(i int);
Select * from #temp1, #temp2 option (recompile);
Run Code Online (Sandbox Code Playgroud)

表中没有数据,也没有警告,尽管它显然没有连接谓词。

如果我查看 SQL Server 2005 的文档(相同的链接,只是其他服务器版本),会有一句额外的句子:“仅当连接的双方返回多于一行时才会产生此事件。 ”这将使在以前的情况下完美的感觉。没有数据,所以双方都返回0行,没有警告。插入行,得到警告。嗯不错。

但是对于下一个令人困惑的情况,我在两个表中插入相同的值:

Insert into #temp1 (i) values (1)
Insert into #temp1 (i) values (1)
Insert into #temp2 (i) values (1)
Insert into #temp2 (i) values (1)
Run Code Online (Sandbox Code Playgroud)

我得到:

-- no warning:
Select * from #temp1 t1 
    inner join #temp2 t2 on t1.i = t2.i 
option (recompile)
-- has warning:
Select * from …
Run Code Online (Sandbox Code Playgroud)

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

24
推荐指数
1
解决办法
3万
查看次数

授予运行 SQL 服务器作业的权限

我在 MSSQL Server 2005 上有一份工作,我想允许任何数据库用户运行。

我不担心安全性,因为作业实际工作的输入来自数据库表。只是运行作业,而不向该表添加记录将什么都不做。

我只是找不到如何授予这项工作的公共权限。

有没有办法做到这一点?在这一点上我唯一能想到的就是让工作不断地运行(或按计划),但因为它只需要很少(可能每几个月一次)做任何实际工作,而且我确实希望工作是一旦存在就完成,这似乎不是最佳解决方案。

sql-server-2005 security sql-server permissions

23
推荐指数
2
解决办法
9万
查看次数

聚集索引和非聚集索引之间的性能差异

我正在阅读ClusteredNon Clustered Indexes

Clustered Index- 它包含数据页。这意味着完整的行信息将出现在聚集索引列中。

Non Clustered Index- 它仅包含聚集索引列(如果可用)或文件标识符 + 页码 + 页面中的总行数形式的行定位器信息。这意味着查询引擎必须采取额外的步骤来定位实际数据。

查询- 我如何借助实际示例来检查性能差异,因为我们知道该表只能有一个Clustered Index并且提供sortingatClustered Index ColumnNon Clustered Index不提供sorting并且可以支持 999 Non Clustered IndexesinSQL Server 2008和 249 in SQL Server 2005

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

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

什么会导致镜像会话超时然后进行故障转移?

我们有两个生产 SQL Server 运行 SQL Server 2005 SP4 和累积更新 3。两台服务器都在相同的物理机器上运行。DELL PowerEdge R815 配备 4 个 12 核 CPU 和 512GB(是 GB)内存,以及用于所有 SQL 数据库和日志的 10GB iSCSI SAN 连接驱动器。操作系统是带有所有 SP 和 Windows 更新的 Microsoft Windows Server 2008 R2 企业版。操作系统驱动器是一个 RAID 5 阵列,包含 3 个 72GB 2.5" 15k SAS 驱动器。SAN 是一个 Dell EqualLogic 6510,带有 48 个 10K SAS 3.5" 驱动器,配置为 RAID 50,为 2 个 SQL Server 划分为各种 LUN,并且还共享带有一台 Exchange 机器和几台 VMWare 服务器。

我们有 20 多个数据库,其中 11 个使用见证服务器以高可用性镜像。见证服务器是一台运行 SQL Server 实例的低功耗机器,它除了提供见证服务外别无其他用途。最大的镜像数据库是 450GB,产生大约 100-300 iops。数据库镜像监视器报告的当前发送速率约为每秒 …

sql-server-2005 sql-server mirroring troubleshooting

23
推荐指数
1
解决办法
2万
查看次数

“避免基于递增键创建聚集索引”是 SQL Server 2000 天以来的神话吗?

我们的数据库由许多表组成,其中大多数使用整数代理键作为主键。这些主键中约有一半位于标识列上。

数据库开发始于 SQL Server 6.0。

从一开始就遵循的规则之一是,避免根据递增键创建聚集索引,正如您在这些索引优化技巧中找到的那样。

现在使用 SQL Server 2005 和 SQL Server 2008,我强烈的印象是情况发生了变化。同时,这些主键列是表的聚集索引的完美首选。

sql-server-2005 sql-server clustered-index

22
推荐指数
3
解决办法
4675
查看次数