1 oracle的dump理解一 BH buffer header

               

1.oracle的dump理解一 BH buffer header

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51228444

Oracle的oradebug之蛤蟆不归路

蛤蟆本和ORACLE无关,没想到一个半年的项目,硬是一步一步走上”不归路”,

路越走越黑,不是路变黑了,而是走的人少了,你再也不能随手找到一个他人留下的火把来照明前方的路。偶尔会在道路两旁看到倒下的前人,心中开始彷徨~这是不是一条不归路?不走出去鬼知道~

1     查看dump路径:

SQL>Show parameters dump

其中包含的文件都是[ORACLE_SID]_ora_[PID].trc 格式的。

2     跟踪LGWR

查看LGWR进程PID

SQL> select prc.pid from v$bgprocess bgp,v$processprc where bgp.name='LGWR' and  prc.addr=bgp.paddr;

      PID

----------

       12

进行跟踪:

SQL> oradebug setorapid 12;

Oracle pid: 12, Windows thread id: 11884,image: ORACLE.EXE (LGWR)

挂住LGWR

SQL> oradebug suspend

已处理的语句

继续LGWR

SQL> oradebug resume

已处理的语句

3     DUMP内存结构

获取当前会话的SID

SQL> select sid from v$mystat where rownum=1;

      SID

----------

      136

或者

SQL> select userenv('SID') from dual;

3.1     Dump当前进行进程

SQL> oradebug setmypid

已处理的语句

查看trace文件的名字

SQL> oradebug tracefile_name;

C:\APP \diag\rdbms\toaddb\toaddb\trace\toaddb_ora_10780.trc

为了便于查找,修改名字,如下

SQL> alter session set tracefile_identifier=test;

会话已更改。

SQL> oradebug tracefile_name;

C:\APP\diag\rdbms\toaddb\toaddb\trace\toaddb_ora_10780_TEST.trc

3.2     查看DUMP支持的命令

SQL> oradebug dumplist

TRACE_BUFFER_ON

TRACE_BUFFER_OFF

LATCHES

PROCESSSTATE

SYSTEMSTATE

INSTANTIATIONSTATE

REFRESH_OS_STATS

SESSION_STATS_FREELIST

PDBSTATS

SQLNET_SERVER_TRACE

CONTEXTAREA

HANGDIAG_HEADER

HEAPDUMP

HEAPDUMP_ADDR

POKE_ADDRESS

POKE_LENGTH

POKE_VALUE

POKE_VALUE0

GLOBAL_AREA

REALFREEDUMP

DUMP_SGA_METADATA

FLUSH_JAVA_POOL

POOL_SIMULATOR

PGA_DETAIL_GET

PGA_DETAIL_DUMP

PGA_DETAIL_CANCEL

PGA_SUMMARY

MODIFIED_PARAMETERS

CROSSIC

EVENT_TSM_TEST

ERRORSTACK

CALLSTACK

TEST_STACK_DUMP

TEST_GET_CALLER

RECORD_CALLSTACK

EXCEPTION_DUMP

BG_MESSAGES

ENQUEUES

KSTDUMPCURPROC

KSTDUMPALLPROCS

KSTDUMPALLPROCS_CLUSTER

SIMULATE_EOV

KSFQP_LIMIT

KSKDUMPTRACE

DBSCHEDULER

LDAP_USER_DUMP

LDAP_KERNEL_DUMP

DUMP_ALL_OBJSTATS

DUMPGLOBALDATA

HANGANALYZE

HANGANALYZE_PROC

HNGDET_MEM_USAGE_DUMP

DEAD_CLEANUP_STATE

HANGANALYZE_GLOBAL

CBDB_ENTRIES

GES_STATE

RACDUMP

CGS

OCR

CSS

CRS

SYSTEMSTATE_GLOBAL

GIPC

MMAN_ALLOC_MEMORY

MMAN_CREATE_DEF_REQUEST

MMAN_CREATE_IMM_REQUEST

MMAN_IMM_REQUEST

DUMP_ALL_COMP_GRANULE_ADDRS

DUMP_ALL_COMP_GRANULES

DUMP_ALL_REQS

DUMP_TRANSFER_OPS

DUMP_ADV_SNAPSHOTS

ADJUST_SCN

NEXT_SCN_WRAP

CONTROLF

FLUSH_CACHE

FULL_DUMPS

BUFFERS

RECOVERY

SET_TSN_P1

GLOBAL_BUFFER_DUMP

BUFFER

PIN_BLOCKS

BC_SANITY_CHECK

PIN_RANDOM_BLOCKS

SET_NBLOCKS

CHECK_ROREUSE_SANITY

