X

Author Profile

Feng Gao

Recent Posts by Feng Gao

只对某个特定的SQL语句开启10046 trace

最近碰到了这样一个有趣的问题: 有一条SQL语句,大部分时间它的执行时间是几十个毫秒; 但是偶尔某次的执行时间会长于2秒钟。因为应用对这个语句的执行时间非常的敏感,我们必须诊断是因为什么原因导致它偶尔执行时间长于2秒。 这个问题为什么会有挑战性呢?因为我们很难收集慢的时候的10046 trace:首先我们不知道这个问题什么时候会发生,也不知道会在哪个session里发生。如果对所有的session全天开启10046 trace, 会产生很多比较大的trace并影响数据库整体的性能。 好在这个数据库是11g的,在11g中event++的特性允许我们只对某个特定的SQL收集10046 trace. 即在运行这条SQL时开启10046 trace,在这条SQL运行完之后关闭10046 trace.这样可以显著的降低生成的trace的大小。但是因为我们无法确定哪个session会产生问题,所以只要运行过这个SQL的session都会产生一个trace文件。 开启的步骤是(要把下面的awsh60c8mpfu1替换成那条SQL的SQL_ID): alter system...

如何分析发生在过去的数据库性能问题

在数据库运行的过程中,我们有时会碰到数据库hung住的问题,在这个时候很多人会选择尽快让它恢复正常而不是找出问题的root cause. 只有在问题被解决后,才意识到需要找到root cause来避免再次碰到相同的问题; 下面就讲讲如何分析发生在过去的数据库性能问题 (这是一篇讲方法论的blog,并没有涉及到具体的案例, 稍后会有更多具体案例的Blog) 1.       首先要申明的是, 对于这样的问题,我们需要有一个正确的期望: 不一定能够找到root cause, 这取决于发生问题时是否收集到了足够的信息. 2.       梳理我们可以收集到的信息, 一般的可以先检查下面的日志 a)       操作系统日志, 参照文档 note 1349613.1 - How To Gather The OS Logs For Each Specific OS Platform b)       数据库alert log c)       操作系统resource(CPU, memory, IO, swapping)使用的状况, 推荐使用OSWbb...

高并发高负载情况下常见的3种性能问题

前言 这篇blog是基于处理oracle数据库性能问题的经验写就,它是对常见的性能问题做的总结,它的适用范围: 高并发高负载的系统. 需要先申明的是: 对于所有的调优的方法,都是有适用范围的; 所以下面提到的所有的内容,请” 批判性”阅读. 1. OS swapping/paging 引发的数据库concurrency方面的性能问题 Oracle数据库在工作的时候, 对于latch/mutex这样的轻量级的”锁”,我们期望它是可以非常快的获取/释放的(这些操作都是对内存的操作,而内存的操作正常时候也确实都是很快的). 但是如果OS发生了大量的swapping/paging的情况下,那么对内存的操作会变慢,那么latch/mutex的操作就会变慢,在并发大的情况下就会发生hung/slow的情况. 引发swapping/paging的常见情况有: a). 内存短缺 b). 内存并不短缺; 但短时间内, 有大量的新进程分配了很多内存 c). 拷贝大文件/备份数据库 使得操作系统的高速文件缓存突然激增 对应的调优方式: Lock SGA,...

在Linux 64位系统下使用hugepage

首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题。 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中存储了共享的SQL语句及执行计划,buffer pool中存储了数据块。对这些资源的访问,其实就是Oracle使用OS的API来访问内存资源的过程。内存操作理应/通常意义上都是很快的,这时候Oracle数据库可以很正常的工作。 但是 a)如果SGA内的某一部分被swap到硬盘上,那么再次访问它,就需要花非常多的时间 b)如果OS本身的内存非常的大,那么管理/访问到我们需要的内存的过程就需要更长时间。 在这些情况下,我们往往会碰到诸如latch/mutex/library cache lock[pin]/row cache lock的问题. Linux下HugePage 可以解决由以上两种问题引发的性能波动。 我们知道,在Linux 64位系统里面,默认内存是以4K的页面(Page)来管理的,当系统有非常多的内存的时候,管理这些内存的消耗就比较大;而HugePage使用2...

利器OSW (OSWatcher Black Box) 之简介篇

   OSWatcher Black Box, 简称OSW,是oracle提供的一个小但是非常有用的工具,它通过调用OS自己提供的命令来记录OS运行时的一些性能参数,比如CPU/Memory/Swap/Network IO/Disk IO相关的信息。 +++ 为什么一定要部署OSW? OSW并不是强制要部署的,并且有很多工具可以提供一样的功能,比如说mrtg, cacti, sar, nmon, enterprise manger grid control. 但是部署OSW有很多好处: 1. 它比较容易部署,并且容易删除。 2. 资源消耗比较小,不管是从CPU,内存还是磁盘空间来说。 3. 平时不需要维护,并且在发生问题时可以帮我们迅速定位问题是否发生在OS端 数据库是运行在OS之上的,如果OS发生了异常,那么数据库肯定也会受到影响;如果我们仅仅从数据库的角度去分析这样的问题时,很难有个好结果. 在平时的工作中,有一类问题很常见:在过去的某个时间段,数据库发生了一些问题,我们往往要找到问题的原因(root cause),之后才能做某些改动来避免它再次发生。对于...