از اوراکل 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 هم مشابه همین اطلاعات را برمی گرداند.