دو راهکار برای اجرای سریع تر shutdown immediate

همانطور که می دانید، در هنگام اجرای دستور shutdown immediate، بک گراند پروسس SMON باید تراکنشهای در حال اجرا را rollback کند و همچنین این بک گراند پروسس، Temporary segmentها را در صورت وجود پاکسازی کند.

برای تسریع در اجرای دستور shutdown immediate، می توان از طریق eventای؛ SMON را از انجام این دو وظیفه منصرف نمود و انجام آنها را به بعد از استارت بعدی دیتابیس موکول کرد.

به تعویق انداختن پاکسازی Temporary segmentها: این کار با event شماره 10061قابل انجام است.

مثال زیر را ببینید:

–session 1:

SQL> create index indffff on mytbl(id);

Executing

–session 2:

SQL> select  owner, segment_name, segment_type, bytes/1024/1024 size_MB from dba_segments   where segment_type=’TEMPORARY’;

SQL> select pid from v$process where PNAME like ‘%SMON%’;

       PID

———-

        23

SQL> oradebug setorapid 23

Oracle pid: 23, Unix process pid: 6048, image: oracle@ol6 (SMON)

SQL> oradebug event 10061 trace name context forever, level 10

Statement processed.

SQL> shut immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

SQL> select  owner, segment_name, segment_type, bytes/1024/1024 size_MB from dba_segments   where segment_type=’TEMPORARY’;

برای آشنایی بیشتر با این موضوع، می توانید مطلب “SMON در یک نگاه” را مطالعه بفرمایید.

به تعویق انداختن Rollback transaction: در مثال زیر خواهیم دید که می توان SMON را به صورت موقت از انجام عملیات rollback منصرف کرد تا این کار بعد از استارت بعدی دیتابیس انجام شود:

–session 1:

SQL> update mytbl set count=count+10 where id =1 and  rownum<=10000000;

10000000 rows updated.

SQL> select XIDUSN,sid,serial#,USED_UBLK  from v$transaction ,v$session where addr=taddr;

    XIDUSN        SID    SERIAL#  USED_UBLK

———- ———- ———- ———-

        5         748      23424      56332

 

–session 2:

SQL> select pid from v$process where PNAME like ‘%SMON%’;

       PID

———-

        23

SQL> oradebug setorapid 23

Oracle pid: 23, Unix process pid: 23251, image: oracle@ol6 (SMON)

SQL> oradebug event 10061 trace name context forever, level 10

Statement processed.

SQL> shut immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

SQL> select ktuxeusn , ktuxesiz, ktuxesta from x$ktuxe where ktuxecfl = ‘DEAD’ and ktuxesta=’ACTIVE’;

  KTUXEUSN   KTUXESIZ KTUXESTA

———- ———- —————-

         5       8388 ACTIVE

SQL> /

  KTUXEUSN   KTUXESIZ KTUXESTA

———- ———- —————-

         5       5728 ACTIVE

SQL> /

no rows selected

ارتباط با نویسنده مطلب:vahidusefzadeh@ کانال تخصصی اوراکل و لینوکس: OracleDB@

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.