Skip to content

数据技术 - 46. page

浅谈log file sync等待事件诊断(二)

原因3:用户提交过于频繁导致log file sync

在这种情况下,过多的 commit 活动可能会导致性能问题,因为把 redo 从日志缓冲区刷新到重做日志可能会导致等待’log file sync’。
如果’log file sync’的平均等待时间比’log file parallel write’高很多,这意味着大部分时间等待不是由于等待 redo 的写入,因而问题的原因不是 IO 慢导致。,其他时间可能是 CPU 活动竞争,而且是过多的 commit 导致的最常见的竞争。此外,如果’log file sync’的平均等待时间低,但等待次数高,那么应用程序可能 commit 过于频繁。

在 AWR 或 Statspack 报告中,如果每次 commit/rollback 的平均 user calls(”user calls/(user commits+user rollbacks)”) 小于 30, 表明 commit 过于频繁。
建议

  • 如果有很多短事务,看是否可能把这些事务组合在一起,从而减少 commit 操作。 因为每一个 commit 都必须收到相关 REDO 已写到磁盘上的确认,额外的 commit 会显著的增加开销。虽然 Oracle 可以将某些 commit 组合在一起,通过事务的批处理来减少commit的总体数量还是可以带来非常有益的效果。
  • 看看是否有操作可以使用 COMMIT NOWAIT 选项 (使用前应明白该选项会带来的后果)。
  • 看看是否有操作可以使用 NOLOGGING/ UNRECOVERABLE 选项完成(在不追求可恢复的情况下)。

 

经过已经分析,大概可以得出一个思路,尽量结合与lgwr有关的等待事件一起结合起来定位问题,此时应该检查awr或者statspack的等待事件。

11g新特性:
在oracle 11.2版本中引入了 Adaptive Log File sync,由参数_use_adaptive_log_file_sync控制,该参数在11.2.0.1和11.2.0.2默认设置为 false。
从 11.2.0.3 开始默认是 true。 当启用时,Oracle 可以在两种方法之间切换:

Post/wait,传统发布写重做日志完成的方法
Polling,一种新的方法,其中前台进程会检查 LGWR 是否已写完成。

该特性在一定情况下也会造成log file sync等待大量增加。

当log file sync等待事件是由于RAC节点之间SCN同步引起的,其解决方法如下:
1、检查LMS进程数量是否足够。
2、检查系统CPU资源是否足够。
3、检查RAC节点之间的私有通信是否正常。
4、设置隐含参数_immediate_commit_propagation为false,禁用immediate commit propagation特性。
RAC节点之间CR块传递
Oracle为了保证Instance Recovery实例恢复机制,而要求每一个current block在本地节点local instance被修改后(modify/update) 必须要将该current block相关的redo 写入到logfile 后(要求LGWR必须完成写入后才能返回),才能由LMS进程传输给其他节点使用。

分布式数据中心解决方案(适用任何数据)

 

分布式数据中心解决方案

技术背景

数据大集中之后,企业的经营活动越来越依赖于数据中心与网络等IT基础设施,IT的7*24全天业务连续运营成为大型企业IT建设运营与企业经营追求的目标。如何实现减少甚至消除正常和非正常的停机对业务可用性造成的影响,不仅是IT建设与运维团队的目标,更成为企业决策层所关注的。

出于灾备(Disaster Recovery)的目的,企业一般都会建设两个或多个数据中心(如图1所示)。主数据中心承担用户的核心业务,其他的数据中心主要承担一些非关键业务并同时备份主中心的数据、配置、业务等。正常情况下,主中心和备中心各司其职,发生灾难时,主数据中心宕机、备份数据中心可以快速恢复数据和应用,从而减轻因灾难给用户带来的损失。由于灾难是小概率事件,而采用一主一备这种方式,备份数据中心只在灾难发生时才能起到作用,并且随着企业容灾建设标准(《信息系统灾难恢复规范》GB/T 20988-2007)的提升,备份IT资源和资金会投入越来越大,相互直接又不能够复用,从而造成浪费。另外主备模式的应用,备中心在接替主中心时需要较长的时间、关系复杂,往往会严重影响用户的业务办理。典型的如国内外银行等高端用户多采用”两地三中心”(即生产数据中心、同城灾备中心、异地灾备中心)建设方案。这种模式下,多个数据中心是主备关系,即存在主次,业务部署优先级存在差别,针对灾难的响应与切换周期非常长,RTO与RPO目标无法实现业务零中断,资源利用率低下,投资回报无法达到预期。两地三中心本质上是一种通过简单资源堆砌提高可用性的模式,对高可用的提高、业务连续性的保证仍然只是量变,业务连续性及容灾备份一直没有实质性的跨越。

