Andy Zhang

Recent Blogs

一条SQL语句究竟会产生多少个并行进程?

有一些数据库性能问题可能是因为同时启动的并行进程过多造成的,特别常见于RAC节点重启,很多时候是因为瞬间启动了几百个并行进程,导致OS各项指标“彪高”,后台进程失去响应。最近遇到的一个,是因为SQL语句中写了/*+ parallel a,8*/ ,但是在RAC的两个节点上各启动了512个并行进程,一共启动了1024个并行进程,导致网络心跳丢失。因为问题可以通过执行这个语句重现,而使用parallel_force_local=true可以workaround这个问题,所以基本可以确定是跨节点并行导致的。 抛开这个问题背后的其他因素不谈,我们单来讨论一下:一条SQL语句究竟会产生多少个并行进程? ...

pga_aggregate_target 和_pga_max_size 都不能绝对限制实际PGA的使用

和sga_target不同,pga_aggregate_target并不能限制PGA的大小。 另一个差别是,SGA是数据库启动时按照sga_max_size预先分配的,而PGA则是“按需分配”的。 以下详细解释下,为什么pga_aggregate_target并不能限制PGA的大小。一般的文档会把PGA分为stack space和UGA两个部分,但这种提法太笼统,不利于我们理解这个问题。我们把它分为work area和work area之外的部分。 所谓work area,就是session要执行SQL,需要在数据库内部分配的,为了存放中间结果的内存。 比如sort area,为了排序用的内存...

几种常见的library cache lock产生的原因

常见的library cache lock产生的原因在《高级OWI与Oracle性能调查》这本书和下面这个文档中有一般性的描述: Troubleshooting Library Cache: Lock, Pin and Load Lock (Doc ID 444560.1) 一般可以理解的是alter table或者alter package/procedure会以X模式持有library cache lock,造成阻塞。 但是常见的问题还有以下几种原因: 1)错误的用户名密码: 一般需要通过ASH或者SSD/hang analyze去获取p3进行namespace分析。 1. event: ...

Receive the latest blog updates