我目前正在设置大型数据库(约 1.5TB)的日志传送,并且想知道我可以对日志文件做些什么。
就目前而言,我想做以下步骤:
问题是,当我进行完整备份时,日志文件填满的速度会比备份完成的速度快。
我有哪些选项可以防止日志文件填满?我是否可以在完整备份期间照常进行日志备份,因为 DIFF 还原将涵盖在该时间范围内发生的任何事务?有没有人用这种大小的数据库做过这件事,有什么提示/技巧可以让它更容易?
我们遇到了 CDC 问题,即捕获作业失败并且不会自行重启。这是在 DEV 环境中,所以没有害处,但有没有人看到这些错误或知道 CDC 到底出了什么问题?
SQL 2014 EE 12.0.5540 - 带有 SSISDB 的 2 节点 AG
过程或函数 sp_batchinsert_1663605265 指定的参数过多。更多信息查询sys.dm_cdc_errors动态管理视图
日志扫描进程未能从日志序列号 (LSN) {00002d0d:0000f11f:0002} 构建复制命令。备份发布数据库并联系客户支持服务。想要查询更多的信息
日志扫描进程在处理日志记录时失败。参考当前会话中以前的错误以确定原因并纠正任何相关问题。更多信息查询sys.dm_cdc_errors动态管理视图
我们尝试使用sp_cdc_drop_jobabd删除并重新创建捕获作业sp_cdc_add_job。我们还尝试故障转移到另一个节点以及服务器/服务重新启动。似乎没有什么能让 CDC 自行重启。
我们在周五通过 AG 滚动补丁应用了 CU4,因此我们处于最新最好的状态。在我们修补并故障转移后,这个问题立即出现。
添加日志查询结果
我知道这个选项的作用以及如何启用它。我的问题是如果我启用它会发生什么事情。
在不提供太多信息的情况下,我们的会计系统是 Microsoft Dynamics 产品,它使用虚拟机、32GB RAM(28GB 可用于 SQL 服务器 [2008 R2])。他们让他们的供应商来查看我们的配置,以解决会计团队一直看到的某些性能问题。他们甚至让另一个 DBA 看看我们的配置。他的建议之一是“查看缺失的索引”。我们可以说,几乎所有存在的 SQL 服务器实例,每个表上都有一个唯一的非聚集索引,这不是我的选择,但我告诉我,对软件访问的表上的索引进行任何更改都可能导致问题小贩。他的第二个目标是启用“针对临时工作负载进行优化”。一世'
通过优化临时工作负载,我知道单次使用计划存储为存根,并且整个计划实际上不会保存在缓存中,直到计划运行两次。有了这样的系统,我们真的会看到任何形式的性能提升吗?根据 Kimberly Tripp 的文章,我运行了以下查询:
SELECT objtype AS [CacheType]
,count_big(*) AS [Total Plans]
,sum(cast(size_in_bytes AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs]
,avg(usecounts) AS [Avg Use Count]
,sum(cast((
CASE
WHEN usecounts = 1
THEN size_in_bytes
ELSE 0
END
) AS DECIMAL(18, 2))) / 1024 / 1024 AS [Total MBs - USE Count 1]
,sum(CASE
WHEN usecounts = 1
THEN 1
ELSE 0
END) AS …Run Code Online (Sandbox Code Playgroud) 我有几个数据库想要转移到完整恢复模式,这样我们就可以拥有时间点恢复功能。我们不需要在所有数据库上使用它,只需要在事务量大且包含不断更新的数据的数据库上使用它。
我做了很多研究,并且完全理解当您切换到完全恢复时会发生什么,特别是它与日志文件的关系。
我正在寻找的是一些建议或“陷阱”,这些建议或“陷阱”可能是由于将某些恢复模式切换为完整恢复模式而出现的。
现在,我计划一次执行一个数据库,这样我就可以监视日志文件的增长并确定日志文件备份的最佳频率,以确保我们不会陷入日志文件失控的情况。我还知道,一旦我们切换到完整恢复,我就需要对该数据库运行完整备份。(我知道在我们这样做之前,完整模式不会真正启用)。
我的计划还包括每周运行一次完整备份,擦除上周的日志文件,本质上是“重新开始”。
还有其他有帮助的注意事项或建议吗?有什么我应该注意的吗?我们也每周运行一次完整索引重建、DBCC CHECKDB 和统计重建。这些操作是否存在任何潜在问题(也许在该时间段内切换到 BULK_LOGGED 以免破坏日志文件?)
感谢你的帮助!
所以,这是我关于这个主题的第三个问题。我只是不断发现越来越多的东西,我想知道和了解完全恢复的工作原理。
我们昨天通过在早上 7 点进行完整备份将数据库转换为 FULL。从那时起,我们每小时进行一次 T-Log 备份,并在每晚凌晨 12:01 进行差异化处理。我正在生成一些可以自动通过电子邮件发送给我的报告(万岁自动化!)并且我注意到 LSN 号码有些有趣。也许我只是不明白它们是如何工作的,但在这里。
自我们昨天启动完全恢复以来,显示文件、日期、大小、LSN 等的查询结果图片:

我强调了令我困惑的 LSN,希望它能让大家更容易阅读。以下是我的问题:
完整备份的高 LSN 是“308000000583700001”,差异备份 [图中第 13 行] 低 LSN 不应该也是为了日志正确链接吗?我是否误解了完整日志文件和差异日志文件是如何相互同步的?
您会注意到,在凌晨 12:01 获取的差异具有“311000000469900001”的高 LSN,但在凌晨 1:00 获取的 T-Log 备份具有完全相同的高 LSN。这仅仅是因为没有活动并且 T-Log 只是“赶上”以匹配差速器的 LSN?
我绞尽脑汁试图确保我不仅知道如何实施这样的恢复策略,而且我完全理解 LSN 在生成时是如何同步的。
像往常一样,再次感谢您对这个问题的所有帮助!
这是用于提取此结果的 SQL,以防您想使用您的系统进行调查:
SELECT TOP 48 CAST(s.database_name as char(10)) AS DB
,CAST(' ' as char(1)) + CAST(SUBSTRING(m.physical_device_name, 46, 40) as char(25)) AS FileName
,CAST(CAST(s.backup_size / 1000000 AS INT) AS CHAR(4)) AS MBSize
,CAST(DATEDIFF(second, s.backup_start_date, s.backup_finish_date) AS CHAR(4)) AS SecsTaken …Run Code Online (Sandbox Code Playgroud) 我们将在明年第 1 季度迁移到 SQL Server 2014 昂贵版。现在我们使用的是 SQL Server 2005 标准版,因此我们无法访问MIRROR TO用于备份的非常棒的选项(我们使用 Ola Hallengren 的脚本)。
现在,我们正在使用 robocopy 将文件复制到网络共享,以防万一我们存储在本地的备份损坏、丢失或决定休个长假。我的问题是,当我们使用该MIRROR TO选项时,与仅使用 robocopy、xcopy 或 Powershell 解决方案相比,它是否会更多/更少地占用资源?当我们MIRROR TO在 SQL Server 中使用时到底发生了什么?如果可能的话,寻找一些“具体细节”的答案。
我有一个麻烦的查询,我们正在尝试调整。我们的第一个想法是采用更大的执行计划的一部分并将这些结果存储到中间临时表中,然后执行其他操作。
我观察到的是,当我们将数据预先准备到临时表中时,执行计划成本会飙升(22 -> 1.1k)。现在,这样做的好处是允许计划并行执行,这将执行时间减少了 20%,但在我们的情况下,每次执行的 CPU 使用率要高得多,这不值得。
我们正在使用带有旧版 CE 的 SQL Server 2016 SP2。
原始计划(成本 ~20):
https://www.brentozar.com/pastetheplan/?id=ry-QGnkCM
原始 SQL:
WITH Object1(Column1, Column2, Column3, Column4, Column5, Column6)
AS
(
SELECT Object2.Column1,
Object2.Column2,
Object3.Column3,
Object3.Column4,
Object3.Column5,
Object3.Column6
FROM Object4 AS Object5
INNER JOIN Object6 AS Object2 ON Object2.Column2 = Object5.Column2 AND Object2.Column7 = 0
INNER JOIN Object7 AS Object8 ON Object8.Column8 = Object2.Column9 AND Object8.Column7 = 0
INNER JOIN Object9 AS Object3 ON Object3.Column10 = Object8.Column11 AND Object3.Column7 = 0
INNER JOIN …Run Code Online (Sandbox Code Playgroud) performance sql-server optimization execution-plan sql-server-2016 query-performance
我将开始将我们的几个数据库从 SIMPLE 过渡到完全恢复。上周我问了一个关于部署策略的问题,我还有一个问题。
考虑一下:
差异备份是否基本上消除了对当天事务日志的需求?
因此,如果我们在周二晚上 10 点发生灾难性故障,我们将:
如果是这种情况,那么作为维护计划的一部分,我们是否可以简单地从星期一删除事务日志备份,因为我们与星期一晚上有差异?如果 DIFF 备份失败,将它们保留为冗余是否更明智?
我正在使用以下代码来提取前 20 个查询(按 CPU 排序):
SELECT TOP 20 qs.sql_handle
,qs.execution_count
,qs.total_worker_time AS [Total CPU]
,qs.total_worker_time / 1000000 AS [Total CPU in Seconds]
,(qs.total_worker_time / 1000000) / qs.execution_count AS [Average CPU in Seconds]
,qs.total_elapsed_time
,qs.total_elapsed_time / 1000000 AS [Total Elapsed Time in Seconds]
,st.TEXT
,qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
ORDER BY qs.total_worker_time DESC
Run Code Online (Sandbox Code Playgroud)
但是,我看到的是:

任何人都可以解释为什么查询计划和 SQL 文本显示为 NULL?它们是某种系统进程还是外部应用程序?我们正在运行 SQL 2008 R2。
谢谢大家,一如既往!
我已经构建了一个脚本/代理作业,每 10 分钟轮询一次我们的链接服务器,以确保它们在线。现在,当一个人离线时,它会生成一封电子邮件并通知我。见下文:

现在,现在它只使用通过/失败。我想要做的是,当服务器之间的通信离线时,不仅要生成它是离线的,还要生成原因。类似于您在测试链接服务器并且它处于离线状态时从 SSMS 获得的读数:

这可能吗?我已经搜索了任何可以帮助我完成此操作的其他详细参数,但找不到任何参数。信息是在 SSMS 中生成的,因此我相信有某种方法可以获取它,但我不确定如何获取。
像往常一样感谢伙计们!
更新 必须为此添加一些特定于系统的功能以及我已经构建但错误报告在线的我自己的 SQL。适用于我们的 SQL 服务器和 iSeries/400 环境。这是它现在吐出来的:

再次感谢您对这一问题的所有帮助。可能必须将其发布到 SSC,以便其他人可以使用它。
sql-server ×9
backup ×4
recovery ×3
dmv ×1
log-shipping ×1
optimization ×1
performance ×1
plan-cache ×1
top ×1