Sybase数据库ASE事务日志的管理技巧详解

『 更新时间:2008-4-14 』『 字体:变小 变大 』『 作者:佚名 | 来源:互联网
SYBASE ASE 事务日志

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

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

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

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

 

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

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

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

  二、Transaction logs 和checkpoint 进程

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

  如果数据库开放trunc log on chkpt选项,则ASE在数据库系统执行checkpoint时自动清除log。内容来自中国站长资讯网(www.chinahtml.com)但用户自己写入执行的checkpoint命令并不清除log,即使trunc log on chkpt选项开放。只有在trunc log on chkpt选项开放时,ASE自动执行checkpoint动作,才能自动清除log 。这个自动的checkpoint动作在ASE中的进程叫做checkpoint进程。当trunc log on chkpt选项开放时,checkpoint进程每隔60秒左右清除log,而不考虑recovery interval设置时间的间隔。

  三、Transaction log 的大小

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

update,insert和delete 的频率

每个transaction 中数据的修改量

ASE系统参数recovery interval 值

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

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

  四、检测log 的大小

  若log 在自己的设备上,dbcc checktable (syslogs) 有如下信息:

例:***NOTICE:space used on the log segment is 12.87Mbytes,64.35%
***NOTICE:space free on the log segment is 7.13Mbytes,35.65%

根据log剩余空间比例来决定是否使用dump transaction 命令来备份和清除log。

  用快速方法来判断transaction log 满的程度。

1>use database_name

2>go

1>select data_pgs (8,doampg)

2>from sysindexes where id=8

3>go

Note:this query may be off by as many as 16 pages.

在syslogs 表用sp_spaceused 命令。

  五、log 设备

  一般来说,应该将一个数据库的data和log存放在不同的数据库设备上。这样做的好处:

可以单独地备份(back up)transaction log

防止数据库溢满

可以看到log空间的使用情况。[dbcc checktable (syslogs)]

可以镜像log设备

  六、log 的清除

  数据库的log是不断增长的,必须在它占满空间之前清除。前面已经讨论过,清除log可以开放数据库选项trunc log on chkpt,使数据库系统每隔一段时间间隔自动清除log,中国站长资讯网还可以执行命令dump transaction 来清除log.trunc log on chkpt 选项同dump transaction with truncate_only 命令一样,只是清除log而不保留log到备份设备上。所以如果只想清除log而不做备份,内容来自中国站长资讯网(www.chinahtml.com)可以使用trunc log on chkpt 选项及dump transaction with truncate_only,dump transaction with no_log 命令。若想备份,应做dump transaction database_name to dumpdevice。

  七、管理大的transactions

  有些操作是大批量地修改数据,log增长速度十分快,如:

  大量数据修改

  删除一个表的所有记录

  基于子查询的数据插入

  批量数据拷贝

  下面讲述怎样使用这些transaction 使log 不至溢满:

  大量数据修改 例 :

  1>update large_tab set col_1=0
  2>go

  若这个表很大,则此update动作在未完成之前就可能使log满,引起1105错误(log full)而且执行这种大的transaction所产生的exclusive table lock,阻止其他用户在update期间修改这个表,这可能引起死锁。为避免这些情况,我们可以把这个大的transaction分成几个小的transactions,并执行dump transaction 动作。

[1] [2] 下一页

【点击数:】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

关文章

您的姓名:
评分等级:
1分 2分 3分 4分 5分
评论内容:
1、严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
2、用户需对自己在使用金石网服务过程中的行为承担法律责任。
3、本站管理员有权保留或删除评论内容。
4、评论内容只代表网友个人观点,与本网站立场无关。
  • 金石网
  • | 设为首页 | 加入收藏 | 联系我们 | 版权申明 | 友情链接 | 站点地图 | 网站帮助 | 网站留言 | 广告服务 |
  • Copyright © 2001-2008 KingsNet.biz All Rights Reserved. 闽ICP备05026663号
  • 返回网站顶部