DUMP_PINNED_BUFFER_HISTORY

KCBO_OBJ_CHECK_DUMP

KCB_WORKING_SET_DUMP

KCBS_ADV_INT_DUMP

KCBI_DUMP_FREELIST

SET_AFN

SET_ISTEMPFILE

FLUSH_BUFFER

FLUSH_OBJECT

SCN_AUTO_ROLLOVER_TS_OVERRIDE

REDOLOGS

ARCHIVE_ERROR

LOGHIST

REDOHDR

LOGERROR

OPEN_FILES

DATA_ERR_ON

DATA_READ_ERR_ON

DATA_ERR_OFF

BLK0_FMTCHG

UPDATE_BLOCK0_FORMAT

TR_SET_BLOCK

TR_SET_ALL_BLOCKS

TR_SET_SIDE

TR_CRASH_AFTER_WRITE

TR_READ_ONE_SIDE

TR_CORRUPT_ONE_SIDE

TR_RESET_NORMAL

TEST_DB_ROBUSTNESS

LOCKS

GC_ELEMENTS

FILE_HDRS

KRB_CORRUPT_INTERVAL

KRB_CORRUPT_SIZE

KRB_CORRUPT_REPEAT

KRB_CORRUPT_OFFSET

KRB_PIECE_FAIL

KRB_OPTIONS

KRB_FAIL_INPUT_FILENO

KRB_SIMULATE_NODE_AFFINITY

KRB_BSET_DAYS

KRB_SET_TIME_SWITCH

KRB_OVERWRITE_ACTION

KRB_CORRUPT_SPHEADER_INTERVAL

KRB_CORRUPT_SPHEADER_REPEAT

KRB_CORRUPT_SPBITMAP_INTERVAL

KRB_CORRUPT_SPBITMAP_REPEAT

KRB_CORRUPT_SPBAD_INTERVAL

KRB_CORRUPT_SPBAD_SIGNAL

KRB_UNUSED_OPTION

KRBMRSR_LIMIT

KRBMROR_LIMIT

KBRS_TRACE

KRDRSBF

KRA_OPTIONS

FBTAIL

FBINC

FBHDR

FLASHBACK_GEN

KTPR_DEBUG

IMDB_PINNED_BUFFER_HISTORY

DUMP_TEMP

DROP_SEGMENTS

TEST_SPACEBG

TREEDUMP

LONGF_CREATE

KDLIDMP

ROW_CACHE

LIBRARY_CACHE

LIBRARY_CACHE_OBJECT

CURSORDUMP

CURSORTRACE

CURSOR_STATS

XS_SESSION_STATE

SHARED_SERVER_STATE

LISTENER_REGISTRATION

JAVAINFO

KXFPCLEARSTATS

KXFPDUMPTRACE

KXFPBLATCHTEST

KXFXSLAVESTATE

KXFXCURSORSTATE

KXFRHASHMAP

WORKAREATAB_DUMP

KUPPLATCHTEST

OBJECT_CACHE

SAVEPOINTS

RULESETDUMP

RULESETDUMP_ADDR

FAILOVER

OLAP_DUMP

ASMDISK_ERR_ON

ASMDISK_READ_ERR_ON

ASMDISK_ERR_OFF

IOERREMUL

IOERREMULRNG

SELFTESTASM

ALRT_TEST

AWR_TEST

AWR_FLUSH_TABLE_ON

AWR_FLUSH_TABLE_OFF

ASHDUMP

ASHDUMPSECONDS

MMON_TEST

ATSK_TEST

HM_FW_TRACE

HM_FDG_VERS

IR_FW_TRACE

KSDTRADV_TEST

GWM_TRACE

GWM_TEST

一般DUMP命令式两个参数,一个是DUMP的名字,另一个是DUMP的等级。

等级的话越高DUMP的越多。

3.3     Dump buffers

可以dump 缓存,缓存头,变量连接链。

只有4种:

1=缓存头

2=1 +裸块+交易头

3=2 +完成的块

4=工作数据集,缓存头,hashchain上连接的裸块

SQL> oradebug dump buffers 1

已处理的语句

SQL> oradebug tracefile_name

C:\APP\diag\rdbms\toaddb\toaddb\trace\toaddb_ora_10780_TEST.trc

等级1,蛤蟆的DUMP出来大小是8MB。

等级2,DUMP出来有470MB了,和使用的内存大小相关

查看SGA中大小:

SQL> select component,current_size,min_size fromv$sga_dynamic_components where component like '%buffer cache%';

COMPONENT                                                        CURRENT_SIZE

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

 MIN_SIZE

----------

DEFAULT buffer cache                                               520093696

 423624704

