Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
105 views

Oracle 11g Results Cache: Dean Richards Senior DBA, Confio Software

This document provides an overview of Oracle 11g's result cache feature. It discusses how the result cache can dramatically improve performance by caching and reusing the results of SQL queries and PL/SQL functions. The document covers configuration parameters, usage guidelines, and system views for monitoring the result cache. It also addresses limitations and restrictions of the result cache.

Uploaded by

chandu208
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
105 views

Oracle 11g Results Cache: Dean Richards Senior DBA, Confio Software

This document provides an overview of Oracle 11g's result cache feature. It discusses how the result cache can dramatically improve performance by caching and reusing the results of SQL queries and PL/SQL functions. The document covers configuration parameters, usage guidelines, and system views for monitoring the result cache. It also addresses limitations and restrictions of the result cache.

Uploaded by

chandu208
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 25

Oracle 11g Results Cache

Dean Richards
Senior DBA, Confio Software

1
Who Am I?

 Senior DBA for Confio Software


• DeanRichards@confio.com
 20+ Years in Oracle, SQL Server
 5+ Years in Oracle Consulting - SPG
 Specialize in Performance Tuning
 Review Performance of 100’s of Databases for
Customers and Prospects

2
Example

SELECT /*+ result_cache */ state, sum(order_total)


FROM order_history
WHERE order_date BETWEEN ’1-JAN-09’ AND ’1-JAN-10’
GROUP BY state

First Execution
Elapsed: 00:03:42.96

Statistics
----------------------------------------------------------
824825 consistent gets
824791 physical reads

Second Execution
Elapsed: 00:00:00.10

Statistics
----------------------------------------------------------
0 consistent gets
0 physical reads

3
Execution Plan

Execution Plan
----------------------------------------------------------
Plan hash value: 47235625

--------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 44 | 396 | 6854 (2)| 00:01:23 |
| 1 | RESULT CACHE | 7zvt0xan8bw0pgry071f7mt85s | | | | |
| 2 | HASH GROUP BY | | 44 | 396 | 6854 (2)| 00:01:23 |
| 3 | TABLE ACCESS FULL| T | 1739K| 14M| 6802 (1)| 00:01:22 |
--------------------------------------------------------------------------------------------------

Result Cache Information (identified by operation id):


------------------------------------------------------

1 - column-count=2; dependencies=(PROD.ORDER_HISTORY); parameters=(nls);


name=“SELECT /*+ result_cache */ state, sum(order_total) FROM order_history GROUP BY state”

SELECT ID, TYPE, CREATION_TIMESTAMP, BLOCK_COUNT, COLUMN_COUNT, PIN_COUNT, ROW_COUNT


FROM V$RESULT_CACHE_OBJECTS
WHERE CACHE_ID = '7zvt0xan8bw0pgry071f7mt85s';

ID TYPE CREATION_ BLOCK_COUNT COLUMN_COUNT PIN_COUNT ROW_COUNT


-- ------ ---------- ----------- ------------ --------- ---------
2 Result 06-JAN-10 1 2 0 12

4
Oracle 11g Result Caches

 New in Oracle 11g, Improved in 11gR2


• SQL Query Results (local and distributed)
• PL/SQL Function Results
• OCI Client Results
 Cached Data is shared across executions
 Automatically marked stale if underlying data
is changed
 Can Dramatically Increase Performance

5
Server Result Caches

 Stores Results of Query or Function Call


 Uses a Slice of the Shared Pool
 Not Affected by Flushing Shared Pool

6
Parameters

 RESULT_CACHE_MODE
• MANUAL (default) – requires a query hint or table annotation
• FORCE – every result set is cached. Not recommended
because it can create significant performance and latching
overhead
• AUTO??? – more about this option
 RESULT_CACHE_MAX_SIZE
• Amount of memory allocated to server result cache
• 0 (Disabled), 0.25% (memory_target), 0.5% (sga_target)
and ~1% (shared_pool_size)
 RESULT_CACHE_MAX_RESULT
• Amount of memory for a single result set
• 5% (Default)

7
AUTO Mode Not Supported

 Oracle Error Says AUTO Mode is Supported


SQL> alter system set result_cache_mode=incorrect;
alter system set result_cache_mode=incorrect
*
ERROR at line 1:
ORA-00096: invalid value INCORRECT for parameter
result_cache_mode, must be
from among FORCE, MANUAL, AUTO

 Many notes in blogs, etc that say AUTO mode is not


supported and probably never will

8
Using Result Cache

 Database Setting
result_cache_mode = FORCE (not recommended)
 Query Hint
select /*+ result_cache */ rep_name, sum(order_total)
from orders
group by rep_name
 Table Annotation Mode
alter table order_history result_cache (mode force)
 Session Mode
alter session set result_cache_mode = force

9
Queries that Benefit

 Access Large Amount of Data


 Return Few Rows
 Execute Somewhat Frequently
 Based on Slowly Changing Data
 Limited Number of Bind Values
• Results are cached by Bind Value

10
Restrictions

 Will Not Work With


• Temporary tables
• SYS or SYSTEM tables
• Sequences (NEXTVAL or CURRVAL)
• Date/Time Functions – SYSDATE, CURRENT_DATE,
SYS_TIMESTAMP, CURRENT_TIMESTAMP, etc
• USERENV / SYS_CONTEXT (with non-constant variables)
• SYS_GUID
 Query must retrieve the most current committed state
of the data
• No Active Transaction Against Objects in Current Session

11
DBMS_RESULT_CACHE

 BYPASS
• Disables result cache database-wide
 FLUSH
• Flushes all objects from result cache
• Note: flushing shared pool has no affect
 MEMORY_REPORT
