1 / 25

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

Oracle 11g Results Cache Dean Richards Senior DBA, Confio Software. 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

adler
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oracle 11g Results CacheDean Richards Senior DBA, Confio Software

  2. 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

  3. 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

  4. 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

  5. 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

  6. Server Result Caches • Stores Results of Query or Function Call • Uses a Slice of the Shared Pool • Not Affected by Flushing Shared Pool

  7. 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)

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. MEMORY_REPORT SET SERVEROUTPUT ON EXECUTE DBMS_RESULT_CACHE.MEMORY_REPORT R e s u l t C a c h e M e m o r y R e p o r t [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

  14. 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

  15. 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

  16. 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

  17. 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;

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. Ignite for Oracle 40% Improvement

More Related