广告
返回顶部
首页 > 资讯 > 数据库 >怎么解决数据库中没有索引导致的DIRECT PATH READ
  • 712
分享到

怎么解决数据库中没有索引导致的DIRECT PATH READ

2024-04-02 19:04:59 712人浏览 薄情痞子
摘要

本篇内容主要讲解“怎么解决数据库中没有索引导致的DIRECT PATH READ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决数据库中没有索引导致的DI

本篇内容主要讲解“怎么解决数据库中没有索引导致的DIRECT PATH READ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决数据库中没有索引导致的DIRECT PATH READ”吧!

直接看TOP 5 EVENTS,这是数据库问题诊断的最快捷径。

怎么解决数据库中没有索引导致的DIRECT PATH READ

先看占DB TIME达63.33%的direct path read事件。等待次数78586次,等待总时间3833s(约64分钟),而elapsed time只有20分钟。因此我们需要弄清楚是什么动作导致这么高的direct path read。

那什么是direct path read呢?一般来说,数据块BLOCK(即oracle的最小存储单元)总是先由后台服务器进程缓冲至buffer cache,而后才被服务器进程获取。但对于一些大表,将其缓冲至buffer cache势必会将buffer cache中的许多其它对象挤出,即ageing out。为了避免这一情况,产生了direct path read,即不需要缓冲到缓存区,而是直接由服务器进程从磁盘获取。ORACLE通过一些参数控制在何种情况下采取direct path read。

既然direct path read很高,那就直接去查看对于哪些对象的direct path read高。通过查看segment by direct physical reads,可以获得这一信息:

怎么解决数据库中没有索引导致的DIRECT PATH READ

显而易见,direct physical reads是由于访问tbcm_catalogfile引起的。因为physical reads= physical reads cache + physical reads direct,因此,除了查看segment by direct physical reads,也有必要查看一下segment by physical reads 的情况:

怎么解决数据库中没有索引导致的DIRECT PATH READ

Physical reads最多的仍然是表tbcm_catalogfile。现在我们知道了physical reads主要发生在哪个对象上,但仍然不知道发生在哪个业务上(即哪个sql逻辑上)。即然Physical reads是等待最多,自然地,我们需要去查看Physical reads最多的SQL语句:

怎么解决数据库中没有索引导致的DIRECT PATH READ

根据SQL_ID查看第一条SQL语句,其文本为:

SELECT F_ID, F_OBJECTID, F_FILELOCATioN, f_filesrclocation, F_ISONSERVER, F_DATASIZE, F_PACKAGEPATH, F_SERVERID, F_ISMaiNFILE, F_FILEPROPERTY, F_DIRTYPE FROM TBCM_CATALOGFILE where F_OBJECTID=:"SYS_B_0" and F_PACKAGEPATH=:"SYS_B_1" order by F_OBJECTID

果然与表tbcm_catalogfile有关,接下来,我们查看该表的相关信息。得知,该表有4,000,000多条记录,F_OBJECTID字段几乎是唯一的,然而表上没有任何索引。由于没有索引,有执行上述SQL时,ORACLE只有选择全表扫描的方式,而对于如此大的一张表,恰好符合了DIRECT PATH READ的条件,因此执行计划选择使用DIRECT PATH READ的方式来获取数据。如果是单个进程,事实上已经很糟了。多个进程是,同于是direct path read,没有将block缓冲至缓存区,所以每个进程都得通过direct path read获取自己想要的数据。情况因此变得更糟。

分析完TOP 5 EVENTS中和第1名,接下来,我们分析一下第2名。

第2名是log file sync。当发出COMMIT或ROLLBACK命令的时间,服务器进程会唤醒LGWR进程,LGWR负责将REDO BUFFER中的日志缓存刷新到日志文件中。而LGWR后台进程产生的等待事件是log file parallel write。因此一般说来,前台log file sync等待事件高,后台log file parallel write也会高,我们在AWR报告中验证一下:

