اوراکل 23ai – مشاهده سابقه دسترسی به جداول

از اوراکل 23ai ویوی جدیدی به نام [dba|all|user]_table_access_stats ارائه شد که بر اساس آن می توان سابقه دستیابی به جداول و پارتیشنها را مشاهده کرد. هر جدول و یا پارتیشن در هر instance چند بار scan شده و تاریخ آخرین دسترسی به جدول در چه زمانی بوده است.

SQL> create table jadval(id number,name varchar2(100), last_name varchar2(100));
Table created.
SQL> insert into jadval values(1,'payan','rafat');
1 row created.
SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
no rows selected
SQL> select * from jadval;
        ID NAME    LAST_NA
---------- ------- -------
         1 payan   rafat
SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
---------- --------------- ----------- ---------- -------------------------
JADVAL                               1          2 01-JAN-25 08.27.33 AM
SQL> select * from jadval;
        ID NAME    LAST_NA
---------- ------- -------
         1 payan   rafat
SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
---------- --------------- ----------- ---------- -------------------------
JADVAL                               1          3 01-JAN-25 08.28.25 AM

در صورت بروزرسانی آمارهای جدول هم به تعداد read count اصافه می شود:

SQL> exec dbms_stats.gather_table_stats(ownname => 'USEF',tabname => 'JADVAL');
PL/SQL procedure successfully completed.

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
---------- --------------- ----------- ---------- -------------------------
JADVAL                               1          4 01-JAN-25 08.36.27 AM

در ادامه جدول دیگری که دیتای بیشتری دارد را ایجاد می کنیم و با ساخت ایندکسی بر روی یکی از ستونهای آن، تاثیر ایندکس را در خروجی این ویو بررسی می کنیم.

 SQL> create table jadval_source as select * from dba_source;
Table created.
SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
no rows selected

SQL> create index indTYPE on jadval_source(TYPE);
Index created.

با ایجاد ایندکس روی این جدول، read time جدول یک عدد اضافه خواهد شد:

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NA INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- ------------ ----------- ---------- -------------------------
JADVAL_SOURCE                          1          1 01-JAN-25 09.06.01 AM

اما در صورتی که به ایندکس به صورت INDEX RANGE SCAN رجوع شود، تاثیری در read count جدول نخواهد داشت:

SQL> select count(*) from JADVAL_SOURCE where TYPE='PACKAGE';
  COUNT(*)
----------
         241717

SQL> select count(*) from JADVAL_SOURCE where TYPE='PACKAGE';
  COUNT(*)
----------
         241717

SQL> select count(*) from JADVAL_SOURCE where TYPE='PACKAGE';
  COUNT(*)
----------
         241717

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- --------------- ----------- ---------- -------------------------
JADVAL_SOURCE                             1          1 01-JAN-25 09.06.01 AM

همچنین برای TABLE ACCESS BY INDEX ROWID BATCHED هم به تعداد read count اضافه نخواهد شد:

SQL> select line  from JADVAL_SOURCE where TYPE='PACKAGE' and rownum=1;

SQL> select line  from JADVAL_SOURCE where TYPE='PACKAGE' and rownum=1;
      LINE
----------
         1

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- --------------- ----------- ---------- -------------------------
JADVAL_SOURCE                             1          1 01-JAN-25 09.06.01 AM

این مسئله برای جداول پارتیشن بندی شده هم به صورت زیر است:

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- --------------- ----------- ---------- -------------------------
JADVAL_PARTS    PARTITION1                1          1 01-JAN-25 08.42.30 AM
JADVAL_PARTS    PARTITION2                1          1 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P602                  1          2 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P603                  1          1 01-JAN-25 08.42.30 AM

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- --------------- ----------- ---------- -------------------------
JADVAL_PARTS    PARTITION1                1          3 01-JAN-25 08.45.30 AM
JADVAL_PARTS    PARTITION2                1          1 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P602                  1          2 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P603                  1          1 01-JAN-25 08.42.30 AM

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select count(*) from JADVAL_PARTS partition(PARTITION1);
  COUNT(*)
----------
         0

SQL> select TABLE_NAME,PARTITION_NAME,INSTANCE_ID,READ_COUNT,LAST_ACCESSED_TIME from user_table_access_stats;
TABLE_NAME      PARTITION_NAME  INSTANCE_ID READ_COUNT LAST_ACCESSED_TIME
--------------- --------------- ----------- ---------- -------------------------
JADVAL_PARTS    PARTITION1                1          8 01-JAN-25 08.46.28 AM
JADVAL_PARTS    PARTITION2                1          1 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P602                  1          2 01-JAN-25 08.42.30 AM
JADVAL_PARTS    SYS_P603                  1          1 01-JAN-25 08.42.30 AM

ویوی v$table_access_stats هم مشابه همین اطلاعات را برمی گرداند.

 

 

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *