首页 > 数据库 >大事务导致数据库恢复时间长

大事务导致数据库恢复时间长

时间:2023-10-25 12:45:43浏览次数:37  
标签:事务 恢复 数据库 Server 阶段 SQL 日志

背景

客户的一套系统从凌晨开始出现运行缓慢,重启SQL Server服务后一个主要的数据库一直处在正在恢复的状态,多次重启SQL Server服务和服务器无果后请我们协助处理。

现象

在SSMS中看到数据库是正在恢复的状态,而且不能被访问。

 

分析

启动SQL Server服务时数据库恢复要经过分析、重做和撤销3个阶段,在阶段2完成后数据库才能提供访问。如果某个阶段运行时间长,在日志里面会记录进度。

查找日志,发现从8:31:45开始阶段1,8:34:30开始阶段2,从进度上看现在已经完成了28%。确保磁盘空间充足后,剩下的工作就是查看进度,等待完成。

 

9:10:52,看到进度为99%的日志。9:11:11,阶段2完成。在完成阶段2后,数据库就可以访问了。

 

直到15:21:14时才看到阶段3完成的日志,三个阶段共花费7个小时的时间。

 

通过日志记录看到阶段3的时间非常长,说明在停止SQL Server服务时有特别大的事务在运行。通过SQL专家云,在活动会话中找到会话157,从0:36:38时开始执行一个INSERT语句,到4:14:01停止SQL Server服务时还没有执行完,期间造成了大量的阻塞,日志文件从几个G增长到100G。

 

 

 

再来分析为什么恢复数据库要这么长时间,根据数据库恢复的流程,忽略掉阶段1的时间,阶段2和阶段3都是要从最早的未提交事务的时间点开始分析事务日志,也就是要从0:36:38开始,要分析处理100G的日志。

 

总结

大的INSERT事务(分析后得知因为条件写错了,要插入6000万条数据)执行期间造成了大量的阻塞,影响了系统的其它功能,客户接到故障报警后没有仔细分析原因就直接重启了SQL Server服务。重启后数据库的恢复时间非常长,由于客户不熟悉原理,每次启动服务后等待十几分钟看数据库状态不对便再次重启,如此反复多次,耽误了很长的时间。

SQL Server作为一个成熟的数据库,在每个步骤都会记录下详细的日志,我们要养成看日志分析问题的习惯。另外,从SQL Server 2016开始,增加了数据库恢复进度的扩展事件,可以分析的更详细。具体参考“https://learn.microsoft.com/zh-cn/archive/blogs/sql_server_team/new-extended-events-for-database-recovery-progress”。

大事务导致日志文件增大,磁盘空间撑爆,事务回滚时间长,SQL Server服务异常终止等问题,要尽量避免大事务。

大事务导致的回滚时间长或者异常终止后重启SQL Server服务时数据库恢复时间长是一个非常困扰的问题。在SQL Server 2019新推出的“加速数据库恢复”功能就是解决这个痛点的,但是不成熟,开启这个功能又导致了数据文件增长过大等其它的问题,在SQL Server 2022版本中进行了改进。

详细资料参考“https://learn.microsoft.com/zh-cn/sql/relational-databases/accelerated-database-recovery-concepts?view=sql-server-ver16”。

 

北京格瑞趋势科技有限公司是聚焦于数据服务的高新技术企业,成立于2008年,创始团队及核心技术人员来自微软和雅虎。微软数据平台合作伙伴,卫宁健康数据平台战略合作伙伴。通过产品+服务双轮驱动的业务模式,14年间累计服务4000+客户,覆盖互联网、市政、交通、电信、医疗、教育、电力、制造业等各个领域。

 

 

标签:事务,恢复,数据库,Server,阶段,SQL,日志
From: https://www.cnblogs.com/zhuancloud/p/17786891.html

相关文章

  • 数据库绪论
    一、数据库系统概述1.1数据库四个基本概念1.1.1数据(data)  数据是数据库中存储的基本对象。描述事物的符号记录称为数据,描述事物的符号可以是文字、图形、图像、音频、视频等,数据有多重表现形式,它们都可以经过数字化后存入计算机。数据的含义称为数据的语义,例如:李明是数据,名......
  • 关于 LLM 和知识图谱、图数据库,大家都关注哪些问题呢?
    自LLM系列文章《知识图谱驱动的大语言模型LlamaIndex》、《Text2Cypher:大语言模型驱动的图查询生成》、《GraphRAG:知识图谱结合LLM的检索增强》陆续和大家见面,以及《夜谈LLM》主题直播同大家交流一番LLM和知识图谱、图数据库之后,在上周NebulaGraph的研发人员做客开......
  • ChatGPT 问答00024 10亿小片段文本推荐用什么数据库记录
    对于这种大规模的文本数据,一种可能的解决方案是使用分布式数据库系统,它能够有效地处理和查询大量数据。以下是一些可能的选择:ApacheCassandra:Cassandra是一个高度可扩展的分布式数据库,特别适合处理大量数据跨多个数据中心和云服务。它提供了高性能和无单点故障等特点。Goog......
  • 数据库系列:使用高区分度索引列提升性能
    数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更1背景我们常常在创建组合索引的时候,会纠结一个问题,组合索引包含多个索引字段,它的顺序应该怎么放,怎样能达到更大的性能利用。正确的索引字段顺序应该取决于使用该索......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(二)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务在上文中,我们为大家介绍了如何用JPA和SpringFacets创建一个Java......
  • 如何使用DiskGenius恢复硬盘数据?
    硬盘数据丢失了怎么办?硬盘丢失数据的问题很常见,遇到了也不要慌张,因为有办法解决。作为普通用户也一样可以自己找回丢失的数据。今天,小编就和大家一起了解一下,如何使用恢复工具找到丢失的硬盘数据。DiskGenius是一款功能强大的数据恢复软件,它采用了最新的扫描算法和底层读取磁盘扇区......
  • 如何使用DiskGenius恢复硬盘数据?
    硬盘数据丢失了怎么办?硬盘丢失数据的问题很常见,遇到了也不要慌张,因为有办法解决。作为普通用户也一样可以自己找回丢失的数据。今天,小编就和大家一起了解一下,如何使用恢复工具找到丢失的硬盘数据。DiskGenius是一款功能强大的数据恢复软件,它采用了最新的扫描算法和底层读取磁盘扇区......
  • 单位机房 服务器 ORACLE数据库服务器
    开发好的软件系统都部署在服务器上才能访问,服务器是专门伺候大家为大家服务的计算机。上几张图片看下服务器的样子 ......
  • Oracle特殊恢复原理与实战_12 Oracle坏块处理
       http://dbase.cc/2018/05/22/oracle/Oracle%E7%89%B9%E6%AE%8A%E6%81%A2%E5%A4%8D%E5%8E%9F%E7%90%86%E4%B8%8E%E5%AE%9E%E6%88%98-%E8%AF%BE%E7%A8%8B%E5%AD%A6%E4%B9%A0/12_Oracle%E7%89%B9%E6%AE%8A%E6%81%A2%E5%A4%8D%E5%85%A5%E9%97%A8/......
  • 一文教你学会使用Cron表达式定时备份MySQL数据库
    各位小伙伴大家好,今天我就来讲述一下作为一个运维,如何解放自己的双手去让服务器定时备份数据库数据,防止程序操作数据库出现数据丢失。mysql_dump_script.sh脚本文件#!/bin/bash#保存备份个数,备份7天数据number=7#备份保存路径路径名可自定义backup_dir=/data/backup#日期......