分享
 
 
 

调优日志切换(Tuning Log Switches)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

调优日志切换(Tuning Log Switches)

日志切换:LGWR进程停止写日志到当前日志文件,关闭日志文件,打开新的日志文件并写日志缓存中的数据到新的日志文件。

日志切换可以命令ALTER SYSTEM SWITCH LOGFILE或者ALTER SYSTEM ARCHIVE LOG来手工执行,也可以通过设置参数LOG_ARCHIVE_START使其自动执行。一般的原因是一个进程不能将生成的重做日志从缓存中写到当前的日志文件,因为已经使用到当前日志文件的最后一个数据块。

日志切换时做到的相关的步骤顺序:

1、 执行一个控制文件事务来选择下一个日志文件以使用并清除控制文件入口。一般是选择当前带有最小日志序列号的日志文件来作为下一个使用,在这一步上,如果有必要,日志切换将会等待DBWR进程完全前面一个日志文件的日志切换的CHECKPOINT,等待ARCn进程完成归档。

2、 使用redo copy latches和redo generation latches两个latch来阻止重做日志在日志缓存中生成(标记日志缓存状态),并将日志缓存中的数据写到日志文件(磁盘)中。如有可能用并行的方式,会同时将文件中最后一个记录的SCN号写到头数据块中(header block)。在这些“写”操作都完成之后LGWR进程关闭这个日志文件。

3、 提升SCN值执行第二个控制文件事务来将日志文件标记为CURRENT,把之前的日志文件标记为ACTIVE,一旦DBWR进程完成了日志切换的CHECKPOINT后,这个文件的状态(之前的日志文件)会被标记为INACTIVE。如果数据库运行在归档模式下,LGWR进程通过控制文件中日志文件的入口段将这个日志文件(之前的日志文件)添加到归档连接单中,如果启动的是自动归档,LGWR会激活ARCn后台进程将这个日志文件进行归档。如果当前使用的所有ARCn进程都处于忙状态,LGWR会激活一个新的ARCn进程,ARCn进程数由参数log_archive_max_processes。

4、 最后一步,LGWR进程打开新日志文件组的所有成员,并将新的日志序列号和底SCN写到头数据块(header block)。然后将日志缓存状态改为可以生成日志。

日志切换可能会花较长时间,经常是以秒记,日志切换过程有较大的调优潜力。相对于连续的缓慢的性能,OLTP系统的用户一般更难忍受数据库的间断的较差的性能,所以,减少日志切换频率,减少切换间隔时间是非常重要的。

在系统性能方面,日志切换冲突的主要表现在于log file switch completion等待事件上。如果日志切换性能差,另外一个等待事件log buffer space等待也会即刻产生。对日志切换调优就是要先调优log file switch completion等待事件然后是log buffer space等待。

使用大的日志文件:为了最小化日志切换频率,可以加大日志文件的SIZE(尽可能大,最易归档),也要控制CHECKPOINT(如设置参数fast_start_mttr_target)来使数据库恢复性能最优。

每个联机日志文件应该放在专有的磁盘上以免ARCn进程同时进入访问该磁盘。不要使用小的日志文件来保存磁盘空间,因为保存下来的空间不会再被使用(联机日志文件大小确定后是不会再增长的,所以不会用到您所保留下来的这些空间)

增加联机日志文件会提高归档的间隔时间。、

另外一方面,在使用了大的联机日志文件时,要通过调优归档以减少资源使用强度。

保持日志文件是打开状态:调整日志切换的速度最大的调优的潜在地方在于新日志文件成员的打开过程,打开新日志文件是用操作系统的指令open()。如果有其他的一个进程在同一个文件中已经有打开文件的描述符则操作系统调用这个命令来打开新的日志文件的速度是很快的,主要原因是关于文件的一些信息都放在了系统的内核内存中。

下面这个脚本用于在实例启动时将日志文件的信息放到内核内存中,可以在一定的程度上提高日志切换的速度。这个是SHELL脚本,用于UNIX操作系统中,用CRON来定期每天实现:hold_logs_open.sh

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

#

# Synopsis: hold_logs_open.sh instance

# Purpose: to hold the log files open to accelerate log switches

#

# Copyright: (c) Ixora Pty Ltd

# Author: Steve Adams with acknowledgements to Chris Bunting

#

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

