学习
实践
活动
专区
工具
TVP
写文章
专栏首页bisal的个人杂货铺一篇关于调优的概念性文章

一篇关于调优的概念性文章

今天看了一篇关于调优的概念性文章(61998.1: Introduction to Tuning Oracle7 / Oracle8 / 8i / 9i )。

文章的目的是为了可以快速知晓执行过程中哪里花费了较多的时间,而不是关注不同统计数据的含义。更加关注实际。

1. 为什么需要调优tuning?

        通常我们关注的是用户响应时间或批量作业的处理时间。也许是某天当中若干时间点出现性能问题,或者性能问题一直如此。也许仅仅一些用户函数执行较差,或者所有的函数执行地都慢。大多数系统都是用来服务用户的,如果能从系统的视角理解用户,就需要做出许多工作。

        确信能够从用户视角理解所有问题-花时间向用户了解,确保清楚真实的问题。例如,如果两条大多数普通用户交易都会用到的语句出现了较差的执行计划,就说“系统任何时候都慢”,但是更细致的调查后发现,一些操作却可以获得正常的响应时间,这样的情况屡见不鲜,这就需要我们在工作的过程中,充分从客户的角度了解问题的细节,也要注重客观,这样才能做出一个有说服力的判断。

2. 根据时间来判断性能。

         一旦开始根据响应时间或批处理时间思考性能问题,就可以有基础地判断任何建议的改变所带来的影响。调优的基础就是确定哪里花费的时间需要可以更快。一旦知道了哪里花费了时间,那么就可以判断影响的时间,以及潜在节省的时间。以下四个步骤是可以重复执行的:

1. 确定哪里花费了时间。

2. 挖掘出原因的细节。

3. 尝试各种可以节省时间的方法。

4. 应用这些改变,然后重复第一步。

3. Oracle能够告诉我们哪些关于时间的信息?

         一个客户端应用进程通常与使用半双工协议的Oracle影子进程进行通话。每个影子进程可能是如下三种状态之一:

a. IDLE-等待处理。

b. 运行时代码-例如正在使用CPU或正在运行队列中。

c. 等待-i. 等待一些可利用资源。

             ii. 等待请求的完成。

为了明确以上这些,下面是一些举例:

a. IDLE

用户影子进程正等待数据包,用户需要告诉他们接下来做什么,或者提供信息允许他们继续执行。

b. 运行时代码

进程处于等待使用CPU的运行队列,需要使用CPU资源。但Oracle不知道其正在使用CPU还是仅仅处于运行队列中。

c. i. 等待可利用资源。例如enqueue(锁)或闩。

    ii. 等待事件的完成。例如一次IO读请求,或者等待LGWR完成redo日志的磁盘写。

4. 基础点。

        init.ora参数TIMED_STATISTICS必须设置为TRUE,才能知道上面提到的各种状态所用时间。

        Oracle记录的时间仅精确到10毫秒(1/100秒)。Oracle 9i中的一些时间已经可以支持微秒级。

5. 等待事件。

        仅知道上面三种类别的耗时是不够的,所以Oracle还有一组”等待事件“对应于'a'和'c',记录CPU利用率对应于'b'。用Oracle影子进程生命周期花费的些许时间就可以很好地证明以上说法。

状态 含义

IDLE 等待”SQL*Net message from client“。接收语句请求”parse/execute“的SQL*Net包。

ON CPU 解析SQL*Net包。

WAITING 等待”latch free“获得一个”library cache“闩。

ON CPU 在共享池中搜索SQL语句,找到匹配的,释放闩,建立与共享游标的链接,等等。开始执行。

WAITING 等待”db file sequential read“,因为我们需要一个当前不在buffer cache的数据块。例如:等待一次IO的完成。

ON CPU 读到数据块,开始执行。构建SQL*Net包,将包含第一行数据的信息返回给用户。

WAITING 等待”SQL*Net message to client“确认SQL*Net包已经送达。

IDLE 等待”SQL*Net message from client“进行下一次请求。

        如果我们给以上各步骤分配时间,那么就能得到调优的效果。在独立语句级别,session级别或系统级别,Oracle都能提供一些有用的信息。

实例用时:

V$SESSION

V$SESSION_WAIT

语句级别:

SQL_TRACE or DBMS_SUPPORT.SET_TRACE output

session级别:

SQL_TRACE or DBMS_SUPPORT.SET_TRACE output

V$SESSION_EVENT

V$SESSTAT

系统级别:

V$SYSTEM_EVENT

V$SYSSTAT

6. 时间视角的观点。

        如下SQL提供每个session当前的状态:

SELECT sid, status FROM V$SESSION; 

        可以显示每个session的状态是ACTIVE还是INACTIVE。INACTIVE的session通常正在等待来自客户端的请求。通常我们可以在V$SESSION_WAIT中看到WAIT_TIME参数值是0的”SQL*Net message from client“。

        对于ACTIVE的session:

SELECT sid, wait_time, event FROM V$SESSION_WAIT;

        可以显示实例中每个session状态的时间。

WAIT_TIME 含义

0 当前正在等待特定事件的session。(Oracle 9.0.1版本中,session当前未等待时,VSESSION_WAIT显示 WAIT_TIME是0,但是由于Bug:2117360,可能CPU是有使用的。VSESSION_WAIT.STATE会显示一个 除"WAITING"外的值。)