目前,以银行为代表的、包括政府、公共交通、能源电力等诸多行业用户,开始将关注点转向”分布式双活数据中心”(Distributed Active/Active Data Centers)的建设(如图2所示)。

1

分布式数据中心的定义

分布式双活数据中心将业务分布到多个数据中心,彼此之间并行为客户提供服务,分布式双活包括两大关键特征——分布式和双活,体现出企业级用户在建设与使用数据中心时对资源调度利用和业务部署灵活性的新思路。

所谓分布式,一是指数据中心在机房基础设施、地理空间、计算/存储/网络资源的软硬件部署上是分布而非集中的,满足灾备建设与业务联系的要求,多个DC在建设上可以循序渐进的展开,彼此保持一定的独立性,未来扩容升级可与现有架构保持良好兼容;二是资源的调度可以跨越多个数据中心,运维管理可以基于全局,多个数据中心间实现有机结合与资源共享,逻辑上可以视为一个全局的大数据中心。

所谓双活,一是多中心之间地位均等,正常模式下协同工作,并行的为业务访问提供服务,实现了对资源的充分利用,避免一个或两个备份中心处于闲置状态,造成资源与投资浪费,通过资源整合,双活数据中心的服务能力往往双倍甚至数倍于主备数据中心模式;二是在一个数据中心发生故障或灾难的情况下,其他数据中心可以正常运行并对关键业务或全部业务实现接管,达到互为备份的效果,实现用户的”故障无感知”。

分布式数据中心技术体系

数据中心网络系统只是数据中心总体IT系统的一个组成部分,建设分布式双活数据中心需要网络、计算、存储等多个IT系统之间紧密合作才能实现。分布式双活数据中心的技术体系内容非常丰富,从数据中心前端的全局负载均衡(GSLB)到服务器前端的负载均衡(SLB)和服务器集群HA技术,再到后端的数据库系统和存储系统技术,涉及数据中心整体解决方案的方方面面。

分布式数据中心前段网络双活

在分布式双活数据中心网络环境下,通过数据中心前端分布式网络双活技术,用户能快速访问”距离最近”的可用数据中心相对应的业务,提高服务响应速度,提升用户访问体验。数据中心的业务对外发布时,可以采用纯IP地址也可以采用DNS域名方式。根据业务对外发布方式的不同,数据中心前端也相应采用不同的技术实现分布式网络双活。

如图3所示,当业务采用纯IP方式对外发布时,正常情况下只有主中心DC A对外发布业务路由,从而将用户访问流量牵引到主中心,实现主中心业务访问。而备中心DC B的流量管理设备(支持RHI特性)只探测业务地址,因没有探测到而不对外发布业务路由,实现主中心的备份作用。

2

图3 纯IP地址方式发布业务正常情况由主中心提供业务

当主中心业务迁移到备中心后,备中心的流量管理设备探测到业务IP已经转移到备中心,从而对外发布业务路由,引导用户访问备中心的业务IP,从而实现基于纯IP发布业务的数据中心前端网络双活。

当业务系统基于DNS域名方式对外发布时,可以采用基于智能DNS解析的GSLB。GSLB解决了第一步即引导数据中心前端广域网用户流量访问适当的数据中心问题,所以GSLB的应用环境往往是基于域名的多数据中心之间的负载分担和相互之间的容灾备份。

 3

图4 DNS方式GSLB的基本模型

