标签: sql-server-2016

“删除不可恢复的检查点表行”是什么意思?

当我查看生产 SQL Server 2016 的服务器日志时,我看到多个条目:

[信息] 数据库 ID:[5]。正在删除不可恢复的检查点表行(id:294)。

对于每个条目,末尾的 id 加 1。

我用谷歌搜索了这个错误,实际上没有任何关于它的信息。这个条目是什么意思?听起来相当不祥。

sql-server checkpoint errors sql-server-2016

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

在使用动态仲裁的故障转移的 2 节点集群中,是否需要见证人?

我在 SQL Server 2016 Standard 上有一个 2 节点群集,并配置了动态仲裁的故障转移群集。

有件事让我很困惑:在这种情况下我们真的需要见证人吗?

由于我启用了动态仲裁,因此如果其中一个节点出现故障,我的集群也不会出现故障。

但有些人说,为了最佳实践,我们仍然需要配置一个见证人。所以我的问题是:见证人会有什么不同吗?

sql-server windows clustering failover sql-server-2016

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

索引视图引用两个不同模式上的对象

当我尝试创建/更改视图来创建这样的索引时

\n
CREATE UNIQUE CLUSTERED INDEX IDX_vSalPopulation\n   ON sfdc.vSalPopulation (ID);\n
Run Code Online (Sandbox Code Playgroud)\n

我收到以下错误消息

\n
\n

消息 1938,级别 16,状态 1,第 40 行 无法在视图\n\'vSalPopulation\' 上创建索引,因为基础对象 \'YR_TRM_SBTRM_TABLE\'\n 具有不同的所有者。

\n
\n

当我检查表时,我发现这些表由不同的模式拥有

\n
exec sp_tables \'dbo.YR_TRM_SBTRM_TABLE\'\nexec sp_tables \'vSalPopulation\'\n
Run Code Online (Sandbox Code Playgroud)\n
\n
TABLE_QUALIFIER     TABLE_OWNER       TABLE_NAME              TABLE_TYPE    REMARKS\nMyDB                dbo               YR_TRM_SBTRM_TABLE      TABLE         NULL \nMyDB                sfdc              vSalPopulation          VIEW          NULL\n
Run Code Online (Sandbox Code Playgroud)\n
\n

有关索引视图的文档指出,您不能拥有引用两个不同数据库的索引视图。

\n
    \n
  • 必须使用该WITH SCHEMABINDING选项创建视图。
  • \n
  • 该视图必须仅引用与该视图位于同一数据库中的基表。\n
  • \n
  • 该视图不能引用其他视图。\xe2\x80\xa6 等
  • \n
\n

但是,我有相同的数据库,但有两个不同的架构。也许问题实际上是第三个要求?虽然我没有引用其他视图,但还是有函数的。也许我误解了错误消息。权限?那么,一般来说,是否可以有一个索引视图来引用来自两个不同模式的对象?

\n

给我同样错误的视图的简化定义如下所示

\n
ALTER VIEW sfdc.vSalPopulation\n   WITH SCHEMABINDING \nAS\nSELECT DISTINCT\n    ID\nFROM …
Run Code Online (Sandbox Code Playgroud)

sql-server clustered-index materialized-view sql-server-2016

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

查询并行运行,但显示为被自身阻塞

我有一个查询,它与 8 的 MAXDOP 并行运行。当我查看时,sp_who2我看到相同的会话 ID 使用不同的连接 ID 重复多次(> 8)。

我使用了下面的查询,看到等待类型仍然是 CXCONSUMER 等待类型。但我看到 130 个不同的 exec_context id。

SELECT 
    dot.session_id,
    dot.exec_context_id,
    dot.task_state,
    dowt.wait_type,
    dowt.wait_duration_ms,
    dowt.blocking_session_id,
    dowt.resource_description
FROM sys.dm_os_tasks dot
    LEFT JOIN sys.dm_os_waiting_tasks dowt
        ON  dowt.exec_context_id = dot.exec_context_id
            AND dowt.session_id = dot.session_id
WHERE dot.session_id = 96
ORDER BY exec_context_id;
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果查询并行运行,当我将负载分配到不同的工作线程时,它是否具有不同的 spid。?

看了肯德拉·利特尔 (Kendra Little) 的文章。非常有帮助的一个。

我使用查询来查看并行处理查询中使用的不同调度程序。

在此处输入图片说明

我看到多次使用相同的shcheduler_id/worker地址。这正常吗?

我的 MAXDOP 也是 4,但我看到 5 个不同的 scheduler_ids,这很奇怪。