!=0 正使用CPU的session。列出的事件是session等待的最后一个事件。WAIT_TIME指出session等待最后这个事件的 时间。

-1 session需要等待一小段时间。

-2 不知道等待多久(TIMED_STATISTICS=false)。

>0 以10ms计算的实际等待时间。

        总会有一些session一直使用CPU。如果执行上面的语句,SELECT的结果会显示”on CPU“(WAIT_TIME!=0)。

        如果一个应用使用多个session或执行session转换,那么WAIT_TIME就可能是非0值,但session状态是INACTIVE。这样的sesson通常不是客户端当前的session,所以V$SESSION_WAIT显示session等待的最后事件,但该session当前是INACTIVE状态。

        VSESSION_EVENT和VSYSTEM_EVENT视图显示了session级和系统级中每个等待事件花费的总时间。

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:http://blog.csdn.net/bisal复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • 一篇年薪60万的JVM性能调优文章

    GC 优化的基本原则是:将不同的 GC 参数应用到两个及以上的服务器上然后比较它们的性能,然后将那些被证明可以提高性能或减少 GC 执行时间的参数应用于最终的工...

    李红
  • 一篇文章带你搞定JavaScript 性能调优

    JavaScript 是单线程运行的,所以在在执行效率上并不是很高,随着用户体验的日益重视,前端性能对用户体验的影响备受关注,但由于性能问题相对复杂,接下来我们...

    前端皮皮
  • 一篇文章让你了解Hive调优

    老工在职场多年,从事过海量(PB级)数据的关系型数据库数据处理工作,后由于数据平台升级的要求,将数据迁移到Hadoop集群,做了多年的数据研发和数据产品的研发工...

    Fayson
  • 关于Linux性能调优中IO调优的一些笔记

    「 总感觉当下的生活不是想要的,总感觉一路走下去会是一个讨厌的未来,每天睁眼的一瞬间就是懊悔,昨天又浪费掉了...人生没有意义,但是要努力寻找活着的意义----...

    山河已无恙
  • 性能调优概述,这是一篇最通俗易懂性能调优的总结!

    硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位)。

    小小科
  • 性能调优概述,这是一篇最通俗易懂性能调优的总结!

    精彩早知道 作者概述 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) ...

    小小科
  • 【MySQL性能调优】-关于索引的那些事儿(一)

    数据库和索引的关系就像新华字典和目录的关系一样,索引存在的目的就是为了提高数据查询效率。索引其实就是一种数据结构,存储引擎能通过索引能快速找到你想要的数据。尤...

    MySQL数据库技术栈
  • 关于MySQL schema调优/优化的 23个建议

    11、如果其他数据需要经常需要查询,而 blob/text 不需要,则将 blob/text 数据域其他数据分离

    lyb-geek
  • 很有启发的一篇关于编程的文章

    今天个大家分享一篇关于编程的文章,我读了很有感触。想学编程的伙伴,建议看看。再此我总结四个字——收益匪浅,接下来,正文开始了。

    Python知识大全
  • 关于ElasticSearch性能调优几件必须知道的事

    ElasticSearch是现在技术前沿的大数据引擎,常见的组合有ES+Logstash+Kibana作为一套成熟的日志系统,其中Logstash是ETL工具,...

    大数据技术架构
  • 关于索引扫描的极速调优实战(第一篇) (r3笔记第81天)

    一般在生产环境中,如果某个查询中涉及一个大表,走索引扫描是显然是最值得推荐的方式,但是索引扫描有unique index scan, range scan,sk...

    jeanron100
  • 关于数字证书的另一篇好文章

     最近看会Session hijack的东西,劫持现在已经实现,yahoo等一些没有用Https协议的邮箱被成功地劫持了(迟下发文章),由于对Https不熟悉,...

    java达人
  • 关于Linux性能调优中网络I/O的一些笔记

    带宽(传输速率):数据传输的过程中,两个设备之间数据流动的物理速度称为传输速率,单位为bps(Bits Per Second,每秒比特数),传输速率不是指单位数...

    山河已无恙
  • 介绍一篇关于点云的深度学习的文章-PointNet

    PointNet: Deep Learning on PointSets for 3D Classification and Segmentation

    点云PCL博主
  • 一篇文章回答你关于NVIDIA DLA的所有疑问

    所有 Jetson AGX Orin 和 Orin NX 板以及所有上一代 Jetson AGX Xavier 和 Xavier NX 模块都具有 DLA 内核...

    GPUS Lady
  • 一篇文章解决你所有关于数据分析的问题!

    比如说在生产线上,在生产的数据库里面,各种各样的数据,可能是银行的业务数据,也可能是电信运营商在交换机里面采集下来的数据等等,然后这些生产的数据通过ETL,是英...

    华章科技
  • 看MySQL的参数调优及数据库锁实践有这一篇足够了

    对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立数据库连接池,以提高访问的性能。

    海仔
  • 一次看完28个关于ES的性能调优技巧,很赞,值得收藏!

    因为总是看到很多同学在说Elasticsearch性能不够好、集群不够稳定,询问关于Elasticsearch的调优,但是每次都是一个个点的单独讲,很多时候都是...

    程序员白楠楠

扫码关注腾讯云开发者

领取腾讯云代金券