if [ $# -ne 1 ]

then

echo "Usage: hold_logs_open instance" >&2

exit 1

fi

instance=$1

ORACLE_SID=$1

ORAENV_ASK=NO

. oraenv

fd=3

echo '

set pages 0 feedback off

select member from v$logfile;

prompt End-of-Files

' |

sqlplus -s internal |

while read logfile

do

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

then

if [ "$fd" -gt 3 ]

then

sleep 86460 &

fi

exit 0

fi

eval "exec $fd<$logfile"

fd=`expr $fd + 1`

#

# Uncomment these lines if your shell only supports input redirection

# for single digit file descriptors.

#

# if [ "$fd" -eq 10 ]

# then

# sleep 86460 &

# fd=3

# fi

done

调整控制文件事务:每次日志切换都包含了两次控制文件事务,控制文件事务是在CF队列锁的保护下执行的,所以没有进一步的必要来控制控制文件的“写”操作,但是为了在控制文件事务期间的实例或者系统FAILURE的可恢复性,还是有必要进行一定的控制。

控制文件的可恢复性,首先写恢复结构到控制文件的第二个数据块,在写控制文件中的目标块时(控制文件事务所要写的块)等待其操作(恢复结构写操作)完成,因此,每个控制文件事务至少包含两个写I/O操作的等待。

如果使用的激活的控制文件是多个,则I/O操作会以串行的方式来实现。因此,要提高控制文件事务的性能就是要减少激活的控制文件数。在大多数情况下,可以只使用一个激活的控制文件,然后用硬件镜像及使用命令ALTER SYSTEM BACKUP CONTROLFILE TO TRACE来备份控制文件及保护控制文件。

下面的脚本(backup_controlfile.sql)提供了一种备份方案,主要在UNIX下实现,将控制文件的备份放到数据库的创建目录中:

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

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

--

-- Script: trace_file_name.sql

-- Purpose: to get the name of the current trace file

--

-- Copyright: (c) Ixora Pty Ltd

-- Author: Steve Adams

--

-- Synopsis: @trace_file_name

--

-- OR

--

-- set termout off

-- @trace_file_name

-- set termout on

-- ... &Trace_Name ...

--

-- Description: This script gets the name of the trace file for the current

-- session. It can be used interactively, or from other scripts.

-- The name is saved in the SQL*Plus define &Trace_Name.

--

-- There are three versions of the query below, because the trace

-- files are named differently depending on the platform. The

-- two incorrect versions should be commented out or deleted.

--

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

column trace_file_name new_value Trace_Name

column trace_file_zipped new_value Trace_Zipped noprint

select

d.value || '/ora_' || p.spid || '.trc' trace_file_name,

d.value || '/ora_' || p.spid || '.trc.gz' trace_file_zipped

from

( select

p.spid

from

sys.v_$mystat m,

sys.v_$session s,

sys.v_$process p

where

m.statistic# = 1 and

s.sid = m.sid and

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||'.trc' trace_file_name,

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

from

( select

p.spid

from

sys.v_$mystat m,

sys.v_$session s,

sys.v_$process p

where

m.statistic# = 1 and

s.sid = m.sid and

p.addr = s.paddr

) p,

( select

t.instance

from

sys.v_$thread t,

sys.v_$parameter v

where

v.name = 'thread' and

(

v.value = 0 or

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') || '.trc' trace_file_name,

d.value || '\ora' || lpad(p.spid, 5, '0') || '_trc.gz' trace_file_zipped

from

( select

p.spid

from

sys.v_$mystat m,

sys.v_$session s,

sys.v_$process p

where

m.statistic# = 1 and

s.sid = m.sid and

p.addr = s.paddr

) p,

( select

value

from

sys.v_$parameter

where

name = 'user_dump_dest'

) d

/

clear columns

backup_controlfile.sql

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

-- Script: backup_controlfile.sql

-- Purpose: to save a create controlfile statement

--

-- Copyright: (c) Ixora Pty Ltd

-- Author: Steve Adams

--

-- Description: This script uses the backup controlfile to trace command to

-- save a create controlfile statement, and then moves the trace

-- file into the APT create directory.

--

-- The SQL*Plus connection is closed, because its trace file has

-- been moved.

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

alter database backup controlfile to trace

/

set termout off

@trace_file_name

set termout on

disconnect

host mv &Trace_Name $CREATE/create_controlfile.sql

exit

www.ixor.com.au

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有