Oracle 21c 新特性 MAX_IDLE_BLOCKER_TIME参数




  • MAX_IDLE_BLOCKER_TIME 设置持有所需资源的会话在成为终止候选者之前可以空闲的分钟数。

    MAX_IDLE_TIME 为所有空闲会话设置限制,而 MAX_IDLE_BLOCKER_TIME 仅为消耗资源的空闲会话设置限制。 MAX_IDLE_TIME 对于连接池来说可能是有问题的,因为它可能会不断地尝试重新创建由该参数终止的会话。

    MAX_IDLE_BLOCKER_TIME 参数介绍

    此页面提供有关用于影响会话行为的新初始化参数 MAX_IDLE_BLOCKER_TIME 的更多详细信息。

    在 Oracle Database 19c 中,您可以指定会话可以处于空闲状态的时间量,之后会话将被终止。 您可以通过设置来定义最大会话空闲时间:

    以秒为单位的 MAX_IDLE_TIME 资源计划指令。 默认值为 NULL,表示无限制。

    SQL> EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE (PLAN             => 'DAYTIME', -
    GROUP_OR_SUBPLAN => 'REPORTING', -
    MGMT_P1         => 15, -
    MAX_IDLE_LIMIT   => 600)

    MAX_IDLE_TIME 初始化参数,以分钟为单位。 默认值 0 表示没有限制。 您还可以通过设置指示阻塞会话的最大会话空闲时间的 MAX_IDLE_BLOCKER_TIME 资源计划指令,指定更严格的空闲时间限制,该限制仅适用于空闲消耗资源并因此阻塞其他会话的会话。 默认值为 NULL,表示无限制。

    Oracle Database 21c 允许您设置 MAX_IDLE_BLOCKER_TIME 初始化参数来定义阻塞会话的最大会话空闲时间,以分钟为单位。 默认值 0 表示没有限制。

    实践: 使用 the MAX_IDLE_BLOCKER_TIME 参数

    概述 此实践展示了如何使用新的 MAX_IDLE_BLOCKER_TIME 初始化参数终止阻塞会话。

    在开始任何新的实践之前,请参阅实践环境建议。

     

    第 1 步:使用两个会话设置环境 准备两个终端会话,一个以 HR 身份登录到 PDB21,另一个以 SYSTEM 身份登录到 PDB21。

    $ sqlplus system@PDB21
    Copyright (c) 1982, 2019, Oracle. All rights reserved.

    Enter password:

    Connected to:

    SQL> SET SQLPROMPT "SQL system> "
    SQL system>

     

    以 HR 身份登录 PDB21

    $ sqlplus hr@PDB21
    Copyright (c) 1982, 2019, Oracle. All rights reserved.

    Enter password:

    Connected to:

    SQL> SET SQLPROMPT "SQL hr> "
    SQL hr>
    SQL>

     

    第 2 步:将 MAX_IDLE_BLOCKER_TIME 设置为两分钟 在 SYSTEM 会话中,将 MAX_IDLE_BLOCKER_TIME 初始化参数设置为两分钟。

    SQL system> ALTER SYSTEM SET max_idle_blocker_time=2;

    System altered.

    SQL system> SHOW PARAMETER max_idle_blocker_time

    NAME                           TYPE       VALUE
    ------------------------------- ----------- ------------------------------
    max_idle_blocker_time           integer     2
    SQL system>

     

    第 3 步:测试 在 HR 会话中,更新员工的工资。

    SQL hr> UPDATE hr.employees SET salary=salary*2;

    107 rows updated.

    SQL hr>

     

    在SYSTEM会话中,将所有员工的佣金百分比设置为0。该语句等待HR在该行上持有的锁资源被释放。

    SQL system> UPDATE hr.employees SET commission_pct=0;

     

    两分钟后,观察语句是否被执行。

    107 rows updated.

    SQL system> COMMIT;

    Commit completed.

    SQL system>

    回到 HR 会话,查询工资更新的结果。

    SQL hr> SELECT salary FROM hr.employees;
    SELECT salary FROM hr.employees       *
    ERROR at line 1:
    ORA-03113: end-of-file on communication channel
    Process ID: 32314
    Session ID: 274 Serial number: 8179

    SQL hr> EXIT

    Speak Your Mind

    *

    京ICP备14059771号-2