排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
8
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
以Oracle为例聊聊DBA需要的常用数据库TRACE
以Oracle为例聊聊DBA需要的常用数据库TRACE
白鳝的洞穴
2023-06-26
1147
端午假期外加孩子高考正好这几天出成绩,因此几天都没有动笔了。这几天确实很焦虑,心比较乱,所以也没有心思写东西。昨天广东高考分数发布,一块大石头也落了地。孩子不是学霸型的,所以期望也没有那么高,总的来说还算是正常发挥。接下来的志愿填写工作量还是不小的,虽然提前研究了一些学校,到了要真正报考的时候,还是有大量的工作要做的。
这两天除了在网上查看电子资料外,“大厚本”也是必须去认真翻阅的资料。对于如此众多的数据需要人工分析,我都有了一种写个PYTHON工具来分析这些数据的冲动。后来考虑到只有一个孩子,这几天报考时间,等我写出来黄花菜都凉了,就打消了这个念头。不过我想如果有人把这些数据都收集起来,训练一个大语言模型,用来对外提供咨询服务,也许还真的能赚到钱。
还是回归正题,前两天在谈数据库可观测性中的TRACE,可能有些朋友对TRACE关注不多,甚至对于TRACE和日志这两种数据库可观测性能力也有点模糊。数据库的TRACE很可能在日志中生成,而且TRACE也可能是在数据库出现某种现象时产生的,但是TRACE和日志是数据库可观测性方面的两个不同的领域。
数据库日志是记录数据库的正常行为的,包括数据库遇到BUG,遇到故障时,都是通过记录日志的方式让使用者了解情况。而TRACE往往是记录一些特殊的信息,在数据库正常运行时并不输出这些信息,只有主动要求输出日志,或者在分析某个问题或者调试某种应用时,才主动设置或者主动要求数据库输出这些信息。
从一个DBA的角度,我们需要数据库拥有什么样的TRACE能力呢?实际上Oracle数据库为我们提供了一个十分好的样板。这些年来,处理各种疑难杂症的时候,我经常会用到TRACE,因此在这方面也有些经验,今天我把这些经验总结一下,一方面也为DBA们提供一些分析Oracle数据库的思路,另外一方面也给我们的国产数据库提一些需求。
作为DBA,我们最需要的TRACE能力可能就是知道SQL语句是如何运行的,执行计划是如何产生的。如果我们遇到某条SQL,访问的数据也没啥变化,不过今天突然执行变慢了,我们需要了解慢的原因。这时候我们就需要了解这条SQL的执行的详细情况了。Oracle数据库的10046 trace是二十年前DBA拥有的核武器级别的TRACE工具,哪个DBA掌握了10046 trace,就能够分析与解决一些别的DBA解决不了的问题。
10046 trace可以把SQL执行的黑匣子打开,让DBA知道一条SQL是如何执行的,调用了哪些递归调用,执行过程中扫描了哪些数据块,扫描效率如何,哪些地方产生了等待。另外还可以看到SQL的完整执行计划,了解SQL的执行计划是否出现了问题。
除此之外,在SQL解析的时候,有时候会选择错误的执行计划,因此我们需要去了解某种错误的执行计划是如何产生的,因此我们需要类似Oracle 10053 trace这样的分析能力。Oracle 10053可以让我们知道一条SQL的执行计划产生的细节,通过这些细节,我们可以发现数据库选择错误执行计划的原因,从而让我们找到解决此类问题的方法。
SQL TRACE的功能可以让我们从SQL实际执行情况和SQL产生执行计划的过程来了解数据库SQL执行的详细情况,从而帮我们定位问题。对于国产数据库来说,SQL及SQL优化是十分重要的工作,因此这个功能是国产数据库中急需的功能。目前有些国产数据库已经具有了此类TRACE的能力,比如MogDB中目前已经实现了类似Oracle 10046、10053 trace的功能。
除了SQL TRACE的功能之外,还有一个DBA十分需要的trace工具就是treedump。Treedump是用来DUMP索引的树信息的。与表不同,索引组织的数据结构经常会出现节点分裂,因此很容易出现碎片。当索引碎片严重的时候,索引扫描的性能会受到很大的影响。因此了解索引碎片的情况,从而制定重建计划对于DBA来说十分重要。十年前我曾经和一个银行的IT主管谈到过这个话题,后来他组织了一次核心账务系统的索引重建。重建后效果十分惊人,他们发现核心交易的延时都提高了15%左右。做索引treedump的命令如下:
ALTER SESSION SET EVENTS 'immediate trace name TREEDUMP level '。
我们可以在会话上直接DUMP某个索引的树结构,参数是需要dump的索引的OBJECT ID。今天早上我没时间做实验了,所以直接从网上找了一个数据展示给大家:
从tree dump里,我们可以看到枝节点和叶节点的信息,了解树的高度(level),从而了解树的倾斜情况。如果Level过大了,那么肯定是存在问题的。一般情况下,索引树的高度顶多也就是3-4层,如果索引很小,层数很高,那么你就可以试试是否能通过rebulid来优化索引了。
除了上面的几个日常经常会用到的TRACE工具外,DBA经常还需要分析数据库中是否存在一些不合理的等待事件链。Hanganalyze是我在运维Oracle数据库的时候最经常使用的TRACE工具。当用户的数据库变慢,出现卡顿,锁死等情况的时候,我都会首先建议用户做一个3级的Hanganalyze,通过做几个Hanganalyze可以看出系统是否真正锁死,还是处于缓慢等待状态。主要的等待是什么,从而找到进一步分析问题的方法。
我贴的这张图已经比较老了,是十多年前的,现在的HANGANALYZE REPORT的可读性要好了很多。不过从老版本的报告中我们也很容易发现系统中出现的一场等待。
除了上面所说的几个TRACE工具外,会话DUMP,内存使用情况DUMP,数据块DUMP等也是运维人员十分常用的数据库诊断分析工具。实际上TRACE工具都是DBA遇到一些复杂问题的时候需要使用的工具。目前国产数据库在一些国产化替代的场景中已经是能用了,不过谈不上能让用户用得很好。要想让用户用得好,除了加强核心的稳定性与能力外,外围工具也十分重要。一个数据库产品想要在短时间内大幅提升核心的水平,难度很大,而把这些外围工具做好实际上是力所能及的。我也十分希望国产数据库厂商能在这些TRACE工具上面多下点工夫,让用户能够从国产数据库的黑盒子里获得一些有用的运维数据。
dba
oracle
sql优化
oracle执行计划
数据库
文章转载自
白鳝的洞穴
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