SQL Server数据库空间管理 (2)
本篇内容主要解决剩余的两个问题: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)的更多相关文章
- SQL Server数据库空间管理 (1)
数据库经常遇到的问题: 1).数据库文件空间用尽 2).日志文件不停增长 3).数据库文件无法收缩 4).自动增长和自动收缩 本系列就以上面的4个问题入手分析并总结数据库空间的管理方法. 1. ...
- MS SQL Server数据库在线管理工具
MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...
- Microsoft SQL Server 数据库服务器管理维护角色
固定服务器角色: 按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述: Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句.这条语句允 ...
- SQL Server 数据库空间使用情况
GO /****** Object: StoredProcedure [dbo].[SpaceUsed] Script Date: 2017-12-01 11:15:11 ******/ SET AN ...
- c# SQL Server数据库操作-管理命令参数的类:SqlParameter
使用SqlCommand类来执行Transact-SQL语句或存储过程时,有时需要用参数传值或作为返回值,SqlParameter类正是为了此需要而设计的类.下面介绍如何使用该类为SqlCommand ...
- 《SQL Server企业级平台管理实践》读书笔记——SQL Server数据库文件分配方式
1.文件分配方式以及文件空间检查方法 最常用的检查数据文件和表大小的命令就是:sp_spaceused 此命令有三个缺陷:1.无法直观的看出每个数据文件和日志文件的使用情况.2.这个存储过程依赖SQL ...
- 3. SQL Server数据库状态监控 - 可用空间
原文:3. SQL Server数据库状态监控 - 可用空间 数据库用来存放数据,那么肯定需要存储空间,所以对磁盘空间的监视自然就很有必要了. 一. 磁盘可用空间 1. 操作系统命令或脚本.接口或工具 ...
- SQL Server 数据库表的管理
上一篇文章简单梳理了一下SQL Server数据库的安装和基本操作,这篇文章主要讲述一下数据库表的管理 一.数据库的创建 有关数据库的创建有两种方式,一种是通过视图创建,第二种就是通过T-SQL语句来 ...
- 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的还原方式
本篇是继上篇的备份方式,本篇介绍的是还原方案,在SQL Server在2005以上现有的还原方案一般分为以下4个级别的数据还原: 1.数据库完整还原级别: 还原和恢复整个数据库.数据库在还原和恢复操作 ...
随机推荐
- web.py安装
web.py 是python的一个web插件,用于发布web服务安装下载web.py https://github.com/webpy/webpy 安装 解压下载的rar 打开控制台并定位到此文件夹输 ...
- 安装好ubuntu之后要干的几件事
安装完ubuntu之后啊,系统除了自带了firefox,libre office等能用,要应付日常需求还差了些.然后我根据最近我的需求写了个清单.完成这个清单就让ubuntu成了一个得心应手的好工具了 ...
- 【1】python核心编程 第三章
1.继续( \ ) 有两种例外情况一个语句不使用反斜线也可以跨行.在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号.中括号.花括号时可以多行书写.另外就是三引号包括下的字符串也可以跨行书写 ...
- QPainter就是手里的作图工具,只需要三洋东西:笔(颜色,宽度,样式),字体(写字),刷子(大面积作画),这里有三个典型例子
设置笔和字体以后,就可以写字了: void MainWindow::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter ...
- C# System.Object基类
System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Objec ...
- 【转】C++ STL 相关的问题集合
3.C++ STL中vector的相关问题: (1).调用push_back时,其内部的内存分配是如何进行的? (2).调用clear时,内部是如何具体实现的?若想将其内存释放,该如何操作 ...
- Rotate Array 解答
Question Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, t ...
- 【bzoj1031】[JSOI2007]字符加密Cipher
题目描述 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法:把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作:JSOI07 ...
- 【转】C++容器类
C++容器类 C++中的容器类包括“顺序存储结构”和“关联存储结构”,前者包括vector,list,deque等:后者包括set,map,multiset,multimap等. 若需要存储的元素数在 ...
- Unity 读取Excel
游戏有大多数配置文件,比如玩家等级,游戏商店信息等等.通常情况下把这些放入excel中来读取 第一种解决方案: xlsx –> csv –> 改变成UTF-8 或者Unicode编码 –& ...