sql server日志处理不当造成的隐患详解

事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 “ Unknown error 258 ”,后来查询日志发现错误日志

第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有40个左右,于是继续排查问题,发现dbserver机器这段时间磁盘io操作特别的高,很不正常,详见下图

发现磁盘io问题,继续查看sqlserver日志,发现原因: “Autogrow of file ‘xxxx_log' in database ‘xxxx' was cancelled by user or timed out after 3398 milliseconds.  Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.”

发现这种问题因为log日志文件太大了一直没有压缩过,并且创建数据库的时候默认选择了10%的增量来扩大log增量文件,这样日志文件的10%会越来越大从而产生超时高io操作

解决方案:

1、定期清理log文件,防止log文件越来越大

 USE [master]
 GO
 ALTER DATABASE 数据库名 SET RECOVERY SIMPLE WITH NO_WAIT
 GO
 ALTER DATABASE 数据库名 SET RECOVERY SIMPLE
 GO
 USE 数据库名
 GO
 DBCC SHRINKFILE (N'数据库名_Log' , 11, TRUNCATEONLY)
 GO
 USE [master]
 GO
 ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT
 GO
 ALTER DATABASE 数据库名 SET RECOVERY FULL
 GO 

2、修改默认数据库log增量10% 为 500M(看具体情况,一般够了)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • SqlServer数据库提示 “tempdb” 的日志已满 问题解决方案

    执行sql 语句,中间没有用到临时表 提示服务器: 消息 9002,级别 17,状态 2,行 1 数据库 'tempdb' 的日志已满.请备份该数据库的事务日志以释放一些日志空间. 网上找了下解决方案,大体是扩大临时库的日志文件的大小解决的 解决过程: 查看了下数据库的属性,是自动增长,不指定文件大小上限. 在网上Google了很久,试了些方法都不行:数据库所在磁盘还有很大的可用空间,试着下重药了. 直接把tempdb的数据文件和日志文件的大小改为3000M, 问题解决. 记录一下清空日志的命令

  • SQL Server 2000 清理日志精品图文教程

    SQL Server 2000 清理日志精品教程 SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志呢?如何压缩SQL Server 2000的日志呢?如何让SQL Server 2000的日志变小呢? 据小编所知,办法有很多很多,总结起来算有3类吧: 1.点几下鼠标,用SQL Server 2000管理工具中的企业管理器即可实现,待会儿详解:2.用SQL语句,在SQL Server 2000管理工具中的查询分析器可以实现,此法高级人士喜欢用:3.用第三

  • SQL Server 2005删除日志文件的几种方法小结

    使用MS数据库的朋友就会知道一个问题,C盘的空间很容易被占满了.因为本来系统盘就分区比较小,这是由于数据库在使用过程中会使日志文件不断增加,使得数据库的性能下降,并且占用大量的磁盘空间.SQL Server数据库都有log文件,log文件记录用户对数据库修改的操作.可以通过直接删除log文件和清空日志在清除数据库日志. 一.删除LOG1.分离数据库.分离数据库之前一定要做好数据库的全备份,选择数据库--右键--任务--分离. 勾选删除连接 分离后在数据库列表将看不到已分离的数据库. 2.删除LO

  • SQLServer日志清空语句(sql2000,sql2005,sql2008)

    SQL Server日志清空方法 在查询分析器中顺序执行以下三步,其中 databasename 为你的数据库文件名 sql2000日志清空 可以将jb51.ldf文件变得很小,方便备份数据库等,在sqlserver查询分析器中执行即可. 复制代码 代码如下: DUMP TRANSACTION [jb51] WITH NO_LOGBACKUP LOG [jb51] WITH NO_LOGDBCC SHRINKDATABASE([jb51]) 1.清空日志: DUMP TRANSACTION [d

  • sqlserver 数据库压缩与数据库日志(ldf)压缩方法分享

    Access 操作很简单,具体不步骤如下:打开你mdb数据库,工具-->数据库实用工具-->压缩和修复数据库(c)... SQL SERVER 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1.设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQLServer-->SQLServer组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数

  • SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    SQL2008清空删除日志: 方法一: USE [master] GO ALTER DATABASE AFMS SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE AFMS SET RECOVERY SIMPLE GO USE AFMS GO DBCC SHRINKFILE (N'AFMS_Log' , 11, TRUNCATEONLY) GO USE [master] GO ALTER DATABASE AFMS SET RECOVERY FU

  • SqlServer修改数据库文件及日志文件存放位置

    --查看当前的存放位置 select database_id,name,physical_name AS CurrentLocation,state_desc,size from sys.master_files where database_id=db_id(N'数据库名'); --修改文件的存放位置下次启动生效 --testDb为数据库名, alter database 数据库名 modify file ( name = 文件名(不包含后缀), filename = '文件存储路径'); a

  • SQL Server 数据库清除日志的方法

    方法一: 1.打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2.再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了. 方法二: 设置检查点,自动截断日志 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1.设置数据库模式为简单模

  • SQL Server 压缩日志与减少SQL Server 文件大小的方法

    一般不建议做第4,6两步,第4步不安全,有可能损坏数据库或丢失数据.第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复. 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志 BACKUP LOG 数据库名 WITH NO_LOG 3.收缩数据库文件 (如果不压缩,数据库的文件不会减小企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M

  • sql server日志处理不当造成的隐患详解

    事故背景:一大早还在路上,群里陆续有人反馈系统一直报错 " Unknown error 258 ",后来查询日志发现错误日志 第一反应是不是数据库连接不够用了?导致超时?但是通过sql查询当时连接也只有40个左右,于是继续排查问题,发现dbserver机器这段时间磁盘io操作特别的高,很不正常,详见下图 发现磁盘io问题,继续查看sqlserver日志,发现原因: "Autogrow of file 'xxxx_log' in database 'xxxx' was canc

  • SQL Server 2016 Alwayson新增功能图文详解

    概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进. 一.自动故障转移副本数量 在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个. 说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本.重要程度(一般).

  • asp.net开发sql server转换成oracle的方法详解

    前言 因为前段时间我们公司项目 要把sql server 转oracle,发现网上这方面的资料较少,所以在这里分享一下心得,也记录一下问题,下面话不多说了,来一起看看详细的介绍: 开始我研究了一段时间 然后下载了 oracle 11g 版本 和 PL/SQL(客户端) 和sql server 不同的是 oracle 没有自己的客户端 需要用第三方的软件运行 PL/SQL 就是一个 sqldeveloper 也是一个,PL/SQL 我觉得比较稳定一点.但是2个都安装的话 刚好互补了 oracle

  • SQL Server解析XML数据的方法详解

    本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

  • Navicat远程连接SQL Server并转换成MySQL步骤详解

    前言 最近项目中遇到用 SQL Server的程序,以前没用过这个数据库,于是尝试将其转换为 MySQL 的格式,可是不想在本地安装 SQL Server,于是决定在一个远程的 Windows 服务器上安装,并在本地连接它,然而在实现过程中遇到了诸多问题,记录于此.方便自家或者大家在需要的时候参考借鉴,下面来一起看看吧. 环境信息 先说一下环境,服务器的系统是 Windows Server 2016 Datacenter,数据库是 SQL Server 2016 Express. 本地这面是 W

  • 深入sql server 2005 万能分页存储过程的详解

    –建立主表临时表CREATE TABLE #temp(rownumber bigint,orderseqno VARCHAR(36),goodsname VARCHAR(50),companyname VARCHAR(100))–建立子表临 时表CREATE TABLE #detail(orderseqno VARCHAR(36),detailid UNIQUEIDENTIFIER,unitprice DECIMAL(12,2),Qty int)–插入主表数据到主表临时表insert into

  • Node.js连接Sql Server 2008及数据层封装详解

    本文实例讲述了Node.js连接Sql Server 2008及数据层封装.分享给大家供大家参考,具体如下: 最近需要学习Node.js,所以很久没写东西了,疯狂的看了很久的书.有关于Node.js的学习知识,可以参考官网教程WWW.NODEJS.ORG,或者书籍<Node.js权威指南>.这里我记录一下Node.js连接Sql Server 2008的步骤. Node.js连接数据库需要特定的模块msnodesql,这个模块需要特定的环境去生成才可以使用. 前期准备如下: 1.安装Node.

  • SQL Server中交叉联接的用法详解

    目录 1.交叉联接(cross join)的概念 2.交叉联接的语法格式 3.交叉查询的使用场景 3.1 交叉联接可以查询全部数据 3.2 交叉联接优化查询性能 4.总结 今天给大家介绍SQLServer中交叉联接的用法,希望对大家能有所帮助! 1.交叉联接(cross join)的概念 交叉联接是联接查询的第一个阶段,它对两个数据表进行笛卡尔积.即第一张数据表每一行与第二张表的所有行进行联接,生成结果集的大小等于T1*T2. select * from t1 cross join t2 2.交

  • SQL Server中JSON函数的用法详解

    目录 一. 将查询结果输出JSON格式 1.FOR JSON AUTO:SELECT语句的结果以JSON输出. 2.FOR JSON AUTO,Root(’’) :为JOSN加上根节点 3.FOR JSON PATH输出:可通过列别名来定义JSON对象的层次结构 4.FOR JSON PATH+ROOT输出:为JOSN加上根节点 5.INCLUDE_NULL_VALUES:值null的字段需要显示出现. 6.列的别名,可以增加带有层级关系的节点. 二. 解析JSON格式的数据 1.使用OPENJ

  • SQL Server中字符串函数的用法详解

    在开发T-SQL时,经常会需要对字符串进行各种各样的操作,下面介绍常用的字符串函数. 一.编码转换 1.获取字符的ASCII码:ascii ASCII(espression) 这里的expression是一个返回char或varchar数据类型的表达式,ASCII函数仅对表达式最左侧的字符返回ASCII码值. 返回值:int数据类型. 注意:如果是多个字符的字符串,也只是返回第一个字符的ASCII码值. select ASCII('f') --输出 102 2.获取ASCII码对应的字符:cha

随机推荐