我有一个以整数(4 字节)为主键的表。它被定义为一个身份。它也是聚集索引。
插入工作非常好。插入 2000 行后,碎片大约为 4%。
但是,每条记录之后将至少更新 3 次。这会生成超过 99% 的聚集索引碎片(使用默认填充因子)。
或者使用我测试的其他填充因子: - 将聚集索引的填充因子设置为 80(碎片 > 98%) - 将聚集索引的填充系数设置为 50(碎片 > 94%)
所以这看起来没什么帮助......
我在一个新创建的表上测试了每个填充因子设置,其中包含 2000 个插入(以及 3 个以上的更新)
没有查询中不包含主键的选择或更新。
有没有人知道为什么这个索引有这么高的碎片?
通过 ADO.NET 进行更新,这是生成的命令(由 SQL Profiler 跟踪):
exec sp_executesql N'UPDATE MyTable SET MyValue = @MyValue WHERE MyId = @MyId',
N'@MyValue varchar(50),@MyId int',@MyValue='This is some random value',@MyId=1234
Run Code Online (Sandbox Code Playgroud)
其他更新遵循相同的模式(更新其他值,但始终提供@MyId 参数)
感谢您的帮助 :)
index sql-server clustered-index fragmentation sql-server-2012
我使用德语(德国)作为全文语言创建了一个表格,在设置中我尝试将重音敏感度设置为敏感和不敏感。然而,我得到了以下奇怪的结果。
该表包含以下条目:
执行以下搜索
SELECT * FROM dbo.Search WHERE CONTAINS(CNameCombined, 'FORMSOF (INFLECTIONAL, "Mueller")')
Run Code Online (Sandbox Code Playgroud)
我得到这些结果:穆勒,穆勒,穆勒
执行类似的搜索
SELECT * FROM dbo.Search WHERE CONTAINS(CNameCombined, 'FORMSOF (INFLECTIONAL, "Luginbuehl")')
Run Code Online (Sandbox Code Playgroud)
我得到零结果。
有谁知道这种行为的原因可能是什么?它似乎适用于某些词,但不适用于所有词。
我在 Windows Server 2012 上运行 SQL Server 2012。
我的数据库设置了我们所说的临时表和活动表。目前,我们有大约 200 万行用于名为 products 的表。我们称为制造商的客户将他们的数据加载到临时表中,当他们完成更新、添加、删除数据时,我们会将这些数据推送到我们的实时表中。
这些实时表格为移动应用程序和网站提供网络服务。将数据从 staging 推送到 live 包括删除 live 表中的所有数据和插入 staging 表中的所有数据。所有这些都由ManufacturerID存在于每个表中的一个名为的列分隔。
有些制造商有 500 种产品,有些制造商有 75,000 种产品。基于这一点,我们有时会因为对所有 200 万条记录进行分页而导致 Web 服务响应非常缓慢。从实时表中删除数据似乎也变得非常缓慢。
通过ManufacturerID帮助这种情况来分区我的产品表吗?从我读到的内容来看,这基本上意味着当我查询我的产品时,我只会查询数据库的一小部分,ManufacturerID因此整体响应时间有了巨大的改善。
我有以下查询,它从新闻文章表中选择。由于多种排序因素,我找不到日期的下一页。
我拥有的参数是查询结果集中的最后一个ID,那么我如何才能获取下一页...同样,我没有页面索引,我只有上一个查询结果集中的最后一个ID
SELECT TOP (20) id, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01', 102), release_date) AS date, DATEDIFF(SECOND, CONVERT(DATETIME, '1970-01-01',
102), edit_date) AS lastchanged, important
FROM articles AS news WITH (NOLOCK)
WHERE (status = 1) AND (release_date <= GETUTCDATE())
ORDER BY important DESC, date DESC, lastchanged DESC
Run Code Online (Sandbox Code Playgroud)
这是我的数据的一个例子
id date lastchanged important
187346 1366070400 1345212540 1
187306 1365984000 1345290300 1
187330 1365984000 1342457880 1
187344 1363392000 1342461540 1
187343 1363392000 1342461300 1
187342 1363392000 1342459980 1
187339 1363392000 1342459800 1
187337 1363392000 1342458960 1 …Run Code Online (Sandbox Code Playgroud) 我们使用 SQL Server 2012 及其新的可用性组 (AG) 功能。有一项任务是将某些表的旧数据从一个数据库移动到另一个数据库。两个数据库都包含在不同的可用性组中。
以前(在使用 AG 功能之前)通过将第二个服务器实例添加为链接服务器 ( sp_addlinkedserver) 并按以下方式执行分布式事务来解决该任务:
不幸的是,AG 不支持分布式事务,因为在故障转移的情况下数据库可能会变得不一致 ( http://technet.microsoft.com/en-us/library/ms366279.aspx )。
是否有某种方法可以在保留 AG 功能的情况下实现此任务,并且在发生异常时不实现回滚逻辑?
sql-server-2012 availability-groups distributed-transactions
我正在尝试制作 SQL Server 2012 故障转移群集。我有两台数据库机器。我知道两台机器每台都需要 2 个 NIC。在我的组织中,分配的 IP 方案类似于192.168.1.X.
所以我想知道如果我给每个网卡分配1个IP,这样就够了吗?就像分配192.168.1.50, 192.168.1.51,192.168.1.52和192.168.1.53?
或者每台机器中的两个 NIC 必须有一些允许它们直接通信的专用网络方案?
我正在制作一个 2 节点 SQL Server 2012 故障转移群集;我需要安装 MSDTC 组件吗?
如果是,两者都可以安装在单个共享磁盘上吗?
什么是 sql server 安全的最佳实践?使用被授予架构对象权限的 AD 组,还是应该将 AD 组添加到被授予架构对象权限的数据库角色?如果后者是最佳实践,那么使用数据库角色的真正好处是什么?
我正在尝试在 Windows 2012 Server 上安装 SQL Server 2012 Express 以进行测试。这台机器是我们公司域的一部分。
在安装过程中,我尝试将域帐户之一用于 SQL Server 数据库引擎服务,但由于以下错误而失败,
“SQL Server 服务帐户登录名或密码无效。请使用 SQL Server 配置管理器更新服务帐户。”
我已经验证了域用户和密码。并且此帐户已启用“作为服务登录”权限。我也已将此用户添加到本地管理员组,但仍然无法进行。
任何建议表示赞赏。
在线 MSDN 文章“同时针对多台服务器执行语句 (SQL Server Management Studio) ”(SQL Server 2012)指出:
"注意
在执行以下过程之前,请创建中央管理服务器和服务器组。有关详细信息,请参阅创建中央管理服务器和服务器组 (SQL Server Management Studio )”
尽管如此,我删除了任何 CMS(中央管理服务器)实例,并且仍然在 2 台不同机器上的多个 SQL Server 上获得相同的结果

似乎我没有在在线 MSDN 中找到 SQL Server 中央管理服务器的意义(或点)的说明。
你能给我一些吗?
sql-server-2012 ×10
sql-server ×5
clustering ×2
failover ×2
index ×1
msdtc ×1
partitioning ×1
permissions ×1
security ×1
t-sql ×1