标签: availability-groups

分布式可用性组直接播种失败,失败状态 SQL 错误,失败状态 2

我们刚刚开始设置分布式可用性组,以将我们的生产数据库复制到新的报告集群中。我们为复制设置的第一个可用性组运行良好,没有任何问题,但是当我们转移到具有更大数据库(总共超过 3TB)的第二个可用性组时,它花费的时间更长,并且 5 个数据库中有两个失败了。我们将分布式可用性组设置为使用直接播种,并在查询 sys.dm_hadr_automatic_seding 表时将 current_state 指示为 FAILED,故障状态为 2(SQL 错误)或 21(播种检查消息超时):

dm_hadr_automatic_seeding

我们可以做些什么来解决这个问题?

availability-groups sql-server-2016 distributed-availability-groups

5
推荐指数
1
解决办法
2321
查看次数

将 SQL Server 网络数据包大小与 mtu 相匹配可提高性能

我们最近将生产设施升级到 SQL Server 2017,并迁移到无集群可用性组。有一个主要设备、一个现场辅助设备和一个远程辅助设备。我们遇到与远程辅助同步的周期性中断。带宽低至6G,sql流量与所有其他流量竞争。好消息是AG会在5-15分钟后“追上”。在研究是否可以采取任何措施来改善这种情况时,我通过实验发现网络 MTU 为 1400,并且 sql 的网络数据包大小设置为默认值 4092。作为实验,我将数据包大小设置为 1400 以匹配MTU。我们已经好几天没有收到有关 AG 的警报了,所以它“似乎”得到了帮助。

我的问题是这样做是否正确?我已经读过很多次,除非 MS 也建议你,否则不要更改网络数据包大小,并且永远不要将其设置为小于默认值 4096。然而......它似乎有所帮助。因此,我正在寻找类似情况下更有经验的人的意见。

configuration network availability-groups sql-server-2017

5
推荐指数
1
解决办法
6602
查看次数

使用 MultiSubnetFailover 提高单个子网的性能

BOL 上,我阅读了以下关于MultiSubnetFailover=True 的内容:

即使可用性组仅跨越单个子网MultiSubnetFailover连接选项也应设置为True。这允许您预先配置新客户端以支持未来跨子网,而无需更改未来客户端连接字符串,并且还优化了单个子网故障转移的故障转移性能

据我了解MultiSubnetFailover,使用此选项设置客户端驱动程序为与侦听器关联的每个 IP 地址设置一个套接字。它们都被并行检查以加快查找在线 IP 的过程,第一个响应将用于连接。在这里,我看到了性能提升。

但是单个子网的性能提升在哪里?只有与侦听器关联的 IP。

sql-server availability-groups sql-server-2017

5
推荐指数
1
解决办法
428
查看次数

故障转移后,可用性组数据库处于“正在恢复”状态的时间过长

架构: \n我在多子网故障转移群集上运行 2 节点同步提交 AlwaysOn 配置。主节点位于欧洲,辅助节点位于美国。我的可用性组中只有一个数据库,即 SCOM 的 OperationsManager db。

\n\n
    \n
  • 主要主机和辅助主机相同。
  • \n
  • 两个机器上的 SQL Server 版本:13.0.5237 和 Windows Core
  • \n
  • 更新:我将两台服务器都修补到 10.0.5270.0 ,但没有帮助。
  • \n
  • DB VLF 计数仅为 27。
  • \n
\n\n

问题: \n当我启动故障转移时,数据库在几秒钟内成功从主节点故障转移到辅助节点。然而,新的辅助(旧的主)数据库进入恢复/恢复阶段并在那里停留大约 30 分钟。我在故障恢复到原始主数据库时也经历了同样的事情,所以这是一个双向发生的问题。

\n\n

调查结果: \n我在互联网上搜索了此问题并阅读了文档来调查该问题。当从主数据库到辅助数据库的角色更改完成后,新的辅助数据库将经历 3 个阶段:

\n\n

同步状态: \xe2\x80\x9c 未同步\xe2\x80\x9d ;数据库状态:在线

\n\n

同步状态: \xe2\x80\x9c 未同步\xe2\x80\x9d ;数据库状态:正在恢复

\n\n

同步状态: \xe2\x80\x9cREVERTING\xe2\x80\x9d ;数据库状态:正在恢复

\n\n

就我而言,所有时间都花在最后一步上。我还通过查看性能计数器“ SQLServer:数据库副本日志剩余用于撤消”来监视撤消过程

\n\n

我在故障转移测试之前检查了主站点,以发现任何长时间运行的事务或打开的事务,但找不到。故障转移后,“用于撤消的剩余日志”约为 30MB,辅助数据库需要 30 分钟才能返回“已同步”状态。考虑到我们在同步提交模式下运行并且主数据库上的工作负载很小,恕我直言,重做阶段不应花费 30 分钟。

\n\n

SQL Server 错误日志:我发现了这个奇怪的消息。

\n\n
    \n
  • 于 2019 年 2 月 22 日下午 …

sql-server availability-groups

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

如何确定节点何时添加到可用性组?

