仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 906|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:调优日记切换(Tuning Log Switches)

[复制链接]
萌萌妈妈 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:40:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
调优日记切换(TuningLogSwitches)



日记切换:LGWR历程中断写日记到以后日记文件,封闭日记文件,翻开新的日记文件并写日记缓存中的数据到新的日记文件。



日记切换能够命令ALTERSYSTEMSWITCHLOGFILE大概ALTERSYSTEMARCHIVELOG来手工实行,也能够经由过程设置参数LOG_ARCHIVE_START使其主动实行。一样平常的缘故原由是一个历程不克不及将天生的重做日记从缓存中写到以后的日记文件,由于已利用到以后日记文件的最初一个数据块。





日记切换时做到的相干的步骤按次:



1、实行一个把持文件事件来选择下一个日记文件以利用并扫除把持文件出口。通常为选择以后带有最小日记序列号的日记文件来作为下一个利用,在这一步上,假如有需要,日记切换将会守候DBWR历程完整后面一个日记文件的日记切换的CHECKPOINT,守候ARCn历程完成回档。

2、利用redocopylatches和redogenerationlatches两个latch来制止重做日记在日记缓存中天生(标志日记缓存形态),并将日记缓存中的数据写到日记文件(磁盘)中。若有大概用并行的体例,会同时将文件中最初一个纪录的SCN号写到头数据块中(headerblock)。在这些“写”操纵都完成以后LGWR历程封闭这个日记文件。

3、提拔SCN值实行第二个把持文件事件来将日记文件标志为CURRENT,把之前的日记文件标志为ACTIVE,一旦DBWR历程完成了日记切换的CHECKPOINT后,这个文件的形态(之前的日记文件)会被标志为INACTIVE。假如数据库运转在回档形式下,LGWR历程经由过程把持文件中日记文件的出口段将这个日记文件(之前的日记文件)增加到回档毗连单中,假如启动的是主动回档,LGWR会激活ARCn背景历程将这个日记文件举行回档。假如以后利用的一切ARCn历程都处于忙形态,LGWR会激活一个新的ARCn历程,ARCn历程数由参数log_archive_max_processes。

4、最初一步,LGWR历程翻开新日记文件组的一切成员,并将新的日记序列号和底SCN写到头数据块(headerblock)。然后将日记缓存形态改成能够天生日记。



日记切换大概会花较长工夫,常常是以秒记,日记切换历程有较年夜的调优潜力。相对一连的迟缓的功能,OLTP体系的用户一样平常更难忍耐数据库的中断的较差的功能,以是,削减日记切换频次,削减切换距离工夫长短常主要的。



在体系功能方面,日记切换抵触的次要体现在于logfileswitchcompletion守候事务上。假如日记切换功能差,别的一个守候事务logbufferspace守候也会马上发生。对日记切换调优就是要先调优logfileswitchcompletion守候事务然后是logbufferspace守候。



利用年夜的日记文件:为了最小化日记切换频次,能够加年夜日记文件的SIZE(尽量年夜,最易回档),也要把持CHECKPOINT(如设置参数fast_start_mttr_target)来使数据库恢复功能最优。

每一个联机日记文件应当放在专有的磁盘上以避免ARCn历程同时进进会见该磁盘。不要利用小的日记文件来保留磁盘空间,由于保留上去的空间不会再被利用(联机日记文件巨细断定后是不会再增加的,以是不会用到您所保存上去的这些空间)

增添联机日记文件会进步回档的距离工夫。、

别的一方面,在利用了年夜的联机日记文件时,要经由过程调优回档以削减资本利用强度。



坚持日记文件是翻开形态:调剂日记切换的速率最年夜的调优的潜伏中央在于新日记文件成员的翻开历程,翻开新日记文件是用操纵体系的指令open()。假如有其他的一个历程在统一个文件中已有翻开文件的形貌符则操纵体系挪用这个命令来翻开新的日记文件的速率是很快的,次要缘故原由是关于文件的一些信息都放在了体系的内核内存中。

上面这个剧本用于在实例启动时将日记文件的信息放到内核内存中,能够在必定的水平上进步日记切换的速率。这个是SHELL剧本,用于UNIX操纵体系中,用CRON来按期天天完成:hold_logs_open.sh

###############################################################################

#

#Synopsis:hold_logs_open.shinstance

#Purpose:toholdthelogfilesopentoacceleratelogswitches

#

#Copyright:(c)IxoraPtyLtd

#Author:SteveAdamswithacknowledgementstoChrisBunting

#

###############################################################################



