前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《收获,不止SQL优化》 - 调优信息一键生成脚本学习

《收获,不止SQL优化》 - 调优信息一键生成脚本学习

作者头像
bisal
发布2019-04-19 11:39:45
9600
发布2019-04-19 11:39:45
举报
文章被收录于专栏:bisal的个人杂货铺

这是杂货铺的第448篇文章

梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,

1. 先获取有助调优的数据库整体信息

2. 快速获取SQL运行台前信息

3. 快速获取SQL关联幕后信息

其实我们日常,这些步骤,或多或少都会用,但往往缺乏系统的梳理,想到哪儿,做到哪儿,有时还是需要方法论的指导,梁老师帮助我们整理,而且给出了一键生成的脚本,非常实用,这引出了另一个话题,正如eygle曾说的,“动手实验实证能力,才会让别人的经验成为我们的知识和技能,不断成长”,除此之外,我们不能仅仅黑盒地使用,要了解背后机制,怎么一键生成的?脚本哪儿写得好,哪儿能优化,从中我们可以学习借鉴什么,这才能充分“榨干”脚本的知识。

1. 先获取有助调优的数据库整体信息

首先要知道整个数据库的运行情况,自然想到AWR,但是不是所有的性能问题,都能通过AWR暴露,例如采集AWR时间段,有问题的SQL根本未执行,因此,没发现问题,不代表没有问题。

使用spooldb.sql脚本(链接:https://github.com/liangjingbin99/shouhuo/blob/master/%E7%AC%AC01%E7%AB%A0/spooldb.sql),可以得到下面这几个文件,

(1) 最近一小时的ADDM:addmrpt_1_576_578.txt

(2) 最近一小时的AWR:awrrpt_1_577_578.html

(3) 最近7天的AWR:awrrpt_1_576_578_all.html

(4) 最近半小时的ASH:ashrpt_1_20190317212222_20190317215222.html

(5) 数据库所有的相关信息:spool_BISAL_1_19-03-17_21.52.html

前几个好理解,最后一个,数据库所有的相关信息,是用spool生成的,包含如下信息,我们能针对自己的个性化需求,增加/修改/删除关注的相应采集项,另外,发散一些想法,这些采集项,对应的SQL,我们能融入自己的监控平台,实现自动化采集、展示,做到充分利用,

"版本 最近一次启动时间,版本,以及是否RAC 30分钟内CPU或等待最长的 近期负载情况(根据AWR快照) 逻辑读最多 物理读最多 执行次数最多 解析次数最多 磁盘排序最多 提交次数超过10000的session 长度超过100的SQL 查询共享内存占有率 表有带并行度 索引有带并行度 失效索引 失效对象 位图索引和函数索引、反向键索引 组合索引组合列超过4个的 索引个数字超过5个的 哪些大表从未建过索引。 哪些表的组合索引与单列索引存在交叉的情况。 哪些对象建在系统表空间上。 检查统计信息是否被收集 检查哪些未被收集或者很久没收集 被收集统计信息的临时表 日志切换频率分析 最近10天中每天日志切换的量 日志组大小 查看recovery_file_dest使用率 检查序列小于20的情况 表空间使用情况 整个数据库有多大 对象大小TOP10 回收站情况(大小及数量) 查谁占用了undo表空间 查谁占用了temp表空间 观察回滚段,临时段及普通段否是自动扩展 表大小超过10GB未建分区的 分区最多的前10个对象 分区不均匀的表 列数量超过100个或小于2的表 表属性是nologging的 表属性含COMPRESSION的 索引属性含COMPRESSION的 触发器 将外键未建索引的情况列出 热点块(汇总) 热点块(展开,未汇总) 附录:查看session_cached_cursors的参数设置情况,如果使用率为100%则增大这个参数值 附录:供参考的Oracle所有参数"

2. 快速获取SQL运行台前信息

针对具体SQL的调优,执行计划,是重要的武器,往往需要和运行时的统计信息结合一起看,才会更加准确。

P.S. 下面是执行计划获取的几种方法,

一个执行计划异常变更的案例 - 外传之查询执行计划的几种方法

3. 快速获取SQL关联幕后信息

得到SQL信息,可能需要确认和这条SQL关联的表、索引等的信息,辅助问题的判断。

为了一键得到2和3的情况,执行spoolsql.sql脚本(链接:https://github.com/liangjingbin99/shouhuo/blob/master/%E7%AC%AC02%E7%AB%A0/spoolsql.sql),输入要检索的sql_id,通过spool得到输出结果,如下,sql_id是7ng34ruy5awxq的SQL,文件名为7ng34ruy5awxq.html,

640?wx_fmt=png
640?wx_fmt=png

通过这两个脚本,一键生成数据库、SQL相关的统计信息,非常方便,当然,了解脚本的原理,可以让我们更有针对性地使用这些脚本,甚至改造脚本,从中借鉴学习,转化为自己的知识体系,对于个人的成长,这才是最重要的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年03月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档