理想情况下,我正在寻找返回两列的 T-SQL:节点名称,以及该节点添加到可用性组的日期/时间,对于给定可用性组中的所有节点。

sql-server availability-groups

5
推荐指数
1
解决办法
201
查看次数

SQL Server Always On 文件共享见证(仲裁投票)在不同子网上到其他节点

我目前遇到一些可用性组的问题,其中节点 1 和节点 2 彼此之间的连接松散“先前建立的与可用性副本的连接发生连接超时”

故障转移群集管理器中的错误显示“文件共享见证资源‘文件共享见证’未能仲裁文件共享”文件共享所在的服务器尚未重新启动或出现任何问题,并且所有权限都在工作。

我唯一能看到的是文件共享服务器与集群中的其他 2 个 SQL Server 节点位于不同的子网上。

有人可以确认在 AlwaysOn 环境中将文件共享服务器放在不同的子网上是一个大问题吗?所有防火墙规则都已就绪,因为它可以与其他节点通信,但在几个小时之外(通常)它会失去连接。

另一个奇怪的事情是包括文件共享在内的仲裁中有 3 票,因此即使文件共享失去与故障转移集群的连接,节点 1 和节点 2 也不应该失去彼此之间的连接,因为有足够的投票支持仲裁 (2)

sql-server clustering availability-groups

5
推荐指数
1
解决办法
2407
查看次数

如何从可用性组中删除辅助数据库并重新加入它

我有一个具有多个数据库(DB-A、DB-B、DB-C)和多个辅助数据库(SEC-B、SEC-C)的可用性组 (AG),其中一个数据库不会仅在其中一个数据库上恢复同步次要。

对于此示例,DB-C 未在 SEC-C 上同步,并且重新启动 SQL Server 或恢复 HADR 再多也不会使它重新启动。

  • 我不想从 AG 中删除副本(辅助 SEC-C),因为我将不得不重新同步所有数据库(DB-A、DB-B 和 DB-C),这将花费更多时间比必要的。

  • 我也不想从 AG 中完全删除数据库 (DB-C),因为还有其他辅助 (SEC-B) 没有问题,而且我不想重新同步它或暂时丢失我的HADR 在它工作的辅助节点上。

如何从 AG 中仅删除这个辅助数据库,重新同步它,然后将其添加回 AG?

sql-server availability-groups

5
推荐指数
2
解决办法
1904
查看次数

AG 中记录发送队列大小和重做队列大小

我正在尝试找出监控这两个事件的方法

  1. 记录发送队列大小 - 我可以在 perfmon 中看到这一点

  2. 重做队列大小 - 我可以在 dmv 中看到,但在 perfmon 计数器中看不到

有没有什么方法可以使用 perfmon,以便我可以计算重做队列大小,即使计数器在 perfmon 中不可用?

另外,我发现这些事件在属于数据库镜像的一部分时会记录在 Windows 事件查看器中。但现在使用 AG,如何在 Windows 事件查看器中记录这 2 个超出特定范围的值?

编辑

我所说的警报是指我们在 AG 中是否有一些内容,如此处所示,作为从数据库镜像看到的消息?

performance sql-server availability-groups sql-server-2017

5
推荐指数
1
解决办法
5954
查看次数

可用性组 - 强制故障转移后丢失了多少数据

让我们考虑在异步复制中有两个节点的 SQL Server AlwaysOn 群集。
有没有办法计算强制故障转移后丢失了多少数据?

我的意思是在时间方面,能够知道“我丢失了 1 小时的数据或 1 分钟”。我考虑过检查 LSN,但我不知道如何将它们转换为日期时间。

sql-server clustering failover high-availability availability-groups

5
推荐指数
1
解决办法
401
查看次数

在多数据库 AG 中,是什么决定哪些数据库将具有 1 个以上重做线程?

我们有一个大型物理服务器,上面有 50 多个 dbs;有些很忙,有些很安静。

当一个 AG 中有多个 DB 时,只有其中一些有多个重做线程。我们希望具有这些线程的数据库是繁忙的。在最近的一次迁移中,我们决定注意恢复 dbs 的顺序,因为我们认为这是根据数据库创建日期决定的。但是,检查迁移后,事实并非如此。

SELECT databases.database_id,
       databases.create_date,
       dm_hadr_db_threads.name,
       dm_hadr_db_threads.num_redo_threads,
       dm_hadr_db_threads.num_parallel_redo_threads
  FROM sys.dm_hadr_db_threads
 INNER JOIN sys.databases ON dm_hadr_db_threads.name = databases.name
 ORDER BY 
       dm_hadr_db_threads.num_redo_threads DESC
OPTION (RECOMPILE)
Run Code Online (Sandbox Code Playgroud)

结果

它不是创建日期或数据库 ID。它不是按字母顺序排列的。它不是订单添加到 ag。有谁知道是什么决定了这一点?

这是 SQL Server 2019;查询来自辅助。

这是我们发现它基于 database_id 的地方:https : //www.brentozar.com/archive/2018/06/first-responder-kit-release-just-when-you-think-theres-nothing-new-left -去做/

sql-server availability-groups sql-server-2019

5
推荐指数
1
解决办法
209
查看次数