在我正在进行的这个项目中,我需要将特定字段设置为唯一(不是问题!)但如果该字段为空,我希望忽略约束。在 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 不是这个特定客户端的选项!!
最近,我不再只是在文件利用率接近 80% 时增加文件,而是更主动地通过常用技巧回收空间,例如对堆进行碎片整理、添加和删除聚集索引、实现行或页面压缩等。
但是,在某些情况下,我可以通过执行DBCC CLEANTABLE回收更多空间。我的环境中有数百个数据库,不可能知道用户在每个数据库中做了什么,并且完全可以接受涉及删除固定长度列的更改。我通常通过查看我编写的一些对象空间利用脚本中的行数与页数来发现这些机会。我想通过尝试自动检测这些场景来更进一步。
我想知道的是,是否有人在积极监控此类机会,如果是,您具体在寻找什么?
我的想法是写一些东西,收集一行的最大和最小大小、表中的行数、分配的页数和使用的页数,然后做一些基本的数学运算来记录结果远远超出了“预期”。
环境:
我们有两台运行 SQL Server 2005 的 32 位 Windows Server 2003 R2 机器。硬件配置是相同的服务器,具有 Xeon 5160 CPU、4GB RAM 和 13GB RAID0。未启用 AWE 和 /3GB 标志。
服务器是使用预定义的安装清单并排设置的,并且两台机器上安装的所有软件都是相同的。
我们知道要检查的每个 SQL 服务器安装设置和补丁级别都是相同的。一个区别是 TEMPDB 在快速机器上为 400MB,而在慢速机器上为 1.2GB。但是,在这两种情况下,我们都没有看到任何 TEMPDB 分配发生。
问题:
有一个存储过程,一个运行 2 秒,另一个运行 15 分钟。在额外的 15 分钟内,几乎没有磁盘活动,也没有内存使用变化,但一个 CPU 内核始终保持 100% 固定。
即使从一个数据库备份并恢复到另一个数据库,这种行为仍然存在。
由于它是一个存储过程,因此活动监视器和分析器不会向我们显示有关此高 CPU 活动在存储过程中的何处发生的任何详细信息。
问题:
我们还应该看什么?
跟进:
缓慢发生在以下游标定义的 FETCH NEXT 语句中:
DECLARE C CURSOR FOR
SELECT X, Y
FROM dbo.A
WHERE X NOT IN (SELECT X FROM dbo.B)
AND Z <=0
... …Run Code Online (Sandbox Code Playgroud) 有谁知道“Non-yielding IOCP Listener”是什么意思?
我们的 SQL Server 上有一个错误检查转储:
=====================================================================
BugCheck Dump
=====================================================================
This file is generated by Microsoft SQL Server
version 9.00.5292.00
upon detection of fatal unexpected error. Please return this file,
the query or program that produced the bugcheck, the database and
the error log, and any other pertinent information with a Service Request.
Computer type is AT/AT COMPATIBLE.
Bios Version is DELL - 1
Phoenix ROM BIOS PLUS Version 1.10 1.5.2
Current time is 23:01:04 09/07/12.
48 Unknown CPU …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL Server 2008 R2 服务器,其中包含一堆当前在兼容级别 90 (2005) 下运行的已发布数据库。
订阅数据库也是 SQL Server 2008 R2,但是目标数据库设置为兼容性级别 100,并且复制工作正常。
如果我更改已发布数据库的兼容性级别,它会以任何方式影响复制,还是只是重新初始化所有订阅并重新启动复制的情况?
我怀疑更改已发布的数据库兼容性级别可能会稍微改变复制存储过程的功能,但我不是 100% 确定。
是这种情况吗?
我使用的是 SQL Server 2005。我有两个包含聚合信息的表。信息不断更新,每天产生近 5GB 的日志数据。(这比整个数据库还大!)我想禁用对这些表的日志记录,因为回滚并不是真正必要的。但是,我想继续登录数据库中的其他表。
是否可以禁用数据库中某些表的日志记录?如果没有,我可以将两个表放在同一个架构中,然后禁用架构上的日志记录吗?将两个表移动到单独的数据库并在那里禁用日志记录的唯一选择是什么?
更新: 我想我会解释为什么我真的不需要在这些表上记录活动。
这两个表充满了 GPS 数据,因此它们变得非常大。第一个表从现场的六个 Android 表中捕获原始位置。来自每个平板电脑的新数据每 5-10 秒就会出现一次。然后将该信息聚合为 locationA、locationB、travelTime。目标是根据实际驾驶数据,最终实现所有地点之间最短的旅行时间。数据只针对小城市,精确到小数点后四位,易于管理。然而,随着新的原始数据的出现,需要更新的旅行时间变慢,需要插入新的旅行时间。
汇总原始数据后,将对其进行清除。我们不会倒退到更长的旅行时间,所以这就是为什么在这些表中回滚并不那么重要。
我正在为我们的 SQL Server 开发人员创建一个测试环境。
在生产中,我们有 3 个 SQL Server,SQL01包含多个镜像到SQL02. SQL03在“具有自动故障转移的高安全性”或同步配置中充当见证人。
我已经使用 VMWare P2V 将所有三台机器虚拟化到单独的硬件上,重新配置机器的 SID,并从这些新机器上获取我们生产服务器的 IP 地址。
我一开始忘记了生产见证机器的黑洞,所以测试机器上的数据库仍然使用SQL03机器作为见证。注意到这个问题,我决定重新配置 TEST 上的数据库以指向新虚拟化的 TEST 见证,称之为TEST03.
为了重新配置数据库以使用新的见证,我在主服务器上输入了以下命令TEST01:
ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';
Run Code Online (Sandbox Code Playgroud)
反应出乎意料:
The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'. The database mirroring configuration was
not changed. Verify that the server is connected, and try again.
Run Code Online (Sandbox Code Playgroud)
我对这个错误消息感到非常困惑,因为配置在生产机器上确实有效,并且在测试机器上没有以任何方式进行修改。
为了让它工作,我需要LOGIN在测试见证上创建一个:
CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR …Run Code Online (Sandbox Code Playgroud) 据我所知,低于 95% 的过程缓存命中率是一个问题。在我的盒子上,这些值在 85% 到 95% 之间徘徊。
我该如何解决这个问题?服务器似乎有足够的内存,所以这应该不是问题。还能是什么?
我有一张大约有 100 万到 500 万条记录的表。该记录的一小部分将位列之一设置为“TRUE”。需要快速找到那个记录。我认为该索引可以加快对该列的搜索速度,但我担心 INSERT。因此我的问题。
数据库的工作方式类似于数据仓库,因此有许多 SELECT 和小(每天最多 10-20 个)但相当大的 INSERT(一次最多 20 万条记录)。我担心导入到数据库的时间会更长。
我继承了 SQL Server 2005 3rd 方服务器和数据库,以便能够生成报告和仪表板。
在一张桌子上,我发现了一个新图标:一个蓝银倒置键,旁边是我的其他主键和外键。
当我右键单击它时,上下文菜单为我提供了“脚本约束为”的选项,但是当我尝试“修改”它时,它会打开列设计表单(如主键),但是,它出现在“索引”部分,而不是约束。
有人知道它叫什么,用来做什么吗?

sql-server-2005 ×10
sql-server ×9
constraint ×1
mirroring ×1
performance ×1
replication ×1
ssms ×1