怎么解决数据库中没有索引导致的DIRECT PATH READ

果不其然。另外log file parallel write的avg wait为28ms,高于20,根据经验意味着存在日志文件IO急用。

    继续看:

    怎么解决数据库中没有索引导致的DIRECT PATH READ

    日志在20分钟内切换了5次,平均每4分钟切换一次,这个是远高于15-20分钟公认的切换一次。这说明REDO FILE文件可能过小。

    继续看:

    怎么解决数据库中没有索引导致的DIRECT PATH READ

    20分钟之内,没有发生回退,即user rollback=0。User calls/(user commints + user rollback) =9.87 ,该值小于经验值25,说明系统是提交过于频繁的。

    针对上述问题,给出以下应对办法:

  1. 在tbcm_catalogfile表的F_OBJECTID,F_PACKAGEPATH字段上创建组合索引

  2. 由于硬件无法更换,所以日志文件的IO争用可不管它

  3. 将日志文件从现在的50M,改为2G大小

  4. 由于调整代码工作量过大,COMMIT提交过于频繁的问题可不用管它。

     

调整之后,再次执行入库作业,并收集15:00-15:15之间的AWR报告。通过验看报告,上述问题解决:

怎么解决数据库中没有索引导致的DIRECT PATH READ

到此,相信大家对“怎么解决数据库中没有索引导致的DIRECT PATH READ”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么解决数据库中没有索引导致的DIRECT PATH READ

本文链接: https://www.lsjlt.com/news/64687.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么解决数据库中没有索引导致的DIRECT PATH READ
    本篇内容主要讲解“怎么解决数据库中没有索引导致的DIRECT PATH READ”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决数据库中没有索引导致的DI...
    99+
    2022-10-18
  • 怎么解决Oracle没有索引导致的DPR
    这篇文章主要讲解了“怎么解决Oracle没有索引导致的DPR”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Oracle没有索引导致的DPR”吧!直接...
    99+
    2022-10-18
  • SQL Server怎么找出数据库中没有索引的表
    这篇文章主要讲解了“SQL Server怎么找出数据库中没有索引的表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server怎么找出数据库中没有索...
    99+
    2022-10-18
  • 怎么解决引用slf4j中Logger.info没有数据的问题
    这篇文章主要介绍“怎么解决引用slf4j中Logger.info没有数据的问题”,在日常操作中,相信很多人在怎么解决引用slf4j中Logger.info没有数据的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-22
  • php如果数组中没有数据库怎么解决
    php如果数组中没有数据库的解决办法:1、创建一个PHP示例文件;2、创建MySQL数据库和到达数据库的链接,通过“mysql_connect()”函数完成,其语法为“mysql_connect(servername,username,pa...
    99+
    2023-05-25
    php 数据库
  • VUE通过JS修改html对象的值导致没有更新到数据中如何解决
    这篇文章主要介绍了VUE通过JS修改html对象的值导致没有更新到数据中如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇VUE通过JS修改html对象的值导致没有更新到数据中如何解决文章都会有所收获,下面...
    99+
    2023-07-04
  • mysql查找所有数据库中没有主键的表问题怎么解决
    今天小编给大家分享一下mysql查找所有数据库中没有主键的表问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。查找所...
    99+
    2023-07-05
  • 怎么解决Innodb中undo tablespace没有清理数据的问题
    这篇文章主要讲解了“怎么解决Innodb中undo tablespace没有清理数据的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Innodb...
    99+
    2022-10-18
  • VUE直接通过JS修改html对象的值导致没有更新到数据中怎么办
    小编给大家分享一下VUE直接通过JS修改html对象的值导致没有更新到数据中怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!...
    99+
    2022-10-19
  • mysql5数据库导出的字符集中文乱码怎么解决
    本篇内容主要讲解“mysql5数据库导出的字符集中文乱码怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql5数据库导出的字符集中文乱码怎么解决”吧...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作