Oracle闩:Cache Buffers chains
col parent_name for a25 col location for a40SELECT t1.ksllasnam "parent_name",t2.ksllwnam "location"FROM x$ksllw t2, x$kslwsc t1WHERE t2.indx = t1.indxAND ksllasnam = 'cache buffers chains';parent_name location ------------------------- ---------------------------------------- cache buffers chains kcbw_activate_granule cache buffers chains kcbw_first_buffer_free cache buffers chains kcbwxb cache buffers chains kcbw_examine_granule cache buffers chains kcbw_next_free cache buffers chains kcbw_first_buffer_free_2 cache buffers chains kcbbckb cache buffers chains kcbbioe cache buffers chains kcbbic1 cache buffers chains kcbbcwd cache buffers chains kcbbxsvparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbbwdb cache buffers chains kcbbic2 cache buffers chains kcbkzs cache buffers chains kcbrmf2so cache buffers chains kcbget: exchange rls cache buffers chains kcbralloc cache buffers chains kcbgcur: deadlock cache buffers chains kcbgcur: buf pinned cache buffers chains kcbgtcr cache buffers chains kcbchg: no fast path cache buffers chains kcbchg: apply changeparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbrra: buf exists cache buffers chains kcbrra: update buf flags cache buffers chains kcbema: find buf cache buffers chains kcbtema: find buf cache buffers chains kcbget: prewarm wait cache buffers chains kcbrfrebuf cache buffers chains kcbsod1 cache buffers chains kcbrbrl cache buffers chains kcbgcur: kslbegin cache buffers chains kcbgtcr: kslbegin shared cache buffers chains kcbrls: kslbeginparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbchg: kslbegin: bufs not pinned cache buffers chains kcbchg: kslbegin: call CR func cache buffers chains kcbnlc cache buffers chains kcbget: exchange cache buffers chains kcbget: pin buffer cache buffers chains kcbnew: new latch again cache buffers chains kcbgkcbcr cache buffers chains kcbget: in cur_read cache buffers chains kcbesc: escalate cache buffers chains kcblbi cache buffers chains kcbcgeparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbfrl cache buffers chains kcbzsc cache buffers chains kcbibr cache buffers chains kcbnew_1 cache buffers chains kcbema cache buffers chains kcbsrbd cache buffers chains kcbso1: set no access cache buffers chains kcbtema cache buffers chains kcbso1: in done_clr cache buffers chains kcbsod2 cache buffers chains kcbzcgparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbzre1 cache buffers chains kcbrlb1 cache buffers chains kcbchkrsod cache buffers chains kcbxbh cache buffers chains kcbzsck cache buffers chains kcbgtcr: fast path cache buffers chains kcbgtcr: kslbegin excl cache buffers chains kcbgtcrf cache buffers chains kcbfdgd cache buffers chains kcbdng cache buffers chains kcbbufaddr2hdrparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbo_ivd_process cache buffers chains kcbo_write_process cache buffers chains kcbo_exam_buf cache buffers chains kcb_pre_apply: kcbhq61 cache buffers chains kcb_post_apply: kcbhq62 cache buffers chains kcb_post_apply: kcbhq63 cache buffers chains kcbnew : new esc failed cache buffers chains kcbesc : escalate failed cache buffers chains kcb_private_owner cache buffers chains kcb_is_private cache buffers chains kcb_unprivatizeparent_name location ------------------------- ---------------------------------------- cache buffers chains kcb_restore_block_headers cache buffers chains kcb_flush_undo_buffers cache buffers chains kcbgcur - DEADL cache buffers chains kcbtbd cache buffers chains kcbzwc cache buffers chains kcbzwx cache buffers chains kcbrmflx cache buffers chains kcbzwb cache buffers chains kcbzgb: get latch after post cache buffers chains kcbzgb: scan from tail. nowait cache buffers chains kcbzgb: exit_loopparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbzib: multi-block read: nowait cache buffers chains kcbzib: finish free bufs cache buffers chains kcbzcb cache buffers chains kcbzdh cache buffers chains kcbdpr cache buffers chains kcbcxx cache buffers chains kcbzrn cache buffers chains kcbdpd: for specific dba cache buffers chains kcbdpd: dump all buffers cache buffers chains kcbzib: exchange rls cache buffers chains kcbzpnd: dump buffersparent_name location ------------------------- ---------------------------------------- cache buffers chains kcbzhngcbk1: get hash chain latch no waitcache buffers chains kcbo_cxx cache buffers chains kcbz_check_obj_reuse_sanity cache buffers chains kcbzib_grlk cache buffers chains kcbz_force_maps cache buffers chains kcbrldflx: recover in-flux bufs cache buffers chains kcbra1fbuf: recover in-flux bufs cache buffers chains kcbrafb: flashback bufs:1 cache buffers chains kcbrafb: flashback bufs:2parent_name location ------------------------- ---------------------------------------- cache buffers chains kcbr_media_apply: find buffer cache buffers chains kcbr_issue_read: alloc buffer cache buffers chains kcbr_issue_read: retry alloc cache buffers chains kcbr_validate_read: mark corrupt cache buffers chains kcbr_apply_change: after apply cache buffers chains kcbr_mapply_change cache buffers chains kcbr_mrcv_clear_fgda cache buffers chains kclwlr cache buffers chains kclebs_1 cache buffers chains kclcls cache buffers chains kclcsr_1parent_name location ------------------------- ---------------------------------------- cache buffers chains kclpred cache buffers chains kclcls_1 cache buffers chains kclple_1 cache buffers chains kclple_2 cache buffers chains kclcls_2 cache buffers chains kcllwr cache buffers chains kclwcrs cache buffers chains kclcrs_1 cache buffers chains kclcsr cache buffers chains kclrls cache buffers chains kclwcrs_1parent_name location ------------------------- ---------------------------------------- cache buffers chains kclfbst_1 cache buffers chains kclpdc_1 cache buffers chains kclwcrs_2 cache buffers chains kclwcrs_3 cache buffers chains kclfpdb cache buffers chains kclfpdb_2 cache buffers chains kclpdc_2 cache buffers chains kcllkopb cache buffers chains kclgrantlk cache buffers chains kclwrt cache buffers chains kcllkopb_1parent_name location ------------------------- ---------------------------------------- cache buffers chains kclwcrs_4 cache buffers chains kcllkopb_2 cache buffers chains kclcls_4 cache buffers chains kclpred_1 cache buffers chains kclrclr_2 cache buffers chains kclrecbst cache buffers chains kclgrantlk_1 cache buffers chains kclcls_5 cache buffers chains kclrwrite_1 cache buffers chains kclrwrite_2 cache buffers chains kclcopyparent_name location ------------------------- ---------------------------------------- cache buffers chains kclswrite cache buffers chains kclchash cache buffers chains kclcfusion cache buffers chains kclfchk_1 cache buffers chains kclcfusion_1 cache buffers chains kclblkdone cache buffers chains kclcfusion_2 cache buffers chains kclrenounce cache buffers chains kclbla cache buffers chains kclpto_1 cache buffers chains kclgrantlk_2parent_name location ------------------------- ---------------------------------------- cache buffers chains kclcomplete cache buffers chains kclshrshr cache buffers chains kclclaim cache buffers chains kclhngcbk1 cache buffers chains kclblkdone_1 cache buffers chains kclgvlk cache buffers chains kclblkdone_2 cache buffers chains kclcclaim cache buffers chains kclrechk_1 cache buffers chains kclrechk_2 cache buffers chains kclbrparent_name location ------------------------- ---------------------------------------- cache buffers chains kclpto cache buffers chains kclpdcl cache buffers chains kclpdc_3 cache buffers chains kclpdc_4 cache buffers chains kclgcr_1 cache buffers chains kclcls_6 cache buffers chains kclevict cache buffers chains kcldle cache buffers chains kclrcopy cache buffers chains kclenter cache buffers chains kclrbastparent_name location ------------------------- ---------------------------------------- cache buffers chains kclexpand cache buffers chains kclcls_3 cache buffers chains kclverify cache buffers chains kclaffinity cache buffers chains kclassert cache buffers chains kclobj cache buffers chains kclobj_1 cache buffers chains kclobj_2 cache buffers chains kclgclk cache buffers chains kclwcrs_5 cache buffers chains kclscrsparent_name location ------------------------- ---------------------------------------- cache buffers chains kclstalepi cache buffers chains kclstalepi_1 cache buffers chains kclstalepi_2 cache buffers chains kclgvlk_1 cache buffers chains kclgclk_1 cache buffers chains kclgclk_2 cache buffers chains kclcsr_2 cache buffers chains kcbvm204 rows selected.
我们一般认为Latch结构是Mostly exclusive access的,也就是极少会有共享访问闩的机会。但Oracle一般对外宣称读取数据时服务进程是以共享模式使用cache buffers chains闩,这就造成了许多人误以为读读是不会出现latch: cache buffers chains争用的。 但是实际上查询语句大部分情况下仍需要以exclusive模式持有该类子闩(有时会以SHARED模式持有,这取决于读取时是使用kcbgtcr: kslbegin shared还是kcbgtcr: kslbegin excl;kcbgtcr是Oracle rdbms中重要的获取一致性读的函数,其含义为Kernal Cache Buffer GeT Cosistents Read,显然该函数存在两种获取cache buffers chains的方式即kslbegin shared和excl。与之相对应的是kcbgcur: kslbegin,kcbgcur的含义为Kernel Cache Buffer Get Current,该函数用以获取当前块以便修改,也就是"写";很显然kcbgcur: kslbegin函数只有以excl排他方式持有child cache buffers chains latch的必要),原因在于虽然是查询语句但同样需要修改buffer header结构,譬如修改tch抢手度、holder list的hash变量us_nxt、us_prv以及waiter list的hash变量wa_prv、wa_nxt等。换而言之读读是会引起Latch free:cache buffers chains等待的,而非许多人认为的仅有读写、写写会导致缓存链闩争用。 这个问题我们再用实验证明一遍:
SQL> drop table maclean; drop table maclean* ERROR at line 1: ORA-00942: table or view does not existSQL> create table maclean tablespace users as select * from dba_objects; Table created.SQL> select count(*) from maclean;COUNT(*) ----------51944SQL> /COUNT(*) ----------51944SQL> /COUNT(*) ----------51944SQL> select spid from v$process where addr =(select paddr from v$session where sid=(select distinct sid from v$mystat));SPID ------------ 6023另开一个命令行窗口:[maclean@rh2 ~]$ gdb $ORACLE_HOME/bin/oracle 6023 GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-23.el5) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". For bug reporting instructions, please see: ... Reading symbols from /s01/10gdb/bin/oracle...(no debugging symbols found)...done. Attaching to program: /s01/10gdb/bin/oracle, process 6023 Reading symbols from /s01/10gdb/lib/libskgxp10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libskgxp10.so Reading symbols from /s01/10gdb/lib/libhasgen10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libhasgen10.so Reading symbols from /s01/10gdb/lib/libskgxn2.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libskgxn2.so Reading symbols from /s01/10gdb/lib/libocr10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libocr10.so Reading symbols from /s01/10gdb/lib/libocrb10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libocrb10.so Reading symbols from /s01/10gdb/lib/libocrutl10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libocrutl10.so Reading symbols from /s01/10gdb/lib/libjox10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libjox10.so Reading symbols from /s01/10gdb/lib/libclsra10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libclsra10.so Reading symbols from /s01/10gdb/lib/libdbcfg10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libdbcfg10.so Reading symbols from /s01/10gdb/lib/libnnz10.so...(no debugging symbols found)...done. Loaded symbols for /s01/10gdb/lib/libnnz10.so Reading symbols from /usr/lib64/libaio.so.1...(no debugging symbols found)...done. Loaded symbols for /usr/lib64/libaio.so.1 Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done. Loaded symbols for /lib64/libdl.so.2 Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done. Loaded symbols for /lib64/libm.so.6 Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done. [Thread debugging using libthread_db enabled] Loaded symbols for /lib64/libpthread.so.0 Reading symbols from /lib64/libnsl.so.1...(no debugging symbols found)...done. Loaded symbols for /lib64/libnsl.so.1 Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done. Loaded symbols for /lib64/libc.so.6 Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done. Loaded symbols for /lib64/ld-linux-x86-64.so.2 0x00000039f280d8e0 in __read_nocancel () from /lib64/libpthread.so.0 (gdb) break kcbgtcr Breakpoint 1 at 0x108c72c回到原sqlplus窗口再次执行查询语句,会hang住: SQL> select count(*) from maclean;在gdb窗口: (gdb) break kslfre Breakpoint 2 at 0x7a133cBreakpoint 1, 0x000000000108c72c in kcbgtcr () (gdb) c Continuing.Breakpoint 1, 0x000000000108c72c in kcbgtcr () (gdb) c Continuing.Breakpoint 1, 0x000000000108c72c in kcbgtcr () (gdb) c Continuing.Breakpoint 2, 0x00000000007a133c in kslfre () (gdb) c Continuing.多次continue直到出现kslfre内核函数,开一个新的sqlplus窗口: SQL> set autotrace on; SQL> select count(*) from v$latchholder;COUNT(*) ----------3Execution Plan ---------------------------------------------------------- Plan hash value: 1575818826-------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 13 | 0 (0)| 00:00:01 | | 1 | SORT AGGREGATE | | 1 | 13 | | | |* 2 | FIXED TABLE FULL| X$KSUPRLAT | 1 | 13 | 0 (0)| 00:00:01 | --------------------------------------------------------------------------------v$latchholder的数据来源于X$KSUPRLAT内部视图,因为v$latchholder不带mode字段,所以我们直接观察X$KSUPRLATSQL> select KSUPRLAT "address",KSUPRLNM "name",KSUPRLMD "mode" from X$KSUPRLAT;address name mode ---------------- ------------------------- --------------- 00000000FCE40040 cache buffers chains EXCLUSIVE 00000000FA696978 simulator lru latch EXCLUSIVE 00000000FA6CDCE0 simulator hash latch EXCLUSIVE/* 可以看到即便是查询语句也是以EXCLUSIVE mode持有child cache buffers chains latch */(gdb) quit A debugging session is active.Inferior 1 [process 6235] will be detached.Quit anyway? (y or n) y Detaching from program: /s01/10gdb/bin/oracle, process 6235/* 可以通过以下statistics可以看到以上读取为纯粹的逻辑读,没有物理读取的部分干扰*/Statistics ----------------------------------------------------------0 recursive calls0 db block gets719 consistent gets0 physical reads0 redo size517 bytes sent via SQL*Net to client492 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processed
Oracle闩:Cache Buffers chains相关推荐
- mysql闩_Oracle闩:Cache Buffers chains
Latch cache buffers chains大约是Oracle中child latch数量最多,使用最为频繁的闩锁了.其子闩总数受到初始化参数(8i中的db_block_buffers/4)的 ...
- Oracle latch: cache buffers chains
buffer cache深度分析之buffer cache的优化 buffer cache的等待事件 与buffer cache相关的等待事件包括:latch free.buffer busy ...
- oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件
关于Oracle数据库latch: cache buffers chains等待事件 latch: cache buffers chains等待事件的原理 当一个数据块读入到sga中时,该块的块头(b ...
- oracle中的latch: cache buffers chains 与热块
oracle中的latch: cache buffers chains 与热块 oracle中的latch: cache buffers chains 与热块 ORACLE中的buffer cache ...
- oracle等待资源时间加长,案例:Oracle等待事件latch: cache buffers chains故障优化处理总结...
天萃荷净 数据库的CPU使用率为100%,应用相应迟缓.查看AWR中数据库的latch:cache buffers chains等待较多 当一个数据块读入sga区,相应的buffer header会被 ...
- Oracle等待事件(一)—— latch cache buffers chains 分析与优化思路
一. 什么是CBC等待 首先我们需要知道CBC等待发生在哪里,为什么会发生,才能理解应该如何定位,如何处理. 首先,CBC latch是用于保护buffer cache的,因此CBC等待一定发生在bu ...
- 深入理解latch: cache buffers chains
事件背景: 一个客户的数据库发生了宕机事件,查看了数据库的awr报告,原来是由于出现大量的latch: cache buffers chains等待事件导致系统消耗量大量的CPU,最终导致系统h ...
- 深入理解 latch: cache buffers chains
事件背景: 一个客户的数据库发生了宕机事件,查看了数据库的awr报告,原来是由于出现大量的latch: cache buffers chains等待事件导致系统消耗量大量的CPU,最终导致系统h ...
- latch: cache buffers chains 阻塞 buffer busy waits
os: centos 7.4 db: oracle 11.2.0.4 版本 # cat /etc/centos-release CentOS Linux release 7.4.1708 (Core) ...
- latch: cache buffers chains故障处理总结
客户说数据库的CPU使用率为100%,应用相应迟缓. 发现是latch: cache buffers chains 作祟 故障分析思路 查看等待事件,判断故障起因 1 SQL>select * ...
最新文章
- PS:将webp后缀图片最简单最快速的方法另存为png后缀的图片
- 【以太坊智能合约】Embark Framework 开发基础篇
- 用DirectoryInfo搜索文件夹时过滤隐藏文件夹
- 在python3.x下使用如下代码: import cPickle as pk 报错
- JPA EntityManager详解
- php上传图片大小判断,jQuery实现判断上传图片类型和大小的方法示例
- C语言 n*n矩阵求值及求逆矩阵
- html5复选框控制按钮状态,HTML5如何添加原生radio按钮和checkbox复选框转换为非常好看的滑动开关按钮的插件...
- 3-12岁经典必读书
- android+8.0代码安装包,Android 8.0安装apk的实例代码
- windows内核和Linux内核区别
- Mtlab 二次规划及其例子
- 中标麒麟系统安装步骤
- MIPS单周期CPU设计——lw和sw指令的设计
- 无线扫码枪 服务器查询异常,无线扫描枪常见问题及解决方法
- Win10搭建gym运行atari游戏pong
- java实现图片分辨率压缩、图片软化、jpg质量压缩
- ANSYS的宏文件mac的创建和应用
- 【T-SQL】T-SQL语句整理(基于SQL Server)
- SparkSession
热门文章
- 提取网页中的href 爬虫_教你一步一步实现当当图书爬虫
- 生成指定位数的坐标方法-2优化版本--建议使用的版本
- python加法赋值运算符为_Python中什么是算术运算符、赋值运算符和复合运算符?...
- android 原理 组合控件_Android自定义控件之组合控件
- package.json详解
- iOS与JS交互之UIWebView协议拦截
- 【UML】概念、关联、画画(一)
- android开发学习---开发一个简易的短信发送器
- 通过shell脚本防止端口扫描
- nginx安装问题 Makefile Error 127