一般在OLAP环境中,大表在进行全表扫描的时候一般会出现direct path read等待事件,
如果在OLTP环境中,出现大量的direct path read直接路径读取,这样就有问题了。
一般在OLTP中,都是事物型的sql,如果想sql执行效率,那么最好从内存当中读取数据,直接从数据文件中读取,后果可想而知了。
这里就可能需要我们禁用direct path read。 第一种方法:使用10949事件禁止全表扫描的时候,使用direct path read SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
------------------------------ -------------------------------------------------- ----------------------------------------------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read auto enable direct read in serial

SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
------------------------------ -------------------------------------------------- ----------------------------------------------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read auto enable direct read in serial
可以看到默认_serial_direct_read参数为auto,那么在oracle中,什么样的表会被断定为大表?可以看到_small_table_threshold隐含参数,其value为382,单位是block,默认值是db cache size的2%大小,这个是在实例启动的时候动态决定的。在11gr2之后,当一个表的块数大于_small_table_threshold的时候,就被判定为大表,否则就视为小表。对于大表,在进行全表扫描的时候,oracle会根据_serial_direct_read的值来确定是否执行direct path read,如果值为auto,那就会direct path read。 使用10949事件禁用direct path read: SQL> Alter system set event='10949 TRACE NAME CONTEXT FOREVER, level 1' scope=spfile; System altered. SQL> Alter system set event='10949 TRACE NAME CONTEXT FOREVER, level 1' scope=spfile; System altered.
使用alter命令禁用direct path read: SQL> alter session set "_serial_direct_read"=false; Session altered. SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
---------------------------------------- -------------------- ------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read FALSE enable direct read in serial SQL> alter session set "_serial_direct_read"=false; Session altered. SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
---------------------------------------- -------------------- ------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read FALSE enable direct read in serial
开启direct path read: SQL> alter session set "_serial_direct_read"=auto; Session altered. SQL>
SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
---------------------------------------- -------------------- ------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read AUTO enable direct read in serial SQL> alter session set "_serial_direct_read"=auto; Session altered. SQL>
SQL> SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.ksppdesc describ
2 FROM SYS.x$ksppi x, SYS.x$ksppcv y
3 where x.indx = y.indx
4 AND (x.ksppinm ='_small_table_threshold' or x.ksppinm='_serial_direct_read'); NAME VALUE DESCRIB
---------------------------------------- -------------------- ------------------------------------------------------------
_small_table_threshold 382 lower threshold level of table size for direct reads
_serial_direct_read AUTO enable direct read in serial
还有一个参数 _very_large_object_threshold 用于设定(MB单位)使用direct path read方式的上限,这个参数需要结合10949事件共同发挥作用。
10949 事件设置任何一个级别都将禁用direct path read的方式执行full table scan,但是仅限于小于 5 倍 BUFFER Cache的数据表。
同时,如果一个表的大小大于 0.8 倍的 _very_large_object_threshold 设置,也会执行direct path read.

Oracle 数据库禁止全表访问的时候direct path read /////的更多相关文章

  1. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  2. Oracle数据库对象(表空间/同义词/序列/视图/索引)

    数据库对象 Oracle数据库对象: 数据库对象是数据库的组成部分,常常用 CREATE 命令进行创建,可以使用 ALTER 命令修改,用 DROP 执行删除操作. 种类: (1)表空间:所有的数据对 ...

  3. 实例讲解Oracle数据库设置默认表空间问题

    实例讲解Oracle数据库设置默认表空间问题   实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...

  4. Oracle数据库之创建表结构

    Oracle数据库之创建表结构 主键与外键 主键:关系型数据库中的一条记录中有若干个属性,若其中的某一个属性组(可以是一个属性,也可以是多个)能唯一标识一条记录,那么该属性组就是主键. 外键:关系型数 ...

  5. Oracle数据库之创建表空间与用户

    Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...

  6. Oracle 数据库中查看表空间的2种方法

    在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...

  7. PowerDesigner生成Oracle数据库时,表名会带引号问题

    使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照""中的名称建表,如果没有& ...

  8. oracle数据库误删的表以及表中记录的恢复

    oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...

  9. oracle 数据库下所有表结构、数据量及缺失值统计

    表结构 SELECT t1.TABLE_NAME, t1.COLUMN_NAME, t1.DATA_TYPE || '(' || t1.DATA_LENGTH || ')', t2.COMMENTS ...

随机推荐

  1. 解决ASP.NET Core MVC调试慢的问题

    最近在做的一个项目中,发现网页端同时发起了4个AJAX请求需要数秒才获取到响应,太慢了,当我把请求数降低为1个的时候,速度看起来就比较正常,增加到2个同时的请求后,速度就有些慢了,3个的话就明显慢了, ...

  2. 腾讯云服务器搭建Apache/PHP/MySQL环境

    软件环境 Windows Server 2008 R2 企业版 SP1 64位 刚刚进入 Windows Server ,你会看到以下界面: 列出了服务器的基础信息和常用配置 下载 XAMPP htt ...

  3. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  4. Linux系统部署samba服务记录

    Samba(Server Messages Block)是一种linux系统和windws系统之间依靠网络协议共享文件的服务程序,(Samba has provided secure, stable ...

  5. Java基础--JDK的安装和配置

    一.Java平台简述 1.1 Java语言简介 Java是一门面向对象的编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两 ...

  6. Asp.Net Core 轻松学-HttpClient的演进和避坑

    前言     在 Asp.Net Core 1.0 时代,由于设计上的问题, HttpClient 给开发者带来了无尽的困扰,用 Asp.Net Core 开发团队的话来说就是:我们注意到,HttpC ...

  7. 关于ApiCloud的Superwebview在androidstudio中集成微信支付模块,提示模块未绑定的问题

    前两天ApiCloud项目集成了微信支付模块,android端今天也将ApiCloud官方的uzWxPay.jar集成了.在编译玩测试的时候提示wxPay模块为绑定!我的项目是使用ApiCloud推出 ...

  8. 数据库艰难求生之路(基础:创建数据库表格)part1

     创建表格 1.创建表格之identity create table TableName( id ,), col_1 ), col_2 ) ) 这是一个简单的表格创建,identity这个是指在创建表 ...

  9. nginx系列14:对HTTP协议的反向代理proxy模块

    proxy_pass指令 URL参数规则 需要注意的是,url中携带和不携带URI时发往上游请求的行为不同!

  10. Python 使用python-kafka类库开发kafka生产者&消费者&客户端

    使用python-kafka类库开发kafka生产者&消费者&客户端   By: 授客 QQ:1033553122       1.测试环境 python 3.4 zookeeper- ...