Direct IO+asm引起css initialization

作者简介:


何剑敏 Oracle ACS华南区售后团队,首席技术工程师

现供职于Oracle ACS华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。

某数据库升级到12c后(应用代码也升级了),出现了大量css initialization的等待:

怀疑是否是12c的新特性导致。

CSS initialization 说明:
在RAC(或使用ASM的单实例)数据库环境下,当前台进程需要执行direct IO操作时,需要向CSSD进程进行注册,此时该前台进程发生CSS initialization等待。
在11g还是12c上,CSS initialization的触发原理都没有改变,该event是一个direct IO的预期行为,任何前台进程在需要进行direct IO的情况下,都必须进行一次CSS注册,之后就可以被允许进行direct IO操作。

我们知道,对LOB对象操作的时候,第一次操作的时候,是会进行direct IO的,后续的操作,要看LOB对象是否有cache,如果有cache,那么就不会进行direct OI,也就不会进行CSS initialization。

如果没有cache,那么每一次dml操作都要进行CSS initialization。那么就会出现这个客户遇到的情况一样,大并发的情况下,大量进程处于CSS initialization的等待了,并且cssd.bin进程的CPU使用率也会变得非常高。

所以通过情况下,我们不建议对频繁操作的核心业务表加LOB字段的。如果确实需要LOB字段,需要使用cache特性。请注意,这里是LOB对象的cache,而不是table的cache属性。我犯过一个错误,一个细微的差别导致加cache到table上,而不是LOB对象上,所以无论怎么测试,都无法重新客户的场景。

我建立的表如下:

CREATE TABLE wrong_tab_securefile_cache (

id NUMBER,

clob_data CLOB )

LOB(clob_data) STORE AS SECUREFILE cache

tablespace users;

正确的表的建立方式如下:

CREATE TABLE tab_securefile_cache (

id NUMBER,

clob_data CLOB)

LOB(clob_data) STORE AS SECUREFILE (cache)

tablespace users;

仅仅是有没有括号的差别,即一个是cache,一个是(cache)。

但是如果你用dbms_metadata进行分析,就可以比较清楚的看清他们之间的差别了:

图二:

第21行和41行可以看到差别,第一个的cache属性是加在表上的,第二个表的cache属性是加在LOB上的。所以,如果我们把LOB对象加到cache中,就不会那么剧烈的遭受css initialization。

最后,客户是通过LOB字段改成varchar2字段解决了。

文章转自数据和云公众号,原文链接

时间: 2024-10-21 22:37:24

Direct IO+asm引起css initialization的相关文章

oracle中Direct IO+asm引起css initialization

某数据库升级到12c后(应用代码也升级了),出现了大量css initialization的等待: SQL> select event,sql_id,count(*) from  v$session where event='CSS initialization' group by event,sql_id; EVENT                  SQL_ID          COUNT(*) ---------------------- ------------- ---------

NAS特定场景下buffered io比direct io读性能差问题的调查

最近一位NAS用户在微信上报道了NAS的性能测试报告,报告中测试数据显示buffered io读性能比direct io读要差.这显然和直观的认识不符,在内存充足的情况下,buffered io读的数据一般都在page cache中,每次读都是内存操作,其性能应该远远高于direct io,但测试数据却得到了相反的结果,这说明某些地方拖慢了buffered io读性能. 首先回顾一下用户的测试场景:保证内存完全够用的情况下,使用fio工具,基于libaio对比测试buffered io和dire

c direct io-aix系统direct io写透问题

问题描述 aix系统direct io写透问题 网络上查到一些资料,说明open函数使用O_DIRECT标志 _可以避免小型机掉电时数据丢失. 但是,经过测试显示掉电时有数据丢失.测试环境如下: aix5 open+lseek+write,每次写4K数据,直接拔掉小型机的电源插头. 哪位大神帮忙分析一下,上述问题出在哪里?如何解决?谢谢! 解决方案 Linux Direct IO 写文件的问题

MMAP和DIRECT IO区别【转】

转自:http://www.cnblogs.com/zhaoyl/p/5901680.html 看完此文,题目不言自明.转自 http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO.本篇文件打算详细全面,深入浅出.剖析文件IO的细节.从多个角度探索如何提高IO性能.本文尽量用通俗易懂的视角去阐述.不copy内核代码.       阐述之前

【转】Orion - oracle提供的测试io性能的工具

Orion是oracle提供的测试io性能的工具.它可以用来模拟Oracle数据库IO,也可以用来仿 真ASM的条带化的功能. Orion可以支持下列IO负载 1. 小的随机的IO:OLTP的应用主要是随机的读写,大小和数据的块大小一样(一般是8K).这样的应用主要是关注的吞吐量是IOPS和一个请求的平均延时时间.Orion可以仿真一个随机IO负载.指定的读写百分比,指定的IO大小,指定的IOs,IOs是分布在不同的磁盘上. 2. 大的连续的IO:数据仓库的应用,数据装载,备份,和恢复会产生连续

ORACLE数据库异步IO介绍

异步IO概念     Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等待任何操作完成.稍后或在接收到 I/O 操作完成的通知时,进程就可以检索 I/O 操作的结果.     Linux IO模型(I/O models)分同步IO模型(synchronous models)和异步IO模型(asynchr

oracle 11g IO校准

转载文章:http://blog.itpub.net/17203031/viewspace-1063523/ Oracle数据库发展到今天,"IO为王"已经是一种发展方向趋势.ExtraData一体机的重要特色之一就是最大程度的发挥IO能力.提高IO吞吐量. 相比CPU和内存,IO存储有其特殊性.我们讨论IO,通常成为I/O栈(I/O Stack).I/O栈设计的对象是一系列关键组件层,包括HBA.Storage Switches.Storage Array和Physical Disk

如何提高Linux下块设备IO的整体性能?

IO调度发生在Linux内核的IO调度层.这个层次是针对Linux的整体IO层次体系来说的.从read()或者write()系统调用的角度来说,Linux整体IO体系可以分为七层,它们分别是: VFS层:虚拟文件系统层.由于内核要跟多种文件系统打交道,而每一种文件系统所实现的数据结构和相关方法都可能不尽相同,所以,内核抽象了这一层,专门用来适配各种文件系统,并对外提供统一操作接口. 文件系统层:不同的文件系统实现自己的操作过程,提供自己特有的特征,具体不多说了,大家愿意的话自己去看代码即可. 页

大话存储系列21——存储系统内部IO 上

1.IT系统的IO结构图 2.应用程序层IO 应用层程序是计算机系统内主动发起IO请求的大户,但是要知道,计算机内不止有应用程序可以向底层存储设备主动发起IO请求,其他的,比如文件系统自身.卷管理层自身.适配器驱动层自身等,都可以主动发起IO.当然,只有应用程序发起的IO才可以修改用户实体数据内容,而其他角色发起的IO一般只是对数据进行移动.重分布.校验.压缩.加密等动作,并不会修改用户层面的实际数据内容. 应用程序在读写数据的时候一般是直接调用操作系统所提供的文件系统API来完成文件数据的读写