吕海波 - 调试Oracle二三例:调试技术在日常运维中的应用

所需积分/C币:13 2015-11-26 16:18:42 28.31MB PDF

2015 Oracle 技术嘉年华(OTN)分会场2吕海波 - 调试Oracle二三例:调试技术在日常运维中的应用
个小问题:另类 Latch问题诊断方法 套数据库的多个库中遇到 Cache buffers chain等待,而且无规律周期复发,当然,每次问题出现时, 数据库的压力会高于平时。当时的 Statspack报告中的ToP5 wait events: Top 5 fimed Events Avg total wait Call Event Waits Time(s(ms) Time latch: cache buffers chains 5,529,045 257,981 4781.4 cPu time 26,312 8.3 ab file sequential read 3,821,940 24,912 77.9 read by other session 287,566 1,752 virtual circuit wait 592,639 1,519 3 5 同一时段正常的TOP5 wait events: Top 5 Timed Events Avg total wait call Event Waits Time (s)(ms) Time ab file sequential read 4,019,683 25,762 52.2 cpu time 19,564 39.6 read by other session 248,332 1,586 3.2 log file sync 546,695 551 6610 1.1 ab file parallel write 680,522 282 6 56 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 在问题出现时査看等待事件 只能看到大量的 Cache Buffers chain latch等待,通过等待事件的P1参数(P1参数为 Latch地址),可以确认是同一 Latch发生等待 相关的SQL语句有 Select和 Update 没有任何 Buffer busy Waits等待 受影响的 Session正在执行的SQL,80%左右的SQL和一张表相关,另有一些相关其 他表的SQL 问题的影响: Errors in file/ oracle/。。。/home/ products/diag/ rdbms/。。。/。。。/ trace/ XXX smon_13903trc: ORA-00018: maximum number of sessions exceeded 临时解决方案: 暂时停止相关应用,然后再打开 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 比较 Latch miss,有问题时的 Latch Miss Sources DB/Inst: USER21/USER21 Snaps: 173864-173865 - only latches with sleeps are shown ordered by name, sleeps desc NoWait Waiter Latch Name Where Misses Sleeps Sleeps cache buffers chains kcbgtcr: fast path 04,509,509######## cache buffers chains kcbchgl: mod cr pin 01,870,097####### cache buffers chains kcbgtcr_2 0973,006777,783 cache buffers chains kcbgkcbcr 0353,523331,441 正常时段的 Latch miss: cache buffers chains kcbgtcr 2 030,19528,152 Latch Name Where Misses Sleeps Sleeps cache buffers chains kcbzwb 13,0597,088 cache buffers chains kcbgtcr fast path (cr pin 9,00611,084 cache buffers chains kcbgtcr: fast path 2,181 775 cache buffers chains kcbgtcr: ks lbegin shared 1,805 ,528 cache buffers chains kcbgcur 2 0000000 1,296 999 cache buffers chains kcbgtcr: ks lbegin excl 1,1371,683 cache buffers chains kcbchgl: mod cr pin 568 346 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 根据现有资料,可以得到如下报告: 2015年ⅩX月ⅩX日ⅩX时 Oracle数据库问题报告 问题特征: 在数据库压力高于平常时,有时会出现大量的 Cache buffers chain latch等待,可以确认是同 Latch发生等待。相关的SQL语句有 Select和 Update,80%左右的SQL和一张表相关,另有一些相关其他 表的SQL。没有任何 Buffer busy Waits等待 问题原因: 压力波动导致热点 CBC Latch,从而引发问题 解决方案: 1.联系应用,减少压力。 2.增加 CBC Latch数量,和 Buffer cache中 Hash bucket数量。 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 还有一些遗留问题,为什么在 Latch miss中看到,问题和CR块相关。是事务太长吗?在事 发时,观察事务时间,事务持续时间没有明显的异常。是DML和 Select过多吗?为什么 DML和eect没有产生 Buffer Busy Waits等待,只有 CBC Latch的等待? 问题应该还是在 CBC Latch自身。猜测问题是这样的, CBC Latch可以分做以下三类: Select时的 CBC Latch: 共享模式,持有时间略长(11.2.0.4之后) DML时的 CBC Latch: 独占模式,持有时间很短 构造CR块时的 CBC Latch:独占模式,持有时间很长 构造CR块时的独占 Latch持有时间过长,当数据库压力达到临界值时,就会触发问题。 如果问题的原凶的确相关CR块,哪么任何调优都是无意义的,只能等 Oracle增进构造CR 块时的算法,减少 Latch的持有时间。或者,升级硬件、使用更快的CPU 升级硬件这不是个小动作,需要有明确的测试结果说法高层,不能只有猜测。 而对测试 Latch的持有时间长短,传统测试方法并不太适合。传统方法测试A锁和B锁是否 有竞争,至于竞争时间的长短,使用调试方法更方便。 下面演示一下,如何使用调试方法,验证构造CR块的独占 CBC Latch持有时间过长 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 先来看一下我们使用的 DTrace脚本(非常简单的脚本,加上空行一共只有17行): bash-3. 2# cat watch cbc. d #!/usr/sbin/ dtrace-s-n 脚本主要使用pids探针,这个探针在进程每次调用函数时 char latch value, 被触发 dtrace: BEGIN 被触发后的动作,是将atch的值显示出来。同时显示函数 的名字和几个参数值。 关于这个脚本,在这里就不过多介绍了,我们主要讲述思 pidS 1: entry 路。下面看一下脚本运行的效果。 latch value =copyin($2, 8 printf("%2x%2x%2X%2X%2x%2X%2X%2×],%d", latch value[o], latch value[l, latch value [2], latch value[3] latch value [4 latch value [5], latch value [6, latch value[7], timestamp) printf(i=%d %s(%, %x, %x,%x,%x,%x)",i, probefunc argO, arg l, arg 2, arg3 arg 4, arg 5) i=i+1; Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 脚本的运行方式,首先得到保护目标块的 CBC Latch地址。可以用下面两条SQL得到此地址。 1.得到目标块的文件号、块号: SQL> select rowid, dbms rowid ROWID RELATIVE FNO(rowid) file#, dbms rowid rowid block number(rowid b1k, tl.* from tl where rownum=1; ROWID F工LE# BLK ID CI AAADYIAAEAAAACBAAA 129 I BBBBBB 目标块是T1表的第一行所在块,它是4号文件、129号块,它的ROWD是 0000000053A55E70。 2.得到目标Lach的地址: SQL> select HLADDR from xSbh where file#=4 and dbablk=129 HLADDR 0000000053A55E70 Oracle技术嘉年华 Oracle Technology Carnival 2015 个小问题:另类 Latch问题诊断方法 开始测试,目标是得到构造CR块时持有独占 CBC Latch的时间: bash-32S sqlplus Ihb/a -bash-32S sqlplus Ihb/a SQL+Plus: Release 1l.2.0.4.0 Production on Mor SQL*Plus: Release 1l.2.0.4.0 Production on Mon Nov 9 17: 33: 30 2015 Nov917:34:412015 Copyright (c) 1982, 2013, Oracle. All rights reserved Copyright (c) 1982, 2013, Oracle. All rights Connected to reser ved Oracle Database llg Enterprise Edition Release 1l.2.0.4.0-64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management OLAP Connected to: Oracle database llg Enterprise Edition Release Data Mining and Real Application Testing options 1.2.0.4.0-64bit Production With the Partitioning, Real Application clusters SQL> Automatic Storage Management, OLAP SQL> select c.sid, spid from Data Mining and Real Application Test ing options 2 (select sid from vSmystat where rownum<=1)c SQL> 3 aSsession a SQL> update tl 4 vSprocess b 2 set cl=lower(c1) where c.sid=a.sid and a paddr=b addr 3 where row id= AAAdYiaaeaaaacbaaa, SID SPID I row updated 202486 SQL> SQL> Oracle技术嘉年华 Oracle Technology Carnival 2015

...展开详情
img
-空白式

关注 私信 TA的资源

上传资源赚积分,得勋章
最新资源