Oracle数据库的性能优化一直是DBA关注的焦点。在不同版本中,Oracle提供了数据库性能诊断的相关工具。事实上,这些工具通过对数据库中记录性能数据的视图进行连续采样来获取Statspack的元数据,这些数据是使用工具分析性能的基础。在本文中,我们将介绍数据库中最重要的性能视图。
我曾经在我的博客中提到,我问了一个数据库管理员朋友一个问题:列出九个最重要的动态性能视图。为每个视图写一篇文章(不少于5页的Word文档),解释您可以从该视图中获得什么信息。最后写一篇文章(不少于20页的Word文档),说明结合这些视图可以得到哪些重要的数据库信息,辅助数据库优化和诊断。
至于这个问题的初衷,我是这样解释的:其实我并不在乎文章的长短,关键是你是否真的思考过这些知识,并能运用到实践中去。
首先自己想想,看自己能想到什么,然后参考别人的经验,看看差距在哪里。对比再学习,学习再深入。同样,最忌讳的不是思考,而是直接去找别人的答案。这就像解数学题一样。如果你偷看答案,会限制你的思维,让你很难独立思考和创新。
如果这样去思考,去比较,去学习,去总结,我不相信技术就不能提高。世界并不复杂。恐怕你从来没有认真对待过。其实这个题目和这篇文章是给自己看的,不是给别人看的。作为一名DBA,我们应该能够停下来,不时地问自己一些问题,看看我们可以掌握一些问题的哪些细节。
我的问题后来被一些公司的朋友在DBA面试中使用,有参加过面试的朋友来问我答案。其实我提出的只是一个命题,答案肯定会因人而异,这个问题的答案是对是错并不重要。但是通过回答,我们真的可以看到一个人对数据库的认识和理解,他的侧重点,他的知识。再者,面试官可以通过你的回答提出更深入的问题,从而考察你的真实水平。完美的面试下,真实的技术水平是无法掩盖的。
好了,在继续阅读之前,请合上书,找一张纸写下自己的答案,以此作为面试,看看自己是否清晰,对自己的答案是否满意。
提出这个命题还有另外一层意思。在许多生产环境中,当突然出现问题时,可能没有可用的工具,没有Statspack,只能使用sql*plus。我问过很多考生:这个时候你该怎么办?
毫无疑问,您需要查询动态性能视图,了解系统运行状态的大致情况,并找出系统问题的原因。
在前一节中,当我们介绍Statspack时,我们提到了许多数据库的动态性能视图。现在我们可以对这些观点进行分类、总结和扩展。
1.与会话v $ session相关的主视图->: v$session_wait
V$Session视图记录当前连接Session的信息,包括用户名、连接主机、会话正在执行的SQL的SQL_ADDRESS和SQL_HASH_VALUE等。V$session_wait记录当前连接会话正在等待的资源信息。在Oracle 10g中,Oracle将v$session_wait视图的内容合并到v$session视图中,这样更容易获取当前会话信息。
通过这两个视图,您可以快速获得当前连接会话的状态。如果数据库遇到等待、争用、锁定等问题。,您可以通过这两个视图找出性能问题的原因以及导致这些问题的会话。
2.与会话级统计信息相关的视图有
V $ sesstat视图记录会话的统计信息,包括逻辑数据读取、物理数据读取、排序操作等。v $ sesstat收集的信息会累积到v$sysstat视图中,记录整个数据库系统的统计信息。
通过v $ sesstat,可以获取并分析当前连接操作的会话信息;使用v$sysstat,您可以对数据库自启动以来的运行状态有一个整体的了解。
3.与等待事件v $ session _ event->:v $ system _ event相关的主视图
V$session_event记录当前连接会话的等待事件,这些事件最终累积到v$system_event视图中。v$system_event记录自数据库启动以来整个数据库系统的等待信息摘要。通过这两个视图,我们可以知道数据库的等待消耗了哪些事件,从而可以进一步诊断其具体问题。
在这里,我们需要对v$session_wait和v$session_event视图进行一些区别和解释。v$session_event视图记录了当前连接会话的等待事件信息,是会话生命周期中各种等待事件的累加,比如查询当前会话的累计等待:
该视图记录了不同等待事件的等待时间、等待次数等信息。
V$session_wait记录活动会话当前正在等待的资源信息,这是实时信息的记录。v$session_wait的实时等待完成后才能记录在v$session_event中。简单粗略地说,v$session_wait是“现在”,v$session_event是“曾经”:
当然,v$session_wait和v$session_event不仅仅是“现在”和“曾经”那么简单,v$session_wait视图中记录的信息更为复杂和全面。在此视图中,Oracle通过附加参数(P1、P2、P3)显示等待事件的资源等信息,这些参数对于不同的事件有不同的含义。例如,对于数据库文件分散读取等待,P1代表文件编号,P2代表数据块数,P3代表块数(P代表参数)。
此信息可以通过另一个视图查询获得:
统计包相关信息记录的数据表包括:
请注意,在Oracle9i中,v$session和v$session_wait的信息不是由Statspack收集的,而是v$system_event视图记录的累积信息,这意味着我们无法跟踪会话的历史,也无法知道哪个会话导致了等待,以及如何和何时导致的。针对这种情况,Oracle 10g开始对其进行增强。
最后,列出我对这个问题的答案:
v $ session+v $ session _ wait = Oracle 10 gV $ session;
v $ sysstat
v $ system _ event
v $流程;
v $ sql
v $ sqltext
v $ lock
v $ latch _ children
v$bh .
这是我的回答。除了数据库等待和统计信息,我还关心进程信息(v$process),latch _ children竞争信息,锁等待信息,SQL(v$sql,v$sqltext)信息,Buffer信息(v$bh),当然还有很多重要的视图,你会怎么安排?
Statspack的主要优点是可以持续收集这些信息,从而可以对数据库的变化趋势进行数据分析。但是Statspack毕竟需要DBA手动安装,定期规划,维护数据等。当一个企业缺少专门的维护人员时,如果出现问题,即使是Oracle专家到了现场也无法得到太多有效的信息。为了解决这些问题,甲骨文开始尝试自动化这些任务。
会话信息的增强
虽然v$session_wait记录的信息非常重要,但是这些重要信息会随着会话状态的变化而变化。如果想得到数据库的历史状态和会话的历史等待信息,是不可用的,所以我们很难回答这样的问题:
昨天这个系统是什么样的?
今天和昨天有什么区别?
一小时前是哪个用户导致性能下降的?
今天有哪些事件让我们花更多的时间等待?
您可能还会听到OracleSupport一遍又一遍地问:问题发生时,系统是什么样子的?出现问题时系统有怎样的等待?你能重现这个问题以便我们判断吗?
这些问题很多都是极其气人的,我们当然不希望问题重现,再次造成停机或业务损失,而那些问题似乎明显是在推卸不作为的责任。但事实是,没有当时和会期的现场和状态的实时信息,真的很难判断问题。
从Oracle 10g开始,Oracle已经改变了这一切。所以说了这么多,我只想更认真的告诉你,这个改变有多重要。
v $会话视图的增强
在Oracle 10g中,Oracle全面增强了v$session视图,现在这个视图被赋予了更多的含义。
首先,添加了关于阻塞的信息:
阻塞_会话_状态变量2(11)
阻塞_实例号
阻塞_会话号
BLOCKING_SESSION记录导致当前等待会话的进程标识。我们来看看下面的测试。首先,在会话1中执行更新操作,暂时不要提交:
然后会打开另一个会话,更新也会被执行,此时的更新会在等待:
SQL >连接eygle/sysdba
连接。
SQL >更新eygle set username = ' EYGLE
现在让我们看看v$session提供的新信息可以帮助我们找到什么:
请注意,会话59阻止了进程90。在以前的版本中,可以通过另外两个视图来查询这些信息:
同时,Oracle将v$session_wait的信息集成到v$session视图中,更加方便。等待也可以通过v $会话视图获得:
通过SQL查询,您可以进一步找到阻止其他会话的用户正在执行的操作:
添加v $会话_等待_历史视图
为了更有效地保存会话信息,Oracle 10g添加了一个新的v$session_wait_history视图,用于记录活动会话的最后10个等待事件。
最后10次的等待信息由隐式参数_session_wait_history控制,默认值为10。如果您想让更多的等待活动会话,您可以通过修改此隐式参数来控制它。
通过这个视图,v$session_wait可以被扩展以获得更多相关信息来辅助数据库问题诊断。这是甲骨文迈出的一小步。
本文摘自《逐步数据库管理优化和备份恢复》
加入“云和恩墨讲堂”微信群,参与讨论学习
搜索盖国强(eygle)微信号:Eygle,或者扫描下面的二维码。注:云和恩墨讲堂,可以入团。每周与数千人分享免费技术,在线与导师讨论。
关注微信官方账号,获得后续精彩分享
1.《视图 Oracle最重要的九大性能视图》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《视图 Oracle最重要的九大性能视图》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/843168.html