How To Force Direct Path Read for SQL Statements (Doc ID 2426051.1)
In this Document
APPLIES TO:Oracle Database Cloud Schema Service - Version N/A and laterOracle Database Exadata Cloud Machine - Version N/A and later Oracle Cloud Infrastructure - Database Service - Version N/A and later Oracle Database Cloud Exadata Service - Version N/A and later Oracle Database Backup Service - Version N/A and later Information in this document applies to any platform. GOALThere are ways to disable direct path read for SQL statements as follows: However, there are no direct methods to force the direct path read operations which are faster for some SQL statements. Goal of this document is to provide a method to force direct path read for such SQL statements.
SOLUTIONThere are 2 methods to force direct path reads for SQL statements. (i) Check the value of _small_table_threshold parameter in your DB.
SQL> select nam.ksppinm NAME,val.KSPPSTVL VALUE from x$ksppi nam, x$ksppsv val where nam.indx = val.indx and nam.ksppinm = '_small_table_threshold'; (ii) Check the no.of blocks statistics for the table. SQL> SELECT blocks FROM user_tables WHERE table_name = 'TABLE_NAME'; Example: If the blocks from user_tables for the object show 100 and _small_table_threshold is set to 480 then set the blocks statistics manually to 1000 so that it would go for direct path read. (iii) Set the no.of blocks statistics for the tables involved in the SQL manually greater than the "_small_table_threshold" value. SQL> EXEC DBMS_STATS.SET_TABLE_STATS('username','tabname',numblks=>n); Example: SQL> EXEC DBMS_STATS.SET_TABLE_STATS(user,'TEST',numblks=>1000);
NAME VALUE DESCRIPTION
-------------------------------------------------- -------- ---------------------------------------------------------- _direct_read_decision_statistics_driven TRUE enable direct read decision based on optimizer statistics |