基本和BUFFERCACHE大小一致。

3.3.1       Buffer Head dump

我们查看下等级1 的TRC文件如下:

显示了trc的路径,数据块的版本,数据块所在的操作系统,CPU型号,内存 大小

进程亲和度,数据块实例名字,进程数量,进程ID,

Dump所使用的命令,然后是SGA中所有的bufferhead了。

Trace fileC:\APP\diag\rdbms\toaddb\toaddb\trace\toaddb_ora_12328.trc

Oracle Database 12c Enterprise EditionRelease 12.1.0.2.0 - 64bit Production

With the Partitioning, OLAP, AdvancedAnalytics and Real Application Testing options

Windows NT Version V6.1 Service Pack 1

CPU                 : 4 - type 8664, 4 PhysicalCores

Process Affinity    : 0x0x0000000000000000

Memory (Avail/Total): Ph:997M/6135M,Ph+PgF:6552M/12269M

Instance name: toaddb

Redo thread mounted by this instance: 1

Oracle process number: 50

Windows thread id: 12328, image: ORACLE.EXE(SHAD)

*** 2016-04-20 17:08:51.948

*** SESSION ID:(244.56563) 2016-04-2017:08:51.948

*** CLIENT ID:() 2016-04-20 17:08:51.948

*** SERVICE NAME:(SYS$USERS) 2016-04-2017:08:51.948

*** MODULE NAME:(sqlplus.exe) 2016-04-2017:08:51.948

*** CLIENT DRIVER:(SQL*PLUS) 2016-04-2017:08:51.948

*** ACTION NAME:() 2016-04-20 17:08:51.948

Processing Oradebug command 'setmypid'

*** 2016-04-20 17:08:51.948

Oradebug command 'setmypid' console output:<none>

*** 2016-04-20 17:09:03.755

Processing Oradebug command'tracefile_name'

*** 2016-04-20 17:09:03.755

Oradebug command 'tracefile_name' consoleoutput:

C:\APP\diag\rdbms\toaddb\toaddb\trace\toaddb_ora_12328.trc

*** 2016-04-20 17:09:31.208

Processing Oradebug command 'dump buffers1'

Dump of buffer cache at level 1 for pdb=0tsn=65535 rdba=0

BH (0x7ff183e76d8) file#: 1 rdba:0x0040403d (1/16445) class: 1 ba: 0x7ff181c0000

 set: 10 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0

 dbwrid: 0 obj: 18 objn: 18 tsn: [0/0] afn: 1 hint: f

 hash: [0x7ff2cb62d98,0x7ff2cb62d98] lru: [0x7ff1afdc000,0x7ff1b3fab40]

 ckptq: [NULL] fileq: [NULL]

 objq: [0x7ff187d9d28,0x7ff17fdf368] objaq: [0x7ff187d9d38,0x7ff17fdf378]

  st:XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' fscn: 0x0.23b419 tch: 96

 flags: only_sequential_access

 LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

BH (0x7ff19fe6f58) file#: 1 rdba:0x0040daf0 (1/56048) class: 1 ba: 0x7ff19db4000

 set: 9 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0

 dbwrid: 0 obj: 37 objn: 37 tsn: [0/0] afn: 1 hint: f

 hash: [0x7ff2cb62e08,0x7ff2cb62e08] lru: [0x7ff19fe7180,0x7ff19fe6f00]

 ckptq: [NULL] fileq: [NULL]

 objq: [0x7ff19fe71a8,0x7ff19fe6de8] objaq: [0x7ff19fe71b8,0x7ff19fe6df8]

  st:XCURRENT md: NULL fpin: 'kdiwh100: kdircys' fscn: 0x0.23b281 tch: 6

 flags: only_sequential_access

 LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

…….(此处省略13W行字)

BH (0x7ff1bfe76d8) file#: 1 rdba:0x0040e508 (1/58632) class: 1 ba: 0x7ff1bdc0000

 set: 12 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0

 dbwrid: 0 obj: 36 objn: 36 tsn: [0/0] afn: 1 hint: f

 hash: [0x7ff2c6567f8,0x7ff2c6567f8] lru: [0x7ff1bfe7900,0x7ff1bfe7680]

 ckptq: [NULL] fileq: [NULL]

 objq: [0x7ff1bfe7928,0x7ff1bfe76a8] objaq: [0x7ff1bfe7938,0x7ff1bfe76b8]

  st:XCURRENT md: NULL fpin: 'kdiwh100: kdircys' fscn: 0x0.23b5ef tch: 17

 flags: only_sequential_access

 LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

*** 2016-04-20 17:09:33.074