• Nice report that shows usage of result cache
 STATUS
• ENABLED or NOT ENABLED
 INVALIDATE
• Invalidate contents of the result cache
 INVALIDATE_OBJECT
• Invalidates contents that rely on object passed in

12
MEMORY_REPORT
SET SERVEROUTPUT ON
EXECUTE DBMS_RESULT_CACHE.MEMORY_REPORT
Result Cache Memory Report
[Parameters]
Maximum Cache Size = 950272 bytes (928 blocks)
Maximum Result Size = 47104 bytes (46 blocks)
[Memory]
Total Memory = 46340 bytes [0.048% of the Shared Pool]
... Fixed Memory = 10696 bytes [0.011% of the Shared Pool]
... State Object Pool = 2852 bytes [0.003% of the Shared Pool]
... Cache Memory = 32792 bytes (32 blocks) [0.034% of the Shared Pool]
....... Unused Memory = 30 blocks
....... Used Memory = 2 blocks
........... Dependencies = 1 blocks
........... Results = 1 blocks
............... SQL = 1 blocks
13
System Views

 V$RESULT_CACHE_STATISTICS
• How well is the cache doing?
• Monitor CREATES vs. FINDS
 V$RESULT_CACHE_MEMORY
• Memory components and statistics
 V$RESULT_CACHE_OBJECTS
• Objects that are in the cache along with attributes
 V$RESULT_CACHE_DEPENDENCY
• Dependencies of the results in cache

14
V$RESULT_CACHE_STATISTICS

ID NAME VALUE
--- ------------------------------ ------
1 Block Size (Bytes) 1024
2 Block Count Maximum 1856
3 Block Count Current 32
4 Result Size Maximum (Blocks) 92
5 Create Count Success 5
6 Create Count Failure 0
7 Find Count 3100016
8 Invalidation Count 0
9 Delete Count Invalid 0
10 Delete Count Valid 0
11 Hash Chain Length 1

15
Remote Result Sets

 RESULT_CACHE_REMOTE_EXPIRATION
• Expiration time (minutes) for results that depend
on remote database objects
• 0 (Default, Disabled)
 DML on Remote Database does not Invalidate
the local results cache
 Must be Careful of Stale Results

16
PL/SQL Function Result Cache

 Stores Results of Function by Parameter


 Automatically Refreshed Based on Object Usage
 Enabled Using “result_cache” Option
create or replace function state_sales_totals (p_state in varchar2)
return number result_cache as
l_order_total number;
begin
select sum(order_total) into l_order_total from orders
where to_number(order_date,'YYYYMM') between 200901 and 200903
and state = p_state;
return l_order_total;
end;

17
Benefits and Restrictions

 Similar Benefits as SQL Query Results Cache


 Works for Recursive Function Calls
 Restrictions
• No invoker’s rights or anonymous block
• No pipelined table function
• Does not reference dictionary tables, temporary segments,
sequences or non-deterministic SQL functions
• Has no OUT or IN OUT parameters
• No IN parameters of type BLOB, CLOB, NCLOB, REF
CURSOR, Collection, Object, Record
• The Return Type is not a BLOB, NCLOB, REF CURSOR,
Object, Record or collection using one of these

18
OCI Client Cache

 Must use an OCI driver that Supports Results Cache


 Must use 11g client and 11g server
 Shared by All Sessions in Client Process
 Subqueries and Query Blocks are not Cached
 Database will Invalidate Client Result Cache
 Independent of Server Result Cache
19
Parameters and Views

 CLIENT_RESULT_CACHE_SIZE
• Maximum size of client result cache
• 0 – 32767 (Disabled)
 CLIENT_RESULT_CACHE_LAG
• 3000 ms (Default)
• Forces next statement execution to check for validations
 Optional Client Parameter File (SQLNET.ORA)
Overrides Database Parameters
• OCI_RESULT_CACHE_MAX_SIZE
• OCI_RESULT_CACHE_MAX_RSET_SIZE (bytes)
• OCI_RESULT_CACHE_MAX_RSET_ROWS

20
Views

 CLIENT_RESULT_CACHE_STATS$
• One row for every client using Result Cache
• Cache Settings and Statistics
 DBA_TABLES, ALL_TABLES, USER_TABLES
• Column to show if FORCE has been used

21
CLIENT_RESULT_CACHE_STATS$

NAME VALUE CACHE_ID


------- ----- --------
Block Size 256 124
Block Count Max 256 124
Block Count Current 128 124
Hash Bucket Count 1024 124
Create Count Success 10 124
Create Count Failure 0 124
Find Count 12 124
Invalidation Count 8 124
Delete Count Invalid 0 124
Delete Count Valid 0 124

SELECT * FROM GV$SESSION_CONNECT_INFO WHERE CLIENT_REGID = <cache_id>;

 Look for high values of Find Count


 Look for low values
• Create Count Failure
• Delete Count Valid

22
11g R1 vs. R2

 R1 Memory Grows to Maximum Size but does


not Automatically Free Memory
• DBMS_RESULT_CACHE.FLUSH
 Latching Issues in R1
• R1 Result Cache controlled by one latch
• R2 controlled by many latches
 Better Table Annotation Support
• PL/SQL required the RELIES_ON clause which is
deprecated in R2
• OCI Client Result Cache now supports table
annotation

23
Confio Software

 Developer of Wait-Based Performance Tools


 Igniter Suite – Web Based and Agentless
• Ignite for Oracle, SQL Server, DB2, Sybase
 Helps Identify Queries that may benefit from
using Results Cache
 Based in Colorado, worldwide customers
 Free trial at www.confio.com

24
Ignite for Oracle

40%
Improvement

25

You might also like