本篇内容主要解决剩余的两个问题:2)、日志文件不停增长  4)、自动增长和自动收缩

日志文件不停增长的解决

首先,当日志文件超过预期的时候,我们然要看看日志文件中存放了什么内容:DBCC LOG ;这里就不对这个命令进行仔细的讲解了,重要的是我们通过这个可以知道日志记录的特点:

1.日志记录的是数据的变化,而不是记录用户发过来的操作。

2.每条记录都有它唯一的编号(LSN),并且记录了他的事务号。

3.日志记录的行数和实际修改的数据量有关。

4.日志记录了事务的发生时间,但是不保证记录下了发起这个事务的用户名,更不记录发起者的程序名称。

5.SQL Server能从日志记录里里面读到数据修改前的值和修改后的值。

再次,SQL Server采用的日志记录会避免日志文件将空间耗尽,这种机制会定期清理日志文件中不需要的日志记录:

1. 所有没有经过“检查点”的日志记录。

2.所有没有提交的事务所产生的日志记录,以及在他们之后的所有日志记录。

3.所有要做备份的日志记录。

4.有其他需要读取日志的数据库功能模块。

最后,我们分析日志文件中记录越来越多的原因,以便于处理日志不停增长:

1.数据库恢复模式不是简单模式,但是没有安排日志备份;

       对于非简单模式的数据库,只有做完日志备份记录才会被截断。做完整备份和差异备份都不会起到这个作用。

     2.数据库上面有一个很长时间都没有提交的事务;

       这个情况,只要这个连接不断开,这个事务就会永远存在,直到客户端主动提交或者回滚它。而这个事务的那个开启时间点开始的所有日志记录,SQL Server都会记录。

     3.数据上有个很大的事务正在进行;

       例如:用户正在建立/重建索引,或者用DELETE/INSERT语句删除或插入大量数据等。

     4.数据库复制或者镜像出了异常。

    要避免日志文件不停增长,其实就是要避免上面这些情况的发生,对于一个最近不会去做日志备份的数据库,设置简单恢复模式即可;如果数据库设置了完整恢复模式,那就一定要安排定期做日志备份。如果复制或镜像任务出问题,要及时解决,如果没有办法解决就要暂时拆除复制或镜像,以防止日志记录越积越多;通常解决日志增长的原因步骤如下:

1. 检查日志现在使用情况和数据库状态:

DBCC SQLFREE(LOGSPACE)
go
SELECT name,recovery_model_desc,log_resuse_wait,log_reuse_wait_desc from sys.dadabases
go

  如果检查结果表明,当前日志绝大数都在使用中(Log Space Used(%)),那就马上定位是什么原因导致了日志记录不能被SQL Server清除掉,如果当前日志的大部分已经处于空闲状态,那就说明触发日志增长的因素已经暂时消失。如果数据库的状态是LOG_BACKUP,那就意味这SQL SERVER在等待日志备份,这时候需要检查备份计划,是否需要做日志备份,如果不需要就可以直接把恢复模式设置为简单。这样SQL server会在下一个检查点的时候做日志记录截断工作。

2.检查最老的活动事务:

--返回当前数据库最久没有提交的事务
DBCC OPENTRAN
GO
---查询这个连接是由什么程序建立的以及这个连接最后发过来的一句命令内容
SELECT st.text,t2.* From
sys.dm_exe_session AS t2, sys.dm_exec_connections AS t1
CROSS APPLY
sys.dm_exec_sql_text(t1.most_recent_sql_handle) AS st
WHERE t1.session_id=t2.session_id AND t1.session_id>50

如果找到了一条这样的事务,可以尝试使用kill 命名关闭连接。

  自动增长和自动收缩

设置自动增长要注意:

1. 要设置成按照固定大小增长,而不能按照比例;

这样就能避免一次增长太多或者太少所带来的不必要麻烦。比较小的数据库,设置一次增长50MB到100MB。对大的数据库设置一次增长100MB到200MB。

2.要定期监测各个数据文件的使用情况,尽量保证每个文件剩余的空间一样大,或者是期望的比例。

3.设置文件最大值,以免SQL SERVER 文件自增长用尽磁盘空间,影响操作系统。

4.发生自增长后,要及时检查新的数据文件空间分配情况。

除了自动增长的功能,数据库还有一个自动收缩的功能。如果设定了这个功能,SQL SERVER每隔半个小时就会检查文件使用情况。如果空间空间大于25%,SQL SERVER就会自动运行DBCC SHRINKFILE的动作。所以这个功能能够防止数据库申请过多的空间而不使用。看似这样做是很好的,但是也是有弊端的:

