当前位置: 首页 > 数据库 > sybase教程 > 正文

Sybase SQL Server日志问题普及

时间:2010-06-19 Sybase中国

Sybase SQL Server 的每一个数据库,无论是系统数据库(master,model, sybsystemprocs, tempdb),还是用户数据库,都有自己的transaction log,每个库都有 syslogs表。Log记录用户对数据库修改的操作,所以如果不用命令清除, log会一直增长直至 占满空间。清除log可用dump transaction 命令;或者开放数据库选项trunc log on chkpt, 数据库会每隔一段间隔自动清除log。管理好数据库log是用户操作数据库必须考虑的一面。

下面就几个方面谈谈log及其管理:

一、SQL Server 如何记录及读取日志信息

我们知道,SQL Server是先记log的机制。Server Cache Memory中日志页总是先写于数据页:

Log pages 在commit ,checkpoint,space needed 时写入硬盘。

Data pages 在checkpoint,space needed 时写入硬盘。

系统在recovery 时读每个database 的syslogs 表的信息,回退未完成的事务 (transaction)(数据改变到事务前状态);完成已提交的事务(transaction)(数据改变为事 务提交后的状态)。在Log中记下checkpoint点。这样保证整个数据库系统的一致性和完整性。

二、Transaction logs 和checkpoint 进程

checkpoint 命令的功能是强制所有“脏”页(自上次写入数据库设备后被更新过的页)写 入数据库设备。自动的checkpoint 间隔是由SQL Server 根据系统活动和系统表 sysconfigures中的恢复间隔(recovery interval)值计算出的。通过指定系统恢复所需的时 间总量,恢复间隔决定了checkpoint 的频率。

如果数据库开放trunc log on chkpt选项,则SQL Server在数据库系统执行checkpoint时 自动清除log。但用户自己写入执行的checkpoint命令并不清除log,即使trunc log on chkpt 选项开放。只有在trunc log on chkpt选项开放时,SQL Server自动执行checkpoint动作,才 能自动清除log 。这个自动的checkpoint动作在SQL Server中的进程叫做checkpoint进程。当 trunc log on chkpt选项开放时,checkpoint进程每隔0秒左右清除log,而不考虑recovery interval设置时间的间隔。

三、Transaction log 的大小

没有一个十分严格的和确切的方法来确定一个数据库的log应该给多大空间。对一个新建的 数据库来说,log大小为整个数据库大小的20%左右。因为log记录对数据库的修改,如果修改 的动作频繁,则log的增长十分迅速。所以说log空间大小依赖于用户是如何使用数据库的。

例如:

◆update,insert和delete 的频率

◆每个transaction 中数据的修改量

◆SQL Server系统参数recovery interval 值

◆log是否存到介质上用于数据库恢复

还有其它因素影响log大小,我们应该根据操作估计log大小,并间隔一个周期就对log进行 备份和清除。