前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL调优和诊断从哪入手?

SQL调优和诊断从哪入手?

作者头像
SQLplusDB
发布2020-11-12 10:44:11
8780
发布2020-11-12 10:44:11
举报

出品丨TeacherWhat

关键字:Oracle、SQL、调优、诊断、手把手数据库入门、Database

正文约2000字,建议阅读时间5分钟

目录结构:

1. 如何定位SQL问题

2. SQL相关的问题类别

3. 诊断SQL性能问题需要的相关信息

4. 基本信息

5. 获取执行计划的主要方法和工具

本公众号文章仅代表个人观点,与任何公司无关。

SQL调优和诊断(一)概述

本系列文章将介绍Oracle SQL调优和诊断的基本方法和相关工具的使用。

本文作为概要,包括如何定位SQL问题、SQL相关的问题类别以及诊断SQL性能问题需要的相关信息。

如何定位SQL问题

我们在解决SQL相关问题时,需要像解决数据库全体性能问题时一样,自底(OS)向上一步一步进行缩小范围(Narrow Down),做到有的放矢。

个人非常赞同Christian Antognini在其Troubleshooting Oracle Performance一书中介绍的定位过程,如下图:

▲摘自Troubleshooting Oracle Performance, 2nd Edition Christian Antognini

一般情况下,定位过程如下:

代码语言:javascript
复制
1.首先排除数据库以外的因素,总体上查看操作系统层面(OS 、H/W、网络等)、应用层有没有问题

2.如果确定是数据库的问题后,开始进一步缩小范围。

3.查看数据库的总体负载,明确已知条件,进一步进行判断:

    数据库系统级别的问题?
    某个会话(Session)级别的问题?
    某个特定SQL的问题?

4.如果是系统级别的问题,要试图根据已知条件和信息,找到系统中消耗资源最多的SQL。

5.如果是会话级别问题,同样也要根据已知条件和信息,找到消耗资源最多的SQL。
如果不能够定位到SQL级别,尝试从应用层或者全体数据库级别进行调优和诊断。


6.最终定位到某个或某些SQL,利用本章介绍的工具和方法,进行SQL级别调优和诊断。

根据上面的方法,确认是某些SQL后,便可以针对SQL相关的问题进行调优和诊断了。

SQL相关的问题类别

一般来讲,SQL相关的问题可以分为以下几类:

代码语言:javascript
复制
1.SQL编译错误或者其他应用上的错误(如标识符无效:ORA-00904、唯一约束错误ORA-00001等)

2.SQL执行时性能问题

3.SQL执行结果错误

4.其他问题(如由于某些SQL执行导致的ORA-600等错误)

对于【1.SQL编译错误或者其他应用上的错误】,通常是由于某些应用上的问题,在SQL解析或者执行过程中发生,可以根据错误内容和指导内容来进行解决。如:唯一约束错误ORA-00001,可以查看是否有唯一约束例的数据重复等。

代码语言:javascript
复制
$ oerr ora 1
00001, 00000, "unique constraint (%s.%s) violated"
// *Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
// For Trusted Oracle configured in DBMS MAC mode, you may see
// this message if a duplicate entry exists at a different level.
// *Action: Either remove the unique restriction or do not insert the key.

对于一些通过提示信息无法解决的情况下,也可以通过设定ErrorStack等来诊断问题。

具体可参考文章 【基础知识】ORACLE数据库错误概述

对于其他SQL相关问题如:性能问题和结果错误等,我们可以通过取得执行计划等相关信息进一步进行分析。

诊断SQL性能问题需要的相关信息

为了诊断SQL性能问题,我们通常需要取得下面的信息:

基本信息

代码语言:javascript
复制
1.SQL文内容
2.SQL的执行计划
3.SQL trace(10046) 和 Optimizer Trace(10053)
4.优化器的详细信息 (如:CBO/RBO ? 参数设置OPTIMIZER_GOAL / OPTIMIZER_MODE等)

其他信息

有时候根据具体情况,我们可能还需要以下的信息

代码语言:javascript
复制
5.SQL文中使用的表、索引、视图等定义信息,以及收集的统计信息、并行情况、压缩情况等
6.与优化器相关的初始化参数
7.处理的行数和处理时间等
8.应用程序的相关信息。(绑定变量、循环执行、过多的Commit等)
9.重现Case(在别的环境中也可以重现)
10.其他的一些变更信息(如升级到最新版本,修改应用等)

获取执行计划的主要方法和工具

在大多数的情况下,诊断SQL性能问题是由于错误地选择了执行计划导致的问题,所以我们首先了解一下获取执行计划的一些方法和工具。

一般我们可以通过以下的方法和工具,获取SQL的执行计划和执行信息。

代码语言:javascript
复制
・EXPLAIN PLAN
・Autotrace (SQL*PLUS)
・动态视图
・AWR SQL Report
・StatsPack SQL Report
・DBMS_XPLAN
・SQLTXPLAIN(SQLT)
・SQL Tuning Health-Check Script (SQLHC)
・10046/10053 Trace
・Real-Time SQL Monitoring

关于相关信息的详细内容,将在以后的文章中进行介绍。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Oracle数据库技术 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL调优和诊断(一)概述
    • 如何定位SQL问题
      • SQL相关的问题类别
        • 诊断SQL性能问题需要的相关信息
          • 基本信息
          • 其他信息
        • 获取执行计划的主要方法和工具
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档