performance parallelism sql-server-2016 query-performance

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

如何列出安装在 sql server 实例中的所有功能?

还有其他与安装相关的问题,这里这里有类似的细节。

我找不到任何相关的东西listing the installed features in sql server 2016

我可以手动查看日志 - 根据下面的信息,但我想自动化它。

安装 SQL Server 2016 后,我得到一个日志文件 - 位于以下文件夹中的某处:

C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\20200109_205540

在此处输入图片说明

名称以Summary_+开头的文件my_server_name

在该文件中,除其他外,我可以找到已安装的 Sql Server 功能列表: 在此处输入图片说明

安装后,稍后当系统已在使用时,应用登录和权限,修复防火墙等。

有没有一种简单的方法来获取安装在 sql server 实例上的功能列表?

sql-server logs installation sql-server-2016 automation

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

无法创建大于允许的最大行大小 8060 的大小为 11842 的行

可疑表有 299 个 nvarchar(max) 列、1 个整数列和 1 个 nvarchar(255) 列。请不要问我为什么,这是第 3 方供应商数据库。无论如何,根据我的数学计算,在最坏的情况下,我们应该在 8060 限制范围内:

24x299 + 4 + 510 = 7690

在使用供应商的导入工具的导入过程中,从外部源插入失败并出现上述错误。我在计算中遗漏了什么吗?11842 可能来自哪里?有任何想法吗?

谢谢!

sql-server-2016

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

报告表需要在不杀死用户读取连接的情况下刷新,有什么想法吗?

我正在研究一种解决方案,该解决方案将允许刷新报告表,从而可能让用户在需要刷新时读取它。有没有人实现了这样一种方法,而无需在刷新时终止用户与该表的连接?

replication database-design sql-server sql-server-2016

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

嵌套循环运算符使用什么方法/公式进行行估计?

AdventureWorks 中的以下简单查询:

SELECT  *
FROM    Person.Person p
        JOIN HumanResources.Employee e
            ON p.BusinessEntityID = e.BusinessEntityID
Run Code Online (Sandbox Code Playgroud)

给出以下执行计划:

新的估算器计划

如果我查看上面的计划,我可以看到索引扫描和索引搜索都(正确)估计了 290 行,但是,连接两者的估计循环运算符估计了 279 行。

旧估算器

旧的估计器也正确地猜测了搜索和扫描中的 290 行,但嵌套循环估计了 289 行,在这个查询的情况下这是一个更好的估计。

那么在新 CE 的情况下,优化器估计当它连接索引扫描中的 290 行和索引查找中的 290 行时,是否会有 11 行不匹配?

它使用什么方法/公式来进行这个估计?

我所说的任何方法都是正确的,它已经从早期的 CE 版本改变了,因为它做出了不同的估计?

我意识到新 CE 的“坏”估计不足以损害性能,我只是想了解估计器处理

sql-server sql-server-2016 cardinality-estimates

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

删除过程中极度臃肿的事务日志

现在,我知道日志在大删除过程中会变大,应该尝试将其分成几批。但我觉得这种情况很奇怪,如果有人能向我解释,那就太好了!

我有一个 27GB 的数据库和大约 30GB 的日志。被删除的表大小约为 15GB,其中有 2000 万条记录。该表有 20 列,只有 bigint 和 int 数据类型。

删除操作是从相关表中删除 1800 万条重复记录。我已切换选择进行删除以确保记录计数匹配并且确实如此。

在我用完磁盘空间并被迫回滚之前,日志增长到大约 110GB。

表上没有触发器,只有16个非聚集索引,没有聚集索引。如果我在运行操作之前禁用所有索引,它会完成而不会从原始大小增加日志。

所以我的问题是,从表中删除时,我是否记录了每个索引的每次删除?如果是这样,这是正常行为还是可能是因为缺少聚集索引?

sql-server delete transaction-log sql-server-2016

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

收缩数据库可以提高性能吗

昨天我收到一封来自我们的供应商的邮件,提到他们的应用程序存在性能问题。

我还不知道问题是什么,但他们提出的解决方案是缩小数据库(因为有很多可用空间)。据我所知,这不会导致性能改进,但显然他们在其他客户申请时使用这种方法取得了成功。

我认为缩小发生的方式是将页面从文件的后面移动到前面,就像这样压缩数据库并导致大量碎片。

范围扫描是否有可能利用压缩数据库?
或者还有其他一些边缘情况可以从缩小数据库中受益吗?

performance sql-server-2016

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