if[$#-ne1]

then

echo"Usage:hold_logs_openinstance">&2

exit1

fi

instance=$1



ORACLE_SID=$1

ORAENV_ASK=NO

.oraenv



fd=3

echo

setpages0feedbackoff

selectmemberfromv$logfile;

promptEnd-of-Files

|

sqlplus-sinternal|

whilereadlogfile

do

if["$logfile"=End-of-Files]

then

if["$fd"-gt3]

then

sleep86460&

fi

exit0

fi

eval"exec$fd<$logfile"

fd=`expr$fd+1`

#

#Uncommenttheselinesifyourshellonlysupportsinputredirection

#forsingledigitfiledescriptors.

#

#if["$fd"-eq10]

#then

#sleep86460&

#fd=3

#fi

done





调剂把持文件事件:每第二天志切换都包括了两次把持文件事件,把持文件事件是在CF行列锁的回护下实行的,以是没有进一步的需要来把持把持文件的“写”操纵,可是为了在把持文件事件时代的实例大概体系FAILURE的可恢复性,仍是有需要举行必定的把持。



把持文件的可恢复性,起首写恢复布局到把持文件的第二个数据块,在写把持文件中的方针块时(把持文件事件所要写的块)守候其操纵(恢复布局写操纵)完成,因而,每一个把持文件事件最少包括两个写I/O操纵的守候。



假如利用的激活的把持文件是多个,则I/O操纵会以串行的体例来完成。因而,要进步把持文件事件的功能就是要削减激活的把持文件数。在年夜多半情形下,能够只利用一个激活的把持文件,然后用硬件镜像及利用命令ALTERSYSTEMBACKUPCONTROLFILETOTRACE来备份把持文件及回护把持文件。



上面的剧本(backup_controlfile.sql)供应了一种备份计划,次要在UNIX下完成,将把持文件的备份放到数据库的创立目次中:

trace_file_name.sql(取得跟踪文件名)

-------------------------------------------------------------------------------

--

--Script:trace_file_name.sql

--Purpose:togetthenameofthecurrenttracefile

--

--Copyright:(c)IxoraPtyLtd

--Author:SteveAdams

--

--Synopsis:@trace_file_name

--

--OR

--

--settermoutoff

--@trace_file_name

--settermouton

--...&Trace_Name...

--

--Description:Thisscriptgetsthenameofthetracefileforthecurrent

--session.Itcanbeusedinteractively,orfromotherscripts.

--ThenameissavedintheSQL*Plusdefine&Trace_Name.

--

--Therearethreeversionsofthequerybelow,becausethetrace

--filesarenameddifferentlydependingontheplatform.The

--twoincorrectversionsshouldbecommentedoutordeleted.

--

-------------------------------------------------------------------------------



columntrace_file_namenew_valueTrace_Name

columntrace_file_zippednew_valueTrace_Zippednoprint



select

d.value||/ora_||p.spid||.trctrace_file_name,

d.value||/ora_||p.spid||.trc.gztrace_file_zipped

from

(select

p.spid

from

sys.v_$mystatm,

sys.v_$sessions,

sys.v_$processp

where

m.statistic#=1and

s.sid=m.sidand

p.addr=s.paddr

)p,

(select

value

from

sys.v_$parameter

where

name=user_dump_dest

)d

/



select

d.value||/||lower(rtrim(i.instance,chr(0)))||_ora_||p.spid||.trctrace_file_name,

d.value||/||lower(rtrim(i.instance,chr(0)))||_ora_||p.spid||.trc.gztrace_file_zipped

from

(select

p.spid

from

sys.v_$mystatm,

sys.v_$sessions,

sys.v_$processp

where

m.statistic#=1and

s.sid=m.sidand

p.addr=s.paddr

)p,

(select

t.instance

from

sys.v_$threadt,

sys.v_$parameterv

where

v.name=threadand

(

v.value=0or

t.thread#=to_number(v.value)

)

)i,

(select

value

from

sys.v_$parameter

where

name=user_dump_dest

)d

/



select

d.value||ora||lpad(p.spid,5,0)||.trctrace_file_name,

d.value||ora||lpad(p.spid,5,0)||_trc.gztrace_file_zipped

from

(select

p.spid

from

sys.v_$mystatm,

sys.v_$sessions,

sys.v_$processp

where

m.statistic#=1and

s.sid=m.sidand

p.addr=s.paddr

)p,

(select

value

from

sys.v_$parameter

where

name=user_dump_dest

)d

/



clearcolumns

backup_controlfile.sql

-------------------------------------------------------------------------------

--Script:backup_controlfile.sql

--Purpose:tosaveacreatecontrolfilestatement

--

--Copyright:(c)IxoraPtyLtd

--Author:SteveAdams

--

--Description:Thisscriptusesthebackupcontrolfiletotracecommandto

--saveacreatecontrolfilestatement,andthenmovesthetrace

--fileintotheAPTcreatedirectory.

--

--TheSQL*Plusconnectionisclosed,becauseitstracefilehas

--beenmoved.

-------------------------------------------------------------------------------



alterdatabasebackupcontrolfiletotrace

/

settermoutoff

@trace_file_name

settermouton



disconnect

hostmv&Trace_Name$CREATE/create_controlfile.sql

exit





自www.ixor.com.au
提供用于管理、检查、优化数据库操作的管理工具。
沙发
发表于 2015-1-19 21:07:35 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
兰色精灵 该用户已被删除
板凳
发表于 2015-1-28 10:36:40 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-5 15:04:18 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
若天明 该用户已被删除
5#
发表于 2015-2-12 10:09:33 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
爱飞 该用户已被删除
6#
发表于 2015-3-3 02:38:21 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
admin 该用户已被删除
7#
发表于 2015-3-11 09:01:50 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
精灵巫婆 该用户已被删除
8#
发表于 2015-3-18 01:39:38 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
分手快乐 该用户已被删除
9#
发表于 2015-3-25 09:31:50 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-5 22:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表