|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用成绩日记成绩提高篇
aladdin宣布工夫:2002/12/0603:57pm
以下材料源于sybase.com.cn
SSYBASESQLServer的每个数据库,不管是体系数据库(master,model,sybsystemprocs,tempdb),仍是用户数据库,都有本人的transactionlog,每一个库都有syslogs表。Log纪录用户对数据库修正的操纵,以是假如不必命令扫除,log会一向增加直至占满空间。扫除log可用dumptransaction命令;大概开放数据库选项trunclogonchkpt,数据库会每隔一段距离主动扫除log。办理好数据库log是用户操纵数据库必需思索的一面。
上面就几个方面谈谈log及其办理:
1、SQLServer怎样纪录及读取日记信息
我们晓得,SQLServer是先记log的机制。ServerCacheMemory中日记页老是先写于数据页:
Logpages在commit,checkpoint,spaceneeded时写进硬盘。
Datapages在checkpoint,spaceneeded时写进硬盘。
体系在recovery时读每一个database的syslogs表的信息,回退未完成的事件(transaction)(数据改动到事件前形态);完成已提交的事件(transaction)(数据改动为事件提交后的形态)。在Log中记下checkpoint点。如许包管全部数据库体系的分歧性和完全性。
2、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设置工夫的距离。
3、Transactionlog的巨细
没有一个非常严厉的和切实的办法来断定一个数据库的log应当给多年夜空间。对一个新建的数据库来讲,log巨细为全部数据库巨细的20%摆布。由于log纪录对数据库的修正,假如修正的举措频仍,则log的增加非常敏捷。以是说log空间巨细依附于用户是怎样利用数据库的。
比方:
update,insert和delete的频次
每一个transaction中数据的修正量
SQLServer体系参数recoveryinterval值
log是不是存到介质上用于数据库恢复
另有别的要素影响log巨细,我们应当依据操纵估量log巨细,并距离一个周期就对log举行备份和扫除。
4、检测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命令。
5、log设备
一样平常来讲,应当将一个数据库的data和log寄存在分歧的数据库设备上。如许做的优点:
能够独自地备份(backup)transactionlog
避免数据库溢满
能够看到log空间的利用情形。[dbccchecktable(syslogs)]
能够镜像log设备
6、log的扫除
数据库的log是不休增加的,必需在它占满空间之前扫除。后面已会商过,扫除log能够开放数据库选项trunclogonchkpt,使数据库体系每隔一段工夫距离主动扫除log,还能够实行命令dumptransaction来扫除log.trunclogonchkpt选项同dumptransactionwithtruncate_only命令一样,只是扫除log而不保存log到备份设备上。以是假如只想扫除log而不做备份,可使用trunclogonchkpt选项及dumptransactionwithtruncate_only,dumptransactionwithno_log命令。若想备份,应做dumptransactiondatabase_nametodumpdevice。
7、办理年夜的transactions
有些操纵是多量量地修正数据,log增加速率非常快,如:
大批数据修正
删除一个表的一切纪录
基于子查询的数据拔出
批量数据拷贝
上面报告如何利用这些transaction使log不至溢满:
大批数据修正
例:
1>updatelarge_tabsetcol_1=0
2>go
若这个表很年夜,则此update举措在未完成之前便可能使log满,引发1105毛病(logfull)并且实行这类年夜的transaction所发生的exclusivetableloc,制止其他用户在update时代修正这个表,这大概引发逝世锁。为制止这些情形,我们能够把这个年夜的transaction分红几个小的transactions,并实行dumptransaction举措。
上述例子能够分红两个或多个小transactions.
比方:
1>updatelarge_tabsetcol1=0
2>wherecol23>go
1>dumptransactiondatabase_namewithtruncate_only
2>go
1>updatelarge_tabsetcol1=0
2>wherecol2>=x
3>go
1>dumptransactiondatabase_namewithtruncate_only
2>go
若这个transaction必要备份到介质上,则不必withtruncate_only选项。若执行dumptransactionwithtruncate_only,应当先做dumpdatabase命令。
删除一个表的一切纪录:
例:
1>deletetablelarge_tab
2>go
一样,把全部table的纪录都删除,要记良多log,我们能够用truncatetable命令取代上述语句完成不异功效。
1>truncatetablelarge_tab
2>go
如许,表中纪录都删除,而利用truncatetable命令,log只纪录空间接纳情形,而不是纪录删除表中每行的操纵。
基于子查询的数据拔出
例:
1>insertnew_tabselectcol1,col2fromlarge_tab
2>go
一样的办法,对这个年夜的transaction,我们应当处置为几个小的transactions。
1>Insertnew_tab
2>selectcol1,col2fromlarge_tabwherecol1<=y
3>go
1>dumptransactiondatabase_namewithtruncate_only
2>go
1>insertnew_tab
2>selectcol1,col2fromlarge_tabwherecol1>y
3>go
1>dumpdatabasedatabase_namewithtruncate_only
2>go
一样,若想保留log到介质上,则dumptransaction后不加withtruncate_only选项。若实行dumptransactionwithtruncate_only,应当先做dumpdatabase举措。
批量数据拷贝
在利用bcp把数据拷进数据库时,我们能够把这个年夜的transaction酿成几个小的transactions处置,制止log剧增。
开放trunclogonchkpt选项
1>usemaster
2>go
1>sp_dboptiondatabase_name,trunc,true
2>go
1>usedatabase_name
2>go
1>checkpoint
2>go
bcp...-b100(onunix)
bcp.../batch_size=100(onvms)
封闭trunclogonchkpt选项,并dumpdatabase。
在这个例子中,一个批实行100行拷贝。也能够将bcp输出文件分红两或多个分隔的文件,在每一个文件实行后做dumptransaction来制止log满。
若bcp利用疾速体例(无索引,无triggers),如许操纵不记log,换句话说,log只纪录空间分派情形。在这类情形下,要先做dumpdatabase(为恢单数据库用)。若log太小,可置trunclogonchkpt选项,如许在每次checkpoint后扫除log。
8、Threshold和transactionlog办理
SQLServer供应阈值办理功效,它能匡助用户主动监督数据库log设备段的自在空间。
在利用Sybase数据库办理体系(SQLServer)开辟企业使用体系时,大概开辟好的数据库使用体系投进实践运转后,因为用户不休地增添大概修正数据库中的数据,用户数据库的自在存储空间会日趋削减。出格是数据库日记,增加速率很快。一旦自在空间用尽,SQLServer在缺省情形下挂起一切数据利用事件,客户端使用程序中断实行。如许有大概会影响企业一样平常营业处置流程。SybaseSQLServerSystem10供应主动监督数据库自在存贮空间的机制——阈值办理,当数据库利用残剩空间低于必定值时,经由过程实行一个自界说的存储历程,来把持自在空间。在空间用完之前,接纳响应措施,如许有益于营业处置顺遂举行。假如能充实使用SQLServer的阈值办理功效,用户能使一些数据库办理事情主动化,规程化。以是,在此我们将SQLServer这一主要功效先容给读者。
SQLServer的阈值办理同意用户为数据库的某个段上的自在空间设置阈值和界说响应的存储历程。当该段上的自在空间低于所置阈值时,SQLServer主动运转响应存储历程。与阈值绝对应的存储历程由用户界说,SQLServer不供应。一样平常来讲,数据库办理员可经由过程这些存储历程来完成一些一样平常办理事件,比方:
备份数据库,清算日记和删除旧数据
备份数据库日记
扩大数据库空间
拷贝出表中的内容,清算日记,等等。
(一)段(Segment)
SQLServer的阈值办理是基于段(Segment)的,因而,让我们先回忆一下段的观点。每一个数据库创立时,它有三个缺值段:(1)System段;(2)default段;(3)logsegment段。今后,还能够为该数据库增添用户自界说段。未来一切的数据库工具都创建在这些段上,要末是体系界说的段,要末是用户界说的段。数据库的体系表寄存在System段上。在没有指明段时,创建的工具寄存在default段上。数据库的事件日记放在logsegment段上,该段是经由过程利用创建数据库(Createdatabase)命令的logon选项来界说的。
(二)最初时机阈值(Last_chanceThreshold)
缺省情形下,SQLServer监测日记段的自在空间,当自在空间量低于事件日记能乐成转储的必要时,SQLServer运转sp_thresholdaction历程。此自在空间量称为最初时机阈值(Last_chancethreshold),它由SQLServer盘算得来,而且用户不克不及改动。
sp_thresholdaction必需由用户编写,SQLServer不供应。别的,假如最初时机阈值越出,那末在日记空间开释前,SQLServer一向挂起一切事件。但可使用sp_dboption对某一数据库来改动这一举动。设置aborttranonlogfull选项为true,可以使得最初时机越出时,SQLServer撤回一切还未被注册的事件。
(三)阈值办理
体系缺省创建最初时机阈值,由用户编写缺省阈值处置存储历程(sp_thresholdaction),来把持自在空间。除此以外,还可使用以下存储历程办理阈值:
sp_addthreshold创建一个阈值
sp_dropthreshold删除一个阈值
sp_helpthreshold显现阈值有关的信息
sp_dboption改动阈值的“挂起或作废”举动和作废阈值办理
sp_helpsegment显现某个段上空间巨细和自在空间巨细的信息
(四)增添阈值(sp_addthreshold)
它用于创立阈值(threshold)来监测数据库段中空间的利用。假如段中自在空间低于指定值,SQLServer运转有关的存储历程。增添阈值的命令语法为:
sp_addthresholddatabase,segment,free_pages,procedure
个中:
database——要增加阈值的数据库名。必需是以后数据库称号。
segment——其自在空间被监测的段。当指定“default“段时要用引号。
free_pages——阈值所指的自在空间页数。当段中自在空间低于该尺度时,SQLServer运转有关存储历程。
procedure——当segment中的自在空间低于free_pages时,SQLserver实行该存储历程。该历程能够安排在以后SQLServer或Openserver的恣意数据库中。可是,超越阈值时,不克不及实行远程SQLServer上的存储历程。
比方:sp_addthresholdpubs2,logsegment,200,dump_transaction
个中,存储历程界说为:
createproceduredump_transaction
@dbnamevarchar(30),
@segmentnamevarchar(30),
@space_leftint,
@statusint
as
dumptransaction@dbnameto"/dev/rmtx"
那末,当日记段上可用空间小于200页时,SQLServer运转存储历程dump_transaction,将pubs2数据库的日记转储到另外一台设置上。
sp_addthreshold不反省存储历程存在已否。但当阈值越出时,假如存储历程不存在,SQLServer把毛病信息送到毛病日记(errorlog)中。体系同意每一个数据库有256个阈值,而统一段上二个阈值之间的最小空间为128页。其存储历程能够是体系存储历程,也但是在别的数据库里的存储历程,大概OpenServer远历程挪用。
(五)删除阈值(sp_dropthreshold)
它删除某个段的自在空间阈值,可是不克不及删除日记段的最初时机阈植。删除阈值的命令语法为:
sp_dropthresholddatabase_name,segment_name,free_pages
个中三个参数分离为:阈值所属数据库名,阈值所监测的自在空间的段名,和自在空间页。比方:
sp_dropthresholdpubs2,logsegment,200
删除pubs2库中logsegment段的阈值200。
(六)显现阈值(sp_helpthreshold)
它呈报以后数据库上与一切阈值有关的段,自在空间值,形态和存储历程或呈报某一特定段的一切阈值。显现阈值的语法为:
sp_helpthreshold[segment_name]
个中segment_name是以后数据库上一个段的名字。
比方:
sp_helpthresholdlogsegment显现在日记段上的一切阈值
sp_helpthreshold显现以后数据库上一切段上的全体阈值
(七)sp_dboption的新选择
abortxactwhenlogisfull
当日记段的最初时机阈值被超出时,试图往该日记段上记日记的用户历程将被挂起仍是被撤回?缺省情形下体系挂起一切历程。可是可使用sp_aboption改动它。实行sp_dboptionsalesdb,"abortxactwhenlogisfull",true命令后,一旦日记满了,则数据库修正事件将会被回滚。
disablefreespaceacctg
这个选择作废数据库中的阈值办理,但不影响最初时机阈值。实行:sp_dboptionsaledb,"disablefreespaceacctg",true它作废对非日记段上自在空间的统计。作废后,对体系有以下影响:
SQLServer仅盘算日记段上的自在空间
日记段上的阈值持续处于举动形态
在数据段上,体系表不改动,而且sp_spaceused失掉的值是该选择被作废时候的值
数据库段上的阈值生效
恢复加速
(八)阈值的触发历程
频仍的拔出和删除大概会使数据库段中的空间动摇,阈值大概被屡次超出,SQLServer利用体系变量@@thresh_hysteresis,制止一连触发阈值存储历程。它的值由SQLServer设定。在system10.0中,@@thresh_hysteresis是64页。
如图所示:
因而,增添一个阈值,它必需与下一个比来的阈值相距最少2*@@thresh_hysteresis页。
一个阈值被触发,必要以下几个前提建立:
必需抵达阈值
阈值处于举动形态(即它被创建后大概自在空间到达阈值减于@@thresh_hysteresis)
只要自在空间削减阈值才触发,假如自在空间增添,它永久不触发
根据Ambrose所说,Sakila来自一种叫SiSwati的斯威士兰方言,也是在Ambrose的家乡乌干达附近的坦桑尼亚的Arusha的一个小镇的名字。 |
|