1.SQL SERVER 只有在空间用尽的情况下才会做自动增长。如果没有找出自增的原因,从而从根本上避免空间用尽,虽然能够暂时用DBCC SHRINKFILE功能收缩文件大小,但是下次数据库还是会可能增长。

2.数据文件收缩会给文件带来更多的碎片。

3.不管是数据库收缩还是增长,对SQL SSERVER都是浪费资源的事情。

SQL Server数据库空间管理 (2)的更多相关文章

  1. SQL Server数据库空间管理 (1)

    数据库经常遇到的问题: 1).数据库文件空间用尽  2).日志文件不停增长 3).数据库文件无法收缩  4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法.   1. ...

  2. MS SQL Server数据库在线管理工具

    MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...

  3. Microsoft SQL Server 数据库服务器管理维护角色

    固定服务器角色: 按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述: Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句.这条语句允 ...

  4. SQL Server 数据库空间使用情况

    GO /****** Object: StoredProcedure [dbo].[SpaceUsed] Script Date: 2017-12-01 11:15:11 ******/ SET AN ...

  5. c# SQL Server数据库操作-管理命令参数的类:SqlParameter

    使用SqlCommand类来执行Transact-SQL语句或存储过程时,有时需要用参数传值或作为返回值,SqlParameter类正是为了此需要而设计的类.下面介绍如何使用该类为SqlCommand ...

  6. 《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式

    1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL ...

  7. 3. SQL Server数据库状态监控 - 可用空间

    原文:3. SQL Server数据库状态监控 - 可用空间 数据库用来存放数据,那么肯定需要存储空间,所以对磁盘空间的监视自然就很有必要了. 一. 磁盘可用空间 1. 操作系统命令或脚本.接口或工具 ...

  8. SQL Server 数据库表的管理

    上一篇文章简单梳理了一下SQL Server数据库的安装和基本操作,这篇文章主要讲述一下数据库表的管理 一.数据库的创建 有关数据库的创建有两种方式,一种是通过视图创建,第二种就是通过T-SQL语句来 ...

  9. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的还原方式

    本篇是继上篇的备份方式,本篇介绍的是还原方案,在SQL Server在2005以上现有的还原方案一般分为以下4个级别的数据还原: 1.数据库完整还原级别: 还原和恢复整个数据库.数据库在还原和恢复操作 ...

随机推荐

  1. du与df为什么有时候会有差异

    以下仅为本人理解,非官方! du命令:统计父目录的目录项,若目录项存在,则进行查找 df命令:统计inode节点,根据inode节点存储的块大小进行统计 差异原因: 当一个文件被进程调用后,复制文件到 ...

  2. 十、装饰(Decorator)模式 --结构模式(Structural Pattern)

    装饰(Decorator)模式又名包装(Wrapper)模式[GOF95].装饰模式以对客户端透明的方 式扩展对象的功能,是继承关系的一个替代方案. 装饰模式类图: 类图说明: 抽象构件(Compon ...

  3. socket基础示例(一)

    //Socket基本编程 //服务端: using System.Net; using System.Net.Sockets; using System.Text; using System.Thre ...

  4. C# System.Uri类_获取Url的各种属性_文件名_参数_域名_端口等等

    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类. 一.属性 AbsolutePath 获取 URI ...

  5. Unique Binary Search Trees II 解答

    Question Given n, generate all structurally unique BST's (binary search trees) that store values 1.. ...

  6. LeeCode-Two Sum

    Given an array of integers, find two numbers such that they add up to a specific target number. The ...

  7. [Medusa-dev] psp_handler - embed python in HTML like ASP

    [Medusa-dev] psp_handler - embed python in HTML like ASP [Medusa-dev] psp_handler - embed python in ...

  8. Android设备定制为永不锁屏

    Android系统的锁屏时间存放在Setting数据库中,字段为Settings.System.SCREEN_OFF_TIMEOUT.查看 DatabaseHelper.java文件可以找到: fra ...

  9. NTP-ntpdate:no server suitable for synchronization found

    NTP-ntpdate 问题处理 解决ntp的错误 no server suitable for synchronization found 当用ntpdate -d 来查询时会发现导致 no ser ...

  10. Sybase配置数据库参数

    Sybase配置数据库参数参数配置的两种方法:sp_configure ‘参数名称’,参数值修改参数文件(如:Sybase主机上的 %SYBASE%\servername.cfg) 配置Sybase数 ...