原文:PL/SQL lock timer

定义:PL/SQL lock timer等待事件(Wait-Event)表示用户(应用)通过调用USER_LOCKER.SLEEP或者DBMS_LOCK.SLEEP 存储过程需要消耗的总的睡眠时间。

通过研究Oracle等待事件,我们发现这些事件的大部分(lion’s share)时间都花在那些消耗系统资源或者用户(应用)的争用上。
这些资源包括额外的(excessive)CUP,内存,磁盘的使用,那些用于ORACLE内部结构的事件,如latchs或者quences也是关注的重点。
就像这个名字所说的那样:Wait-Event,用户(或者应用)在等待某些事情完成,然后继续它们的工作。系统资源的争用会降低ORACLE
及时处理SQL的能力,这些需要使用资源的等待最终导致应用处理时间的累积。

还有一类等待事件被称为空闲等待事件(idel events)。这些事件并不是真正的在等待资源的使用,而是在进行应用所要求的等待。
很多oracle 性能优化者甚至都不会去看这些空闲等待时间,因为这些事件更本不会消耗系统资源,当然也不会降低Oracle事务处理能力。
甚至有些人认为这些空闲等待事件更本没有任何有用的信息。其实,这并不完全正确。以”SQL*Net message from client”为例,
这个空闲等待时间并不会降低ORACLE的事务处理性能,但是这意味着比较差的客户端响应。

空闲等待事件”PL/SQL lock timer”是一个值得我们注意的事件,因为它意味着应用的响应时间,吞吐量。甚至有可能是编码有问题。
“PL/SQL lock timer” 事件是由应用程序所要求的等待,这个时候应用程序并没有做任何工作。这就意味着,如果应用程序睡眠5分钟,
那么对客户端的响应或者完成应用程序的运行至少要等待5分钟。

虽然这个事件并不要求系统资源,不是一个oracle资源争用的问题,但是有我们有必要给用户提供具有快速响应能力的应用。
在大多数情况下,睡眠(sleep)被放在应用中用于事务的串行化处理或者放在队列中直到等待的事情发生。我们需要知道为什么应用需要睡眠(sleep),
是否有可以替代的方法。如果能用触发某个事件的办法来替代等待事件,那么你将可以获得更快的响应。

如何查看PL/SQL lock timer 事件

让当前SESSION 等待5秒

1
SQL> execute sys.dbms_lock.sleep(5);

查看当前正在使用SLEEP命令的SESSION。注意在V$SESSION 视图中的P1列不是代表SESSION已经睡眠的时间而是指这个SESSION将要持续的睡眠时间。
这个列的单位是厘秒(centiseconds),因此5秒在就被转换为500厘秒。

1
SQL> SELECT osuser,event,p1 FROM v$session WHERE event='PL/SQL lock timer'

如果你想看某个等待事件已经等待的累计实际,你可以查看V$SYSTEM_EVENT视图。注意,这个视图的等待时间单位也是厘秒。而且你可以发现实际等待
的时间可能比期望的要多。

1
SQL> SELECT time_waited FROM v$system_event WHERE event='PL/SQL lock timer';

结论
即便”PL/SQL lock timer”等待事件被视为一个空闲事件,如果应用在等待这个事件的话,终端用户也不得不等待。DBA的职责是通过减少应用所运行的时间
来增加ORACLE 引擎的吞吐量。不管应用是的等待时间是花在一个空闲事件还是花在资源的等待方面。我们需要找出这些等待事件,评估它们对系统带来的影响,
提供一个可以被用户接受的数据库系统环境。

Popularity: 41% [?]