数据库系统查询优化,数据库优化步骤

摘要:近期,我们生产系统的功能管理模块遇到了一个问题,输入查询条件到显示查询结果页面需要20分钟的时间,对现场工作效率造成了较大影响。不过之前并没有什么异常,最近也没有做过什么大的手术。以下是故障排除步骤:

1. 查看当前等待事件的故障排除结果。等待事件没有明显异常,等待时间也不长。

SELECT inst_id,wait_class,EVENT, SUM(DECODE(WAIT_TIME, 0, 0, 1)) \’Prev\’, SUM(DECODE(WAIT_TIME, 0, 1, 0)) \’Curr\’, COUNT(*) \’Tot\’ , 状态, sum(SECONDS_IN_WAIT) SECONDS_IN_WAIT FROM GV$SESSION_WAITWHERE 事件NOTIN (\’smon 计时器\’,\’pmon 计时器\’,\’rdbms ipc 消息\’,\’来自客户端的SQL*Net 消息\’,\’gcs 远程消息\’) AND 事件不喜欢\’ % idle%\’ AND event NOT LIKE \’%Idle%\’ AND event NOT LIKE \’%Streams AQ%\’ GROUP BY inst_id,wait_class,EVENT,stateORDER BY 1,6 desc 注意: 1) 如果状态值为Waiting,则Second_in_wait 值为实际等待时间(以秒为单位)。如果状态值为等待已知时间,则wait_time 值为实际等待时间。 Prev 代表最后一次等待计数,Curr 代表当前等待计数。

2. 查看对长时间运行的SQL 进行故障排除的结果。这些都是正常运行的SQL和任务。

— 实时监控执行时间超过10秒的SQL语句SELECT \’kill -9 \’ || /*p.spid,p.pid,*/s.sid,s.sql_id,s .username、s.machine、s.sql_hash_value、s.last_call_et \’第二\’、s.last_call_et/60 \’running_time\’、s.client_info、p.program \’OSProgram\’、\’更改系统终止会话\’\’\’ || | \’, \’ || \’\’;\’ FROM v$session s, v$process p WHERE (s.username 不为NULL) (NVL(s.osuser , \’x\’) \’SYSTEM\’) AND(s.TYPE \’背景\’ )) AND (p.addr(+)=s.paddr) –and s.username in (\’CRMDB\’) and s.last_call_et 10/*and s.sql_hash_value=880766746*/ORDER BY s.last_call_et/60 desc , \’USERNAME\’ ASC, Ownerid, \’USERNAME\’ ASC;– 根据sid select username, sql_text 显示具体的SQL 语句。计算机,来自gv$ 会话a、gv$sqltext_with_newlines b 的osuser,其中DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value 和a.sid=sid 按部分排序。

3.查看阻塞锁排查结果:无

SELECT mm.inst_id, mm.sid, mm.TYPE, mm.id1, mm.id2, LPAD(TRUNC(mm.ctime/60/60), 3) || TO_CHAR(TRUNC) (mm .ctime/60 ) – TRUNC(mm.ctime/60/60) * 60, \’fm09\’), 2) || \’分钟\’ || ) * 60, \’fm09\’), 2) || \’ 秒\’ ctime, CASE WHEN mm .block=1 AND mm.lmode !=0 THEN \’holder\’ WHEN mm.block=0 AND mm.request !=0 THEN \’waiter\’ ELSE NULL END 角色,如果EE.blocking_session 不为NULL | ee.blocking_session ELSE NULL END block_session, dd.sql_text sql_text, cc.event wait_event FROM gv$lock mm, gv$session ee, gv$sqlarea dd, gv$session_wait cc WHERE mm.sid IN (SELECT nn.sidFROM ( SELECT tt.*, COUNT(1) OVER (按tt.TYPE, tt.id1, tt.id2 分区) cnt , MAX(tt .lmode) OVER (按tt.TYPE, tt.id1, tt 分区。 id2) lmod_flag, MAX(tt.request) OVER (PARTITION BY tt.TYPE, tt.id1, tt.id2) ) request_flag FROM gv$lock tt) nn WHERE nn.cnt 1 AND nn.lmod_flag !=0 AND nn.request_flag !=0) AND mm.sid=ee.sid (+) AND ee.sql_id=dd.sql_id (+) AND mm.sid=sid (+) AND ((mm.block=1 AND mm) .lmode !=0) OR (mm.block=0 AND mm.request !=0)) 按mm.TYPE、mm.id1、mm.id2、mm.lmode DESC、mm.ctime DESC 排序