Oradebug command 'dump buffers 1' consoleoutput: <none>

3.3.2       Buffer head 介绍

其中摘取一个BH如下:

BH (0x7ff183e76d8) file#: 1 rdba:0x0040403d (1/16445) class: 1 ba: 0x7ff181c0000

 set: 10 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 0,0

 dbwrid: 0 obj: 18 objn: 18 tsn: [0/0] afn: 1 hint: f

 hash: [0x7ff2cb62d98,0x7ff2cb62d98] lru: [0x7ff1afdc000,0x7ff1b3fab40]

 ckptq: [NULL] fileq: [NULL]

 objq: [0x7ff187d9d28,0x7ff17fdf368] objaq: [0x7ff187d9d38,0x7ff17fdf378]

  st:XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' fscn: 0x0.23b419 tch: 96

 flags: only_sequential_access

 LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]

逻辑结构如下图1:


DUMP出来的BH共9行

第一行0x7ff183e76d8是BH的哈希值,file#: 1 是块所在的文件,通过v$dbfile可以查看。rdba:0x0040403d (1/16445)是rowid中的相对文件号,可以通过如下命令获取十进制数:

SQL> selectdbms_utility.make_data_block_address(1,16445) from dual;

DBMS_UTILITY.MAKE_DATA_BLOCK_ADDRESS(1,16445)

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

                                      4210749

4210749的16进制就是0x0040403d,前十位004是文件号,后二十位0403d是块号。class: 1 表示bufferheader对应的类型,

class:表示buffer header对应block的类型:

1=data block, 9=2nd level bmb,

2=sort block, 10=3rd level bmb,

3=save undo block, 11=bitmap block,

4=segment header, 12=bitmap index block,

5=save undo header, 13=unused,

6=free list, 14=undo header,

7=extent map, 15=undo block

ba: 0x7ff181c0000 BUFFER中block address,是块在内存中的物理地址

第二行:set: 10

 pool: 3  bsz: 8192 表示块大小,bsi: 0  sflg: 2 pwc: 0,0

第三行

dbwrid: 0 进程dbwr的id obj: 18块上数据对应在哪个对象里 objn: 18tsn: [0/0] 表空间编码 afn: 1 hint: f

第四行

hash:[0x7ff2cb62d98,0x7ff2cb62d98] 下一个和前一个BH的HASH值

lru:[0x7ff1afdc000,0x7ff1b3fab40]下一个及前一个BH的在LRU链表上的HASH值

第五行

ckptq: [NULL] 在检查点队列上的HASH值fileq: [NULL]在文件队列上的HASH值

第六行

objq:[0x7ff187d9d28,0x7ff17fdf368]是对象队列HASH

objaq:[0x7ff187d9d38,0x7ff17fdf378]是辅助对象队列HASH

第七行

st: XCURRENT 表示块状态,具体如下:

state:

0, FREE, no valid block image

1, XCUR, a current mode block, exclusive tothis instance 正在被当前的instance独占。

2, SCUR, a current mode block, shared withother instances正在被当前的instance共享

3, CR, a consistent read (stale) blockimage 一致读

4, READ, buffer is reserved for a blockbeing read from disk 正在从磁盘上读取块

5, MREC, a block in media recovery mode 处于介质恢复模式

6, IREC, a block in instance (crash)recovery mode处于实例恢复模式

md: NULL fpin: 'kdswh11: kdst_fetch' fscn:0x0.23b419

tch: 96 buffer 的访问次数

第八行

 flags: only_sequential_access

flag中,每位代表如下含义:

0 buffer_dirty 14 stale

1 notify_after_change 15 deferred_ping

2 mod_started 16 direct_access

3 block_has_been_logged 17 hash_chain_dump

4 temp_data 18 ignore_redo

5 being_written 19 only_sequential_access

6 waiting_for_write 20 prefetched_block

7 multiple_waiters 21 block_written_once

8 recovery_reading 22 logically_flushed

9 unlink_from_lock 23 resilvered_already

10 down_grade_lock 25 redo_since_read

11 clone_being_written 29plugged_from_foreign_db

12 reading_as_CR 30 flush_after_writing

13 gotten_in_current_mode

第九行

LRBA: [0x0.0.0]  L表示Low,也就是第一次被修改的时候的RBA

LSCN: [0x0.0] L表示Low,H表示High

HSCN: [0xffff.ffffffff] HSUB: [65535]

汇总总的BH数量,蛤蟆此处是 15468个,合计大小是15468 x 8192=126713856=120MB

说明BUFFER CACHE使用了120MB

DUMP一下,量太大,分个WORD继续。

 


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/ugghhj/article/details/86588967