<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
日志问题普及篇
作者:aladdin 发表时间:2002/12/0603:57pm
以下资料源于sybase.com.cn
SSYBASE的每一个,无论是系统数据库(master,model,sybsystemprocs,tempdb),还是用户数据库,都有自己的transactionlog,每个库都有syslogs表。Log记录用户对数据库修改的操作,所以如果不用命令清除,log会一直增长直至占满空间。清除log可用dumptransaction命令;或者开放数据库选项trunclogonchkpt,数据库会每隔一段间隔自动清除log。管理好数据库log是用户操作数据库必须考虑的一面。
下面就几个方面谈谈log及其管理:
一、SQLServer如何记录及读取日志信息
我们知道,SQLServer是先记log的机制。ServerCacheMemory中日志页总是先写于数据页:
Logpages在commit,checkpoint,spaceneeded时写入硬盘。
Datapages在checkpoint,spaceneeded时写入硬盘。
系统在recovery时读每个database的syslogs表的信息,回退未完成的事务(transaction)(数据改变到事务前状态);完成已提交的事务(transaction)(数据改变为事务提交后的状态)。在Log中记下checkpoint点。这样保证整个数据库系统的一致性和完整性。
二、Transactionlogs和checkpoint进程
checkpoint命令的功能是强制所有“脏”页(自上次写入数据库设备后被更新过的页)写入数据库设备。自动的checkpoint间隔是由SQLServer根据系统活动和系统表sysconfigures中的恢复间隔(recoveryinterval)值计算出的。通过指定系统恢复所需的时间总量,恢复间隔决定了checkpoint的频率。
如果数据库开放trunclogonchkpt选项,则SQLServer在数据库系统执行checkpoint时自动清除log。但用户自己写入执行的checkpoint命令并不清除log,即使trunclogonchkpt选项开放。只有在trunclogonchkpt选项开放时,SQLServer自动执行checkpoint动作,才能自动清除log。这个自动的checkpoint动作在SQLServer中的进程叫做checkpoint进程。当trunclogonchkpt选项开放时,checkpoint进程每隔0秒左右清除log,而不考虑recoveryinterval设置时间的间隔。
三、Transactionlog的大小
没有一个十分严格的和确切的方法来确定一个数据库的log应该给多大空间。对一个新建的数据库来说,log大小为整个数据库大小的20%左右。因为log记录对数据库的修改,如果修改的动作频繁,则log的增长十分迅速。所以说log空间大小依赖于用户是如何使用数据库的。
例如:
update,insert和delete的频率
每个transaction中数据的修改量
SQLServer系统参数recoveryinterval值
log是否存到介质上用于数据库恢复
还有其它因素影响log大小,我们应该根据操作估计log大小,并间隔一个周期就对log进行备份和清除。
四、检测log的大小
若log在自己的设备上,dbccchecktable(syslogs)有如下信息:
例:***NOTICE:spaceusedonthelogsegmentis12.87Mbytes,64.35%
***NOTICE:spacefreeonthelogsegmentis7.13Mbytes,35.65%
根据log剩余空间比例来决定是否使用dumptransaction命令来备份和清除log。
用快速方法来判断transactionlog满的程度。
1>usedatabase_name
2>go
1>selectdata_pgs(8,doampg)
2>fromsysindexeswhereid=8
3>go
Note:thisquerymaybeoffbyasmanyas16pages.
在syslogs表用sp_spaceused命令。
五、log设备
一般来说,应该将一个数据库的data和log存放在不同的数据库设备上。这样做的好处:
可以单独地备份(backup)transactionlog
防止数据库溢满
可以看到log空间的使用情况。[dbccchecktable(syslogs)] 1
作者:aladdin 发表时间:2002/12/0603:57pm
以下资料源于sybase.com.cn
SSYBASE的每一个,无论是系统数据库(master,model,sybsystemprocs,tempdb),还是用户数据库,都有自己的transactionlog,每个库都有syslogs表。Log记录用户对数据库修改的操作,所以如果不用命令清除,log会一直增长直至占满空间。清除log可用dumptransaction命令;或者开放数据库选项trunclogonchkpt,数据库会每隔一段间隔自动清除log。管理好数据库log是用户操作数据库必须考虑的一面。
下面就几个方面谈谈log及其管理:
一、SQLServer如何记录及读取日志信息
我们知道,SQLServer是先记log的机制。ServerCacheMemory中日志页总是先写于数据页:
Logpages在commit,checkpoint,spaceneeded时写入硬盘。
Datapages在checkpoint,spaceneeded时写入硬盘。
系统在recovery时读每个database的syslogs表的信息,回退未完成的事务(transaction)(数据改变到事务前状态);完成已提交的事务(transaction)(数据改变为事务提交后的状态)。在Log中记下checkpoint点。这样保证整个数据库系统的一致性和完整性。
二、Transactionlogs和checkpoint进程
checkpoint命令的功能是强制所有“脏”页(自上次写入数据库设备后被更新过的页)写入数据库设备。自动的checkpoint间隔是由SQLServer根据系统活动和系统表sysconfigures中的恢复间隔(recoveryinterval)值计算出的。通过指定系统恢复所需的时间总量,恢复间隔决定了checkpoint的频率。
如果数据库开放trunclogonchkpt选项,则SQLServer在数据库系统执行checkpoint时自动清除log。但用户自己写入执行的checkpoint命令并不清除log,即使trunclogonchkpt选项开放。只有在trunclogonchkpt选项开放时,SQLServer自动执行checkpoint动作,才能自动清除log。这个自动的checkpoint动作在SQLServer中的进程叫做checkpoint进程。当trunclogonchkpt选项开放时,checkpoint进程每隔0秒左右清除log,而不考虑recoveryinterval设置时间的间隔。
三、Transactionlog的大小
没有一个十分严格的和确切的方法来确定一个数据库的log应该给多大空间。对一个新建的数据库来说,log大小为整个数据库大小的20%左右。因为log记录对数据库的修改,如果修改的动作频繁,则log的增长十分迅速。所以说log空间大小依赖于用户是如何使用数据库的。
例如:
update,insert和delete的频率
每个transaction中数据的修改量
SQLServer系统参数recoveryinterval值
log是否存到介质上用于数据库恢复
还有其它因素影响log大小,我们应该根据操作估计log大小,并间隔一个周期就对log进行备份和清除。
四、检测log的大小
若log在自己的设备上,dbccchecktable(syslogs)有如下信息:
例:***NOTICE:spaceusedonthelogsegmentis12.87Mbytes,64.35%
***NOTICE:spacefreeonthelogsegmentis7.13Mbytes,35.65%
根据log剩余空间比例来决定是否使用dumptransaction命令来备份和清除log。
用快速方法来判断transactionlog满的程度。
1>usedatabase_name
2>go
1>selectdata_pgs(8,doampg)
2>fromsysindexeswhereid=8
3>go
Note:thisquerymaybeoffbyasmanyas16pages.
在syslogs表用sp_spaceused命令。
五、log设备
一般来说,应该将一个数据库的data和log存放在不同的数据库设备上。这样做的好处:
可以单独地备份(backup)transactionlog
防止数据库溢满
可以看到log空间的使用情况。[dbccchecktable(syslogs)] 1