Pular para o conteúdo principal

Invisible Indexes

11G has a new feature called Invisible Indexes. An invisible index is invisible to the optimizer as default.
Using this feature we can test a new index without effecting the execution plans of the existing sql statements or we can test the effect of dropping an index without dropping it.

SQL> create table teste_ii (a number, b varchar2(10));

SQL> create index idx_invisible on teste_ii(id);

begin
for i in 1..20
loop
insert into teste_ii(a,b) values(i,'TESTE'||i);
end loop;
end;
/
commit;

SQL> select * from teste_ii where a=10;
A B
---------- ----------
10 TESTE10

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> sELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 726495292
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTE_II | 1 | 10 | 2 (0
|* 2 | INDEX RANGE SCAN | IDX_INVISIBLE | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"=10)

Set index to invisible:
SQL> alter index denilson.idx_invisible invisible;
Index altered

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2149228497
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 4 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| TESTE_II | 1 | 10 | 4 (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("A"=10)


Force the optmizer to get the index in the your session:
SQL> ALTER SESSION SET OPTIMIZER_USE_INVISIBLE_INDEXES = true;
Session altered

The index still invisible.

SQL> select index_name,table_name,status,VISIBILITY from user_indexes where index_name = 'IDX_INVISIBLE';
INDEX_NAME TABLE_NAME STATUS VISIBILITY
--------------------------- ----------------------- ----------- ----------
IDX_INVISIBLE TESTE_II VALID INVISIBLE

SQL> explain plan for
2 select * from teste_ii where a=10;
Explained

SQL> SELECT * FROM TABLE(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 726495292
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 10 | 2 (0
| 1 | TABLE ACCESS BY INDEX ROWID| TESTE_II | 1 | 10 | 2 (0
|* 2 | INDEX RANGE SCAN | IDX_INVISIBLE | 1 | | 1 (0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("A"=10)

Comentários

Postagens mais visitadas deste blog

Webcenter Content - Cache Configuration for JdbcFileStore configuration

The configuration values below, control the temporarily cached files keep in FileCache table. FsCacheThreshold Specifies the maximum cache size, in megabytes (default=100) Once the threshold is met, Content Server starts deleting files that are older than the minimum age, as specified by the FsMinimumFileCacheAge parameter FsMaximumFileCacheAge The age at which files are deleted, expressed in days. The default is 365 days FsMinimumFileCacheAge The minimum age at which cached files can be deleted This parameter is used in conjunction with the FsCacheThreshold parameter to determine when to delete cached files FsCleanUpCacheDuringIndexing This parameter activates vault cache cleaning, while FsCacheThreshold, FsMaximumFileCacheAge and FsMinimumFileCacheAge are controling its behaviour.  Expect, when this is enabled on a system that currently has a large number of files in the FileCache table, the first cycle will take a long time to complete. How to Confi...

Assign Backup Policy for Boot and Block Volumes - OCI

To get Availability Domain oci iam availability-domain list  #!/bin/bash OCI_AD="hQsi:SA-SAOPAULO-1-AD-1" OCI_COMPARTMENT="ocid1.compartment.oc1..aaaaaaaavgyjpoffz5qliieawamjaksfb6juxejurtduclqjkvv66ookcxja" #Get Silver policy ocid funct_get_policy(){ OCI_POL_OCID=$(oci bv volume-backup-policy list | jq -r '.data[] | select(."display-name"|contains("silver"))' | jq -r '.id') } funct_boot_vol (){ #Create a file with all boot volume ocid oci bv boot-volume list --availability-domain ${OCI_AD} -c  ${OCI_COMPARTMENT} | jq -r '.data[].id' > boot-vol.txt while IFS="" read -r p || [ -n "$p" ] do   printf 'Seeting backup policy for %s\n' "$p"   oci bv volume-backup-policy-assignment create  --asset-id  $p  --policy-id ${OCI_POL_OCID} done < boot-vol.txt } funct_block_vol (){ #Create a file with all block volume ocid oci bv volume list  -c ${OCI_COMPARTMENT} | jq -r '.data[].id' ...

Configurar Tamanho de UNDO e tempo de RETENÇÃO (UNDO_RETENTION)

-- Tamanho Undo Atual SELECT SUM(a.bytes) "UNDO_SIZE" FROM v$datafile a, v$tablespace b, dba_tablespaces c WHERE c.contents = 'UNDO' AND c.status = 'ONLINE' AND b.name = c.tablespace_name AND a.ts# = b.ts#; -- Blocos de UNDO por Seg. SELECT MAX(undoblks/((end_time-begin_time)*3600*24)) "UNDO_BLOCK_PER_SEC" FROM v$undostat; --Tamanho do Bloco SELECT TO_NUMBER(value) "DB_BLOCK_SIZE [KByte]" FROM v$parameter WHERE name = 'db_block_size'; -- Select calcula UNDO RETENTION SELECT d.undo_size/(1024*1024) "ACTUAL UNDO SIZE [MByte]", SUBSTR(e.value,1,25) "UNDO RETENTION [Sec]", ROUND((d.undo_size / (to_number(f.value) * g.undo_block_per_sec))) "OPTIMAL UNDO RETENTION [Sec]" FROM ( SELECT SUM(a.bytes) undo_size FROM v$datafile a, v$tablespace b, dba_tablespaces c WHERE c.contents = 'UNDO' ...