4. 检查定时任务是否正在运行。 故障排除结果:无。

–查询正在运行的scheduler_jobselectowner,job_name,sid,b.SERIAL#,b.username,spid from ALL_SCHEDULER_RUNNING_JOBS,v$session b,v$process (session_id=sid and paddr=addr)。

5. 分析AWR报告。前4条SQL是凭经验来快速定位问题,只有故障期的AWR才能进行整体分析。当您可以更好地控制时间点时,请使用ASH 外观。

1.AWR概述

实例效率百分比(100% 目标) 所有指标的目标都是100%。换句话说,越大越好,但对于某些错误,它可能会超过100%,甚至为负值。

标准是:

80% 或以上% 非分析CPU 90% 或以上缓冲区命中%、内存排序%、软分析% 95% 或以上库命中%、Redo Nowait%、缓冲区无等待% 98% 或以上锁存器命中%缓冲区命中%: 是标准的,请参见下文。

内存利用率%:对于已经运行一段时间的数据库,共享池内存利用率应该稳定在75%到90%之间。

SQL1 with Execution:执行时间大于1 的SQL 的百分比。如果这个值太小,则意味着您的应用程序应该使用更多的绑定变量,以避免过多的SQL 解析。

Memory for SQL w/exec1:执行时间大于1 的SQL 消耗的内存百分比。这是衡量经常使用的SQL 语句与不经常使用的SQL 语句相比消耗多少内存的指标。

2.时间模型分析

在awr中,时间模型统计数据用于回答诸如“前台进程花费的时间”和“解析语句花费的时间”等问题。

在这里您可以看到最上面的值是经过的SQL 执行时间。这表示执行SQL 语句所花费的总时间。请注意,这还包括获取查询结果的时间。

可以看到,用于SQL执行的时间(SQL执行经过时间)占95.02%。对于一个相对健康的系统来说,这个比例应该不低于90%或者更高。

PS:

结合解析所用时间和硬解析所用时间来查看解析是否是主要差异,重点是软解析还是硬解析。

序列加载耗时序列冲突是问题的焦点

PL/SQL 编译运行时间PL/SQL 对象编译时间

请注意,PL/SQL 执行运行时间纯粹是在PL/SQL 解释器中花费的时间。它不包括执行和解析SQL(包括SQL)所花费的时间。

连接管理调用经过时间建立数据库会话连接和断开连接所花费的时间。

分析失败经过时间由于ORA-4031 等原因分析失败。

硬分析(共享标准) 已用时间无法共享游标的硬分析

硬解析(绑定不匹配) 已用时间由于绑定类型或绑定大小不匹配而进行硬解析

3.等待事件分析

等待事件表明它主要是I/0 瓶颈。提交的平均延迟为16毫秒,后台日志文件并行写入的平均延迟为8毫秒,这在实践中被认为太慢了。表明系统明显卡住。

ps:常见等待事件及解决方案

4. TOP SQL分析

分析上面的结果,主要问题是I/0,从整体角度优化时,还是需要从SQL按照用户I/O等待时间(I/0等待时间)的顺序进行优化。 Find SQL从四个方面进行优化:获取有序SQL(逻辑读)、读取有序SQL(物理读)。

然而,下面涉及的所有SQL都是日常使用,系统突然卡住了,尽管没有明显的异常。

为了显示:

CPU TIME : 快照时间内执行该SQL 所消耗的Cumulative CPU time slices (in sExecutions) : 快照时间内该SQL 的累计执行次数CPU per Exec (s): By a singleexecution Average CPU Time Consumed Running this SQL,或(SQL CPU TIME/SQL 运行)%Total : 此SQL 累计消耗的CPU 时间是该时间段内总DB CPU 的百分比,或(SQL CPU TIME/总DB CPU)。 % CPU 此SQL消耗的CPU时间占该SQL消耗时间的百分比,即(SQL CPU时间/SQL运行时间)。该指示器显示该语句是否依赖于CPU %IO。 SQL 消耗的时间百分比,或(SQL I/O 时间/SQL 经过时间),指示该语句是否依赖于I/O。

为了显示:

Buffer Gets : 快照期间SQL 消耗的累积缓冲区(包括一致读取和当前readExecutions) : 快照期间SQL 执行的累计执行次数Gets per Exec : 事务SQL 的平均单个缓冲区获取对于事务操作,单个缓冲区获取为通常小于SQL 累积执行消耗的总缓冲区数与数据库缓冲区获取总数的2000%(SQL 缓冲区获取数/数据库检索的缓冲区总数)。

Physical Reads : 此SQL 执行累计消耗的物理读取次数Execution : 快照时间内此SQL 累计执行次数Reads Per Execution : 此SQL 每次执行累计消耗的物理读取次数(SQL 物理读取/执行),对于OLTP事务这类操作,单次操作一般不会超过100%,总计:该SQL消耗的累计物理读计算出该时间段内的物理读总量。即(SQL 物理读取数/DB 物理读取总数)

5.表段分析

从上面关于IO问题的整体提示来看,我们看一下Segments per Physical Write和Segments per Physical Write Request,看看哪些表段占用了更多的IO。我们可以看到AUDIT_LOGIN_DB表占物理写入的20%。物理请求也占20%和8.2%,估计数据太多了。

该表不属于业务表,因此异常情况由该表决定。

六、故障表分析1、检查数据量和表内容

该表记录了用户登录时的IP等信息。每次用户登录时,触发器都会写入此表。目前,该表的数据量已达到800万条级别,从登录时可以看到以下内容:插入的频率非常高。

2.减少数据量

这个表不是很有用。这里,我打算保留它一段时间,然后切换表,然后截断它。由于空间有限,到目前为止我已经解释了N 次如何做到这一点。我不会在这里介绍它,但是.

7、测试经过一段时间的测试,业务反馈应该正常,问题解决,可以重新开始工作。

如果您觉得有用,请分享。稍后我会详细讨论DevOps 和DBA,感兴趣的请关注。

本文和图片来自网络,不代表火豚游戏立场,如若侵权请联系我们删除:https://www.huotun.com/game/669468.html

(0)
上一篇 2024年6月4日
下一篇 2024年6月4日

相关推荐

  • 和平精英红色眼罩怎么得?

    和平精英红色眼罩怎么得? . 很多玩家在和平精英游戏里中会看到别人会带着一个红色眼罩,但是不知道如何获取,获取方法: 和平精英红色眼罩是暗影哥特套装的一个配饰,要想获得它,必须要购买一整个套装; 2. 打开游戏,在游戏商城里面,点击外观,找到暗影哥特套装所在位置; 3. 点击购买即可,需要888游戏币。 和平精英蒙眼罩怎么获得? 您好,在和平精英游戏中,蒙眼…

    游戏快讯 44分钟前
  • 和平精英怎么举报队友?

    和平精英怎么举报队友? 步骤/方式1 首先进入和平精英游戏主页面点击右上方的头像 步骤/方式2 在头像里点击历史战绩,也就是你玩过的所有历史战绩都在这里 步骤/方式3 选中一场你认为有问题的 步骤/方式4 点击下方的举报俩字 步骤/方式5 选择好队友,写明原因,点击举报 步骤/方式6 这样子就举报成功了,等待反馈就好了,当然不要乱举报哦! 和平精英怎么投诉队…

    游戏快讯 2小时前
  • 手机和平板怎么互传文件?

    手机和平板怎么互传文件? 1. 在平板上开启蓝牙、WLAN,并于手机登录同一华为帐号。 2. 从手机顶部右侧下滑出控制中心,在超级终端下点击平板名称。 3. 在平板与平板上显示的手机屏幕之间拖动文件即可互传。 华为手机和平板怎么互传文件? 第一步:通过以下方式连接手机和平板,开启多屏协同: 蓝牙连接: (1)从平板状态栏下滑出通知面板,点亮多屏协同。 (2)…

    游戏快讯 3小时前
  • 怎么下载和平精英全皮肤解锁版?

    怎么下载和平精英全皮肤解锁版? 1. 可以下载和平精英全皮肤解锁版。2. 因为和平精英全皮肤解锁版是非官方的修改版本,所以无法在正规的应用商店中下载。需要在第三方网站或者论坛上搜索并下载相关的安装包。3. 在下载和平精英全皮肤解锁版之前,需要确保你的设备已经开启了允许安装未知来源应用的选项,并且要注意下载安装包的来源是否可信,以避免下载到恶意软件。 和平精英…

    游戏快讯 5小时前
  • 和平精英什么画面最美?

    和平精英什么画面最美? 新年烟花,还有每天的晚霞,当然了和喜欢的人在一起的画面才是最最美的。 和平精英iphonexr画面设置? 首先你先是个平板电脑才能设置画面。 和平精英画面渲染设置? 打开游戏主界面下设置后点击 “画面设置” , ”画质品质” 可以设置成“ 流畅,均衡 ,”高清暂未支持该设备,帧数设置可以设置 “低或中”, 对于游戏卡顿时可以设置“ 低…

    游戏快讯 6小时前