(如图4所示)GSLB 基于DNS的流量管理机制主要完成DNS解析请求的负载均衡、服务器状态监控、用户访问路径优化。用户访问应用时,域名解析请求将由GSLB负责处理,它通过一组预先定义好的策略,将最接近用户的节点地址提供给用户,使其可以得到快速的服务。同时,它还与分布在各DC的所有GSLB节点保持通讯,搜集各节点的健康状态,以保证不将用户的请求分配到任何一个已经不可用的节点上。GSLB 通过就近探测实现负载分担(如图5所示)。

 4

图5 GSLB就近探测原理

数据中心A、B、C各部署一个GSLB,其中DC A的GSLB为主GSLB,响应流程如下:

1. Local DNS向主GSLB发起域名解析请求;

2. GSLB-A、GSLB-B、GSLB-C将访问local DNS的延迟时间等相关信息返回给GSLB-A汇总,并判断最优的地址返回给local DNS;

3. 以站点的响应时间作为引导用户的依据,用户的访问请求被导向到性能好,响应时间快的站点。

DNS方式的GSLB主要功能和特性如下:

应用智能:感知应用,及时发现业务中断;

可管理:自动切换,通知用户改变数据访问点;

高性能:支持流量在数据中心的动态负载均衡。

分布式数据中心后端网络互连技术

通过虚拟机动态迁移技术(如VMware的vMotion)可实现数据中心间的计算资源动态调配,通过服务器高可用集群技术可实现数据中心间应用级容灾,这两种应用场景统称为”分布式数据中心(Distributed Data Center)部署方式”,其特点是一个应用系统在IP地址不变的情况下可以在不同数据中心对外提供服务,但同一时段此应用只出现在一个数据中心,数据中心的访问用户不感知这种变化。虚拟化从根本上改变了数据中心网络架构的需求,最重要的一点就是,虚拟化引入了虚拟机动态迁移技术,从而要求网络支持大范围的二层域,大二层网络技术应运而生,以帮助解决二层网络的扩展。

以太网虚拟化互联(EVI:Ethernet Virtual Interconnection)技术基于现有的服务提供商网络和企业网络,给分散的物理站点提供灵活的二层互联功能。EVI解决方案部署非常简单,成本低廉,只需要在站点边缘部署一个或多个支持EVI功能的设备,企业网络和服务提供商网络无需做任何变动

数据中心之间需要二层互联,建议在数据中心添加独立的边缘层设备负责数据中心之间的二层互联,边缘层支持设备冗余以提升高可靠性。当然,如果数据中心汇聚层设备支持MDC,可以在现有汇聚层设备上划分出一个逻辑独立的边缘层设备。这样可以减少网络设备的数量,降低成本。标准的EVI部署模型如图10所示。

 5

图10 EVI部署模型

在数据中心添加独立的边缘层设备负责数据中心之间的二层互联,边缘层支持设备冗余以提升高可靠性。数据中心的多个POD的汇聚层设备通过二层链路连接到边缘设备,从而不同数据中心站点之间的POD之间形成大的二层转发域。

参考华为。
 

关于分区表最多可拥有多少分区

群里一个小姑娘问起这个问题,分区表最多可以允许有多少个分区,CONCEPTS里有说到相关的信息在“18 Partitioned Tables and Indexes”中:

10g:

Partitioned Tables
Tables can be partitioned into up to 1024K-1 separate partitions.
Any table can be partitioned except those tables containing columns with LONG or LONG RAW datatypes.
You can, however, use tables containing columns with CLOB or BLOB datatypes.

浅谈log file sync等待事件诊断(一)

最近一个压力较大的数据库log file sync等待TOP 1.经过处理后也趁着这个时间把这个等待事件的一些信息整理一次。

什么是’log file sync’等待事件?

当一个用户session commit,会话事务相关生成的redo entry会从内存刷新到redo onlinelog。
在提交时,用户会话会通知 LGWR 把日志缓冲区中的信息写到重做日志文件(当前所有未被写入磁盘的 redo 信息,包括本次会话的 redo 信息)。当 LGWR 完成写操作后,它会通知用户会话。当等待 LGWR 通知确认所有 redo 已经全部保存到磁盘的过程时,用户会话会等待’log file sync’此时用户session显示等待’log file sync’,它是用户会话通知 LGWR 和 LGWR 通知用户的写操作完成之间的时间。

应该搜集那些信息来分析’log file sync’等待事件?

1.发生log file sync时间段的AWR/SP报告
2.当时的系统负载信息(最好有OSWATCH)
3.对应时间段的Alert.log日志信息

很高的’log file sync’等待的可能原因?

通常造成这类现象的原因有3个,具体如下:

1.Oracle 已知的bug造成
2.磁盘的IO负载过高,导致LGWR将REDO写入logfile的速度受影响
3.用户提交(commit)过于频繁

原因1:关于log file sync同步的bug

NB Bug Fixed Description
14823372 11.2.0.3.BP23, 11.2.0.4, 12.1.0.1 Adaptive “log file sync” picks inaccurate polling interval on RAC
13707904 11.2.0.4, 12.1.0.1 LGWR sometimes uses polling, sometimes post/wait
12614085 11.2.0.4, 12.1.0.1 Diagnostic enhancement to add new statistics for investigating “log file sync” and “log file parallel write” relationship
P 16102401 11.2.0.3.BP16, 11.2.0.4, 12.1.0.1 identify correct effective mutiplier for sparc t5 processor
13551402 11.2.0.3.9, 11.2.0.3.BP22, 11.2.0.4, 12.1.0.1 High “log file parallel write” and “log file sync” after upgrading 11.2 with Veritas/Symantec ODM
P 12951619 11.2.0.4, 12.1.0.1 Solaris: Enhancement to allow database to use critical threads feature in Solaris
12378147 11.2.0.2.7, 11.2.0.2.BP10, 11.2.0.3, 12.1.0.1 Long broadcast ack warning messages, and/or many Log File Sync timeouts in foregrounds in RAC
9095696 11.2.0.3.7, 11.2.0.3.BP08, 11.2.0.4, 12.1.0.1 “log file sync” wait time spikes with ARCHIVE_LAG_TARGET set
13074706 11.2.0.3.BP14, 11.2.0.4, 12.1.0.1 Long “log file sync” waits in RAC not correlated with slow writes
8490879 10.2.0.4.4, 10.2.0.5, 11.1.0.7.3, 11.2.0.1 Long “log file sync” latencies due to broadcast on commit scheme
8220734 10.2.0.4.4, 10.2.0.5, 11.1.0.7.3, 11.2.0.1 Long “log file sync” wait in RAC
7716356 10.2.0.5, 11.2.0.1 Long “log file sync” latencies with broadcast on commit scheme in RAC
7643632 10.2.0.4.1, 10.2.0.5, 11.1.0.7.4, 11.2.0.1 High log file sync in Data Guard maximum availability (sync) mode
7610362 10.2.0.4.4, 10.2.0.5, 11.1.0.7.3, 11.2.0.1 Long “log file sync” waits in RAC with broadcast on commit in RAC
P 7568734 10.2.0.5, 11.2.0.1 AIX: Sporadic spikes of ‘log file sync’ on AIX with heavy commit concurrency
7452373 10.2.0.5, 11.1.0.7.1, 11.2.0.1 “log file sync” timeout is not configurable
6319685 10.2.0.4, 11.1.0.7, 11.2.0.1 LGWR posts do not scale on some platforms
6193945 10.2.0.4.1, 10.2.0.5, 11.1.0.7, 11.2.0.1 High LGWR CPU use and long ‘log file sync’ latency in RAC
9776431 11.1.0.7.4 11.1.0.7.3 fix for 8220734 is incomplete – “log file sync” timeout set to 1 second
5896963 10.2.0.4, 11.1.0.6 High LGWR CPU and longer “log file sync” with fix for bug 5065930
5147386 10.2.0.4.1, 10.2.0.5, 11.1.0.6 Long waits on “log file sync” /random ORA-27152 “attempt to post process failed”
5087592 10.2.0.4, 11.1.0.6 “log file sync” waits from read only commits
5065930 10.2.0.3, 11.1.0.6 “log file sync” timeouts can occur
5061068 10.2.0.3, 11.1.0.6 RAC using “broadcast on commit” can see delayed commit times
3311210 9.2.0.5, 10.1.0.2 Unnecessary 0.5 seconds waits for “Broadcast on commit” SCN scheme
2663122 9.2.0.5, 10.1.0.2 Unneccessarily long waits on “log file sync” can occur
2640686 9.2.0.5, 10.1.0.2 Long waits for “log file sync” with broadcast SCN in RAC

原因2:磁盘的IO负载过高,导致LGWR将REDO写入logfile的速度受影响

情况1.比较’log file sync’和’log file parallel write’的平均等待时间结合诊断
等待事件’log file parallel write’表示 LGWR 正在等待写 redo 操作。该事件的持续时间就是等待 IO 操作部分的时间。结合事件“log file sync”看同步操作消耗在 IO 的时间,由此推断,有多少处理时间消耗在 CPU 上。

如果’log file sync’ 和 ‘log file parallel write’ 都有很高的等待时间,而且’log file sync’的时间消耗在’log file parallel write’上的比例高,那么大部分的等待时间是由于 IO(等待 redo 写入)。应该检查 LGWR 在 IO 方面的性能。Oracle官方的一个经验法则,’log file parallel write’平均时间超过 20 毫秒, 意味着 IO 子系统有问题。

这种情况下建议

  • 降低redolog所在的文件系统其他不必要的IO开销。
  • 建议redolog不放在raid5阵列上的卷组中,众所周知raid5的写惩罚是最高的。
  • 建议redolog不放在 SSD硬盘中,虽然通常情况下,SSD 写入性能好于平均水平,但是可能会遇到写峰值,从而导致大量的增加’log file sync’等待
  • 监控其他可能需要写到相同目录卷组的进程,确保该磁盘具有足够的IO吞吐量,足以应付所要求的容量。
  • 确保 LOG_BUFFER 不要太大,一个非常大的 log_buffer 的不利影响就是刷新需要更长的等待时间。当缓冲区满了的时候,它必须将所有数据写入到重做日志文件。LGWR 将一直等待,直到最后的 I/O 完成。
  • 避免redol log file member超过1个

尽管’log file parallel write’的平均等待时间可能在一个合理的区间范围内,在峰值时刻写操作时间还是可能会很长进而影响’log file sync’的等待时间。从10.2.0.4 开始如果写操作超过 500 毫秒我们会在 LGWR 的 trace 中写警告信息。这个阀值很高所以就算没有警告也不代表没有问题。警告信息如下:

*** 2012-11-13 20:13:41.718
Warning: log write elapsed time 21130ms, size 1KB
(set event 10468 level 4 to disable this warning)

*** 2012-11-13 20:13:42.929
Warning: log write elapsed time 4916ms, size 1KB
(set event 10468 level 4 to disable this warning)

注意:上面的峰值如果时间间隔的很远,可能不会对’log file parallel wait’有大的影响。 但是,如果有 100 个会话等待’log file parallel wait’完成,’log file sync’总等待可能就会很高,因为等待时间将被乘以会话的个数 100。因此,需要重点关注日志写 IO 高峰的原因。

此时建议:

  • 检查其他正在发生的可能会导致 LGWR 写磁盘峰值的操作,比如大量的导入操作,插入,或者系统级别的文件拷贝,以及大量的trace文件产生的情况
  • 当 LGWR 进程慢的时候,对其进行 Truss 操作会帮助确定时间消耗在什么方面

这些警告信息对于预防潜在问题的发生很有帮助。就算平均等待时间没问题,通过找到 I/O 性能峰值点,可以知道 LGWR 会间歇性的遇到性能问题,进而在它引发更大问题前将其解决。

情况2.redolog file 大小是否足够,这里和LGWR switch等待事件一起结合诊断

每次redolog切换到下一个日志时,会执行’log file sync’操作,以确保下一个日志开始写之前redo信息都写完。如果日志切换频繁,则预示着会产生更多的log file sync等待,这个时候就需要考虑增加redo logfile的大小,控制redolog file的切换频率保持在15分钟到20分钟左右一个。