10G sqlplus result cache
Hi,
we try to write a query to analyze the performance of our database.
The problem now is that the sqlplus or the database caches the results.
We use a 10g and a 11g database
Does anyone know how to do not cache the results
Thanks *T
Re,
thanks for you replay.
We try to understand some performance issues by calling the same sql every 10 minutes and measure
the timings. But if the anther of the database is like zero it make no sense.
May I have an understanding problem here.
If the database gets the same sql statement over and over. I thought the result was cached and the database does not create or use a explain plane. The db did not scan the tables it just read the result from a cache.
Is this right ?
Thanks *T
Similar Messages
-
Query result caching on oracle 9 and 10 vs indexing
I am trying to improve performance on oracle 9i and 10g.
We use some queries that take up to 30 minutes to execute.
I heard that there are some products to cache query results.
Would this have any advantage over using indexes or materialized views?
Does anyone know any products that I can use to cache the results of this queries on disk?
Personally I think that by using the query result caching I would reduce the cpu time needed to process the query.
Is this true?Your message post pushes all the wrong buttons starting with the fact that 9i and 10g are marketing labels not version numbers.
You don't tune queries by spending money and throwing resources at them. You tune them by identifying the problem queries, running explain plans, visualizing their output using DBMS_XPLAN, and addressing the root cause.
If you want help post full version numbers, the SQL statements, and the DBMS_XPLAN outputs. -
Hello everyone,
I have a question regarding the use of the client result cache but first of all here are the informations about my database:
SQL> SELECT * FROM v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
I have installed the Oracle Client Tools on my clientmachine. It has a tnsnames.ora like this:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = FEA11-119SRV)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl.local)
The Client Result Cache is configured in the sqlnet.ora.
ADR_BASE = /u01/app/oracle
OCI_RESULT_CACHE_MAX_SIZE= 2048000
OCI_RESULT_CACHE_MAX_RSET_SIZE = 1024000
NAMES.DIRECTORY_PATH = (EZCONNECT, TNSNAMES, HOSTNAME)
The Databaseserver is configured like that:
SQL> col name format a30
SQL> col value format a30
SQL> SELECT name, value
2 FROM v$system_parameter
3 WHERE name LIKE '%result_cache%';
NAME VALUE
result_cache_mode MANUAL
result_cache_max_size 0
result_cache_max_result 5
result_cache_remote_expiration 0
client_result_cache_size 1073741824
client_result_cache_lag 3000
After configuring client an server I try the followign SQL-Statement on the clientmachine:
sqlplus oracle/password@orcl
set autotrace traceonly explain
SELECT /*+ result_cache */ *
FROM testtable;
SQL
The execution plan show two operations: "SELECT STATEMENT" and "TABLE ACCESS FULL" but no the "RESULT CACHE" operation.
Did I miss something?
Any help would be appreciated
Florian W.result_cache_max_size 0
That means the result cache is disabled. You need to set it to a non-zero value. That is the maximum ammount of memory, in bytes, the database will allocate on the shared pool to dedicate it to the result cache for all requests.
By the way, OCI_RESULT_CACHE_MAX_SIZE is optional. By default the sessions will have the maximum size they can occupy on the cache determined by CLIENT_RESULT_CACHE parameter, the client (OCI) side parameters override that.
result_cache_mode MANUAL
Another thing to consider is RESULT_CACHE_MODE in MANUAL, that will cause only the statements with the RESULT_CACHE hint on it to be cached on the result cache. You can also set result cache to mode FORCE on specific tables with alter table command.
Regards -
If sga_target set explicitly, result cache become disabled
hi all,
I am using 11g R2 and automatic memory management. I realized something. if I explicitly declare sga_target parameter in parameter file, result cache become disabled.
as you know if you use automatic memory management, sga_target is set to 0 automatically already but if I write that to the parameter file than whatever I set for result_cache_max_size parameter, instance always opens with result_cache_max_size=0 (I saw that in alert log).
is there any reason for that ?
here is my pfile contents.
orcl.__db_cache_size=922746880
orcl.__java_pool_size=33554432
orcl.__large_pool_size=16777216
orcl.__oracle_base='C:\app\paranoyakX'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=838860800
orcl.__sga_target=1258291200
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=251658240
orcl.__streams_pool_size=16777216
*.audit_file_dest='C:\app\paranoyakX\admin\orcl\adump'
*.audit_trail='DB_EXTENDED'
*.compatible='11.2.0.0.0'
*.control_files='C:\app\paranoyakX\oradata\orcl\control01.ctl','C:\app\paranoyakX\flash_recovery_area\orcl\control02.ctl'
*.db_16k_cache_size=0
*.db_4k_cache_size=0
*.db_block_size=8192
*.db_domain='oracle.com'
*.db_flashback_retention_target=1000
*.db_keep_cache_size=0
*.db_name='orcl'
*.db_recovery_file_dest='C:\app\paranoyakX\flash_recovery_area'
*.db_recovery_file_dest_size=10737418240
*.diagnostic_dest='C:\app\paranoyakX'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_max_target=34359738368
*.memory_target=2097152000
*.nls_language='TURKISH'
*.nls_territory='TURKEY'
*.open_cursors=300
*.pga_aggregate_target=528482304
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.resource_limit=TRUE
*.undo_tablespace='UNDOTBS1'
*.result_cache_max_size=5000000
*.sga_target=0I would suggest that you pay more attention to documentation and don't jump to conclusion in a haste. Just because the parameter result_cache_max_size is set to 0, it does not mean that the result cache in itself is disabled. This is the maximum size of the result cache. See below,
[oracle@edbar2p0-orcl ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 14 08:35:00 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL> sho parameter result
NAME TYPE VALUE
client_result_cache_lag big integer 3000
client_result_cache_size big integer 0
result_cache_max_result integer 5
result_cache_max_size big integer 1184K
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
SQL> show parameter sga
NAME TYPE VALUE
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 460M
sga_target big integer 0
SQL> set autot trace exp
selSQL> ect /*+ result_cache */ * from scott.dept;
Execution Plan
Plan hash value: 3383998547
| Id | Operation | Name | Rows | Bytes | Cost (
%CPU)| Time |
| 0 | SELECT STATEMENT | | 4 | 80 | 3
(0)| 00:00:01 |
| 1 | RESULT CACHE | 1c13q1afp56bq0jpnmysvywx7g | | |
| |
| 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3
(0)| 00:00:01 |
Result Cache Information (identified by operation id):
1 - column-count=3; dependencies=(SCOTT.DEPT); name="select /*+ result_cache
*/ * from scott.dept"
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing optionsThe value for the result_cache parameter is automatically set by oracle depending on either you have Memory_target/SGA_TARGET or Shared_Pool parameter set. Please see oracle documentation for more information.
HTH
Aman.... -
DB buffer cache vs. SQL query & PL/SQL function result cache
Hi all,
Started preparing for OCA cert. just myself using McGraw Hill's exam guide. Have a question about memory structures.
Actually, DB buffer cache is used to copy e.g. SELECT queries result data blocks, that can be reused by another session (server process).
There is also additional otion - SQL query & PL/SQL function result cache (from 11g), where also stored the results of such queries.
Do they do the same thing or nevertheless there is some difference, different purpose?
thanks in advance...There is also additional otion - SQL query & PL/SQL function result cache (from 11g), where also stored the results of such queries.Result cache located in shared pool.So it is one component of shared pool.When server process execute query(and if you configured result cache) then result will store in shared pool.Then next execution time run time mechanism will detect and consider using result cache without executing this query(if data was not changed this is happen detection time)
Do they do the same thing or nevertheless there is some difference, different purpose?.Buffer cache and result cache are different things and purpose also,but result cache introduced to improve response time of query in 11g(but such mechanism also implemented in 10g subquery execution,in complex query).In buffer cache holds data blocks but not such results.
Edited by: Chinar on Nov 4, 2011 4:40 AM
(Removing lots of "But" word from sentences :-) ) -
I was going through the Result caching feature of Oracle 11g. Just eager to know
What are the differences between this and the DETERMINISTIC option.
If RESULT CACHE...RELIES ON(table/view) is an enhanced feature of the DETERMINISTIC option then what are the limitations of the DETERMINISTIC functions.
Thanks in advanceThe DETERMINISTIC option does not really do anything
except satisfy certain syntax requriements. Then, shouldn't here be any difference?
SQL> set feed 3
SQL> set echo on
SQL> select * from v$version where rownum<=1;
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Prod
SQL> create or replace package p is
2 counter number:=0;
3 end;
4 /
Package created.
SQL> create or replace function determ(p_in varchar2) return number deterministic is
2 begin
3 p.counter := p.counter + 1;
4 if p.counter<=10 then
5 return 0;
6 else
7 return p.counter;
8 end if;
9 end;
10 /
Function created.
SQL>
SQL> create or replace function non_determ(p_in varchar2) return number is
2 begin
3 p.counter := p.counter + 1;
4 if p.counter<=10 then
5 return 0;
6 else
7 return p.counter;
8 end if;
9 end;
10 /
Function created.
SQL>
SQL> create table emp_copy
2 as
3 select emp.*
4 from emp,(select rownum from dual connect by level <=10)
5 ;
Table created.
SQL>
SQL> exec p.counter:=0;
PL/SQL procedure successfully completed.
SQL>
SQL> select ename,determ(ename)
2 from emp_copy
3 where determ(ename)=0;
ENAME DETERM(ENAME)
SMITH 0
ALLEN 0
WARD 0
JONES 0
MARTIN 0
ALLEN 0
WARD 0
JONES 0
MARTIN 0
ALLEN 0
WARD 0
JONES 0
MARTIN 0
ALLEN 0
WARD 0
JONES 0
16 rows selected.
SQL>
SQL> exec p.counter:=0;
PL/SQL procedure successfully completed.
SQL>
SQL> select ename,non_determ(ename)
2 from emp_copy
3 where non_determ(ename)=0;
ENAME NON_DETERM(ENAME)
SMITH 0
ALLEN 0
WARD 0
JONES 0
MARTIN 0
5 rows selected.Best regards
Maxim -
Oracle 11g result cache and TimesTen
Oracle 11g has introduced the concept of result cache whereby the result set of frequently executed queries are stored in cache and used later when other users request the same query. This is different from caching the data blocks and exceuting the query over and over again.
Tom Kyte calls this just-in-time materialized view whereby the results are dynamically evaluated without DBA intervention
http://www.oracle.com/technology/oramag/oracle/07-sep/o57asktom.html
My point is that in view of utilities like result_cache and possible use of Solid State Disks in Oracle to speed up physical I/O etc is there any need for a product like TimesTen? It sounds to me that it may just asdd another layer of complexity?Oracle result cache ia a useful tool but it is distinctly different from TimesTen. My understanding of Oracle's result cache is caching results set for seldom changing data like look up tables (currencies ID/code), reference data that does not change often (list of counter parties) etc. It would be pointless for caching result set where the underlying data changes frequently.
There is also another argument for SQL result cache in that if you are hitting high on your use of CPUs and you have enough of memory then you can cache some of the results set thus saving on your CPU cycles.
Considering the arguments about hard wired RDBMS and Solid State Disks (SSD), we can talk about it all day but having SSD does not eliminate the optimiser consideration for physical I/O. A table scan is a table scan whether data resides on SCSI or SSD disk. SSD will be faster but we are still performing physical IOs.
With regard to TimesTen, the product positioning is different. TimesTen is closer to middletier than Oracle. It is designed to work closely to application layer whereas Oracle has much wider purpose. For real time response and moderate volumes there is no way one can substitue TimesTen with any hard wired RDBMS. The request for result cache has been around for sometime. In areas like program trading and market data where the underlying data changes rapidly, TimesTen will come very handy as the data is real time/transient and the calculations have to be done almost realtime, with least complications from the execution engine. I fail to see how one can deploy result cache in this scenario. Because of the underlying change of data, Oracle will be forced to calculate the queries almost everytime and the result cache will be just wasted.
Hope this helps,
Mich -
Oracle 11g/R2 Query Result Cache - Incremental Update
Hi,
In Oracle 11g/R2, I created replica of HR.Employees table & executed the following statement (+Although using SUM() function is non-logical in this case, but just testifying the result+)
STEP - 1
SELECT /+ RESULT_CACHE */ employee_id, first_name, last_name, SUM(salary)*
FROM HR.Employees_copy
WHERE department_id = 20
GROUP BY employee_id, first_name, last_name;
EMPLOYEE_ID FIRST_NAME LAST_NAME SUM(SALARY)
202 Pat Fay 6000
201 Michael Hartstein 13000
Elapsed: 00:00:00.01
Execution Plan
Plan hash value: 3837552314
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 130 | 4 (25)| 00:00:01 |
| 1 | RESULT CACHE | 3acbj133x8qkq8f8m7zm0br3mu | | | | |
| 2 | HASH GROUP BY | | 2 | 130 | 4 (25)| 00:00:01 |
|* 3 | TABLE ACCESS FULL | EMPLOYEES_COPY | 2 | 130 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------- Statistics
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
*690* bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
STEP - 2
INSERT INTO HR.employees_copy
VALUES(200, 'Dummy', 'User','[email protected]',NULL, sysdate, 'MANAGER',5000, NULL,NULL,20);
STEP - 3
SELECT /*+ RESULT_CACHE */ employee_id, first_name, last_name, SUM(salary)
FROM HR.Employees_copy
WHERE department_id = 20
GROUP BY employee_id, first_name, last_name;
EMPLOYEE_ID FIRST_NAME LAST_NAME SUM(SALARY)
202 Pat Fay 6000
201 Michael Hartstein 13000
200 Dummy User 5000
Elapsed: 00:00:00.03
Execution Plan
Plan hash value: 3837552314
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 3 | 195 | 4 (25)| 00:00:01 |
| 1 | RESULT CACHE | 3acbj133x8qkq8f8m7zm0br3mu | | | | |
| 2 | HASH GROUP BY | | 3 | 195 | 4 (25)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMPLOYEES_COPY | 3 | 195 | 3 (0)| 00:00:01 |
Statistics
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
*714* bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
3 rows processed
In the execution plan of STEP-3, against ID-1 the operation RESULT CACHE is shown which shows the result has been retrieved directly from Result cache. Does this mean that Oracle Server has Incrementally Retrieved the resultset?
Because, before the execution of STEP-2, the cache contained only 2 records. Then 1 record was inserted but after STEP-3, a total of 3 records was returned from cache. Does this mean that newly inserted row is retrieved from database and merged to the cached result of STEP-1?
If Oracle server has incrementally retrieved and merged newly inserted record, what mechanism is being used by the Oracle to do so?
Regards,
Wasif
Edited by: 965300 on Oct 15, 2012 12:25 AM965300 wrote:
Hi,
In Oracle 11g/R2, I created replica of HR.Employees table & executed the following statement (+Although using SUM() function is non-logical in this case, but just testifying the result+)
STEP - 1
SELECT /+ RESULT_CACHE */ employee_id, first_name, last_name, SUM(salary)*
FROM HR.Employees_copy
WHERE department_id = 20
GROUP BY employee_id, first_name, last_name;
EMPLOYEE_ID FIRST_NAME LAST_NAME SUM(SALARY)
202 Pat Fay 6000
201 Michael Hartstein 13000
Elapsed: 00:00:00.01
Execution Plan
Plan hash value: 3837552314
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 130 | 4 (25)| 00:00:01 |
| 1 | RESULT CACHE | 3acbj133x8qkq8f8m7zm0br3mu | | | | |
| 2 | HASH GROUP BY | | 2 | 130 | 4 (25)| 00:00:01 |
|* 3 | TABLE ACCESS FULL | EMPLOYEES_COPY | 2 | 130 | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------- Statistics
0 recursive calls
0 db block gets
0 consistent gets
0 physical reads
0 redo size
*690* bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
STEP - 2
INSERT INTO HR.employees_copy
VALUES(200, 'Dummy', 'User','[email protected]',NULL, sysdate, 'MANAGER',5000, NULL,NULL,20);
STEP - 3
SELECT /*+ RESULT_CACHE */ employee_id, first_name, last_name, SUM(salary)
FROM HR.Employees_copy
WHERE department_id = 20
GROUP BY employee_id, first_name, last_name;
EMPLOYEE_ID FIRST_NAME LAST_NAME SUM(SALARY)
202 Pat Fay 6000
201 Michael Hartstein 13000
200 Dummy User 5000
Elapsed: 00:00:00.03
Execution Plan
Plan hash value: 3837552314
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 3 | 195 | 4 (25)| 00:00:01 |
| 1 | RESULT CACHE | 3acbj133x8qkq8f8m7zm0br3mu | | | | |
| 2 | HASH GROUP BY | | 3 | 195 | 4 (25)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMPLOYEES_COPY | 3 | 195 | 3 (0)| 00:00:01 |
Statistics
0 recursive calls
0 db block gets
4 consistent gets
0 physical reads
0 redo size
*714* bytes sent via SQL*Net to client
416 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
3 rows processed
In the execution plan of STEP-3, against ID-1 the operation RESULT CACHE is shown which shows the result has been retrieved directly from Result cache. Does this mean that Oracle Server has Incrementally Retrieved the resultset?
Because, before the execution of STEP-2, the cache contained only 2 records. Then 1 record was inserted but after STEP-3, a total of 3 records was returned from cache. Does this mean that newly inserted row is retrieved from database and merged to the cached result of STEP-1?
If Oracle server has incrementally retrieved and merged newly inserted record, what mechanism is being used by the Oracle to do so?
Regards,
Wasif
Edited by: 965300 on Oct 15, 2012 12:25 AMNo, the RESULT CACHE operation doesn't necessarily mean that the results are retrieved from there. It could be being
written to there.
Look at the number of consistent gets: it's zero in the first step (I assume you had already run this query before) and I would
conclude that the data is being read from the result cache.
In the third step there are 4 consistent gets. I would conclude that the data is being written to the result cache, a fourth step repeating
the SQL should show zero consistent gets and that would be the results being read. -
Oracle Application Server 10g Java Object Cache
Hi,
I am new to Java and looking for a java caching framework and just came across Oracle Application Server 10g Java Object Cache. I am unable to find 11g version of the same. Is it not supported any more?
Can I use this with weblogic server? Please suggest if any other alternatives.
Thanks,
ManojBump.
I definitely don't see the same file: C:\dev\jdevstudio10134\javacache\lib\cache.jar in the Oracle JDEV tree. Is there a suggested alternative? -
Function result Cache in oracle 11G
Hi,
i am reading the following article and trying to reproduce same set of statements to learn about function result cache.
http://www.oracle.com/technology/oramag/oracle/07-sep/o57asktom.html
Details about my output:
SQL> create or replace
function not_cached
( p_owner in varchar2 )
return number
as
l_cnt number;
begin
select count(*)
into l_cnt
from t
where owner = p_owner;
sys.dbms_lock.sleep(1);
return l_cnt;
end;
Function created.
Elapsed: 00:00:00.13
SQL> create or replace
function cached
( p_owner in varchar2 )
return number
result_cache
relies_on(T)
as
l_cnt number;
begin
select count(*)
into l_cnt
from t
where owner = p_owner;
dbms_lock.sleep(1);
return l_cnt;
end;
Function created.
Elapsed: 00:00:00.08
SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) );
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.06
SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) );
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.01
SQL> SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) );
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.02
SQL> SQL> set serveroutput on
SQL> exec dbms_output.put_line( not_cached( 'SCOTT' ) );
0
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.02
SQL> SQL> exec dbms_output.put_line( cached( 'SCOTT' ) );
0
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.02
SQL> SQL> exec dbms_output.put_line( cached( 'SCOTT' ) );
0
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.02
SQL> SQL> exec dbms_output.put_line( cached( 'SCOTT' ) );
0
PL/SQL procedure successfully completed.
SQL> exec dbms_output.put_line( cached( 'SCOTT' ) );
0
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.01
I am supposed to get the results quickly for "cached" call. However, i still dont see any change in the response time. May i know what i am missing here?
Thank you
GiridharTry to play with
RESULT_CACHE_MAX_SIZE
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams206.htm#REFRN10272
RESULT_CACHE_MAX_RESULT
http://download.oracle.com/docs/cd/B28359_01/server.111/b28320/initparams205.htm#REFRN10298 -
Production use of the Result Cache area
Hi all,
OS.......: OEL 6.3 (x86_64)
DB.......: Oracle 11.2.0.3 (x86_64)
I would like to know from those who have used the Result Cache massively in production environments... just to know the opinion of the ones who have used this "for real". Did you use it proactively, to solve a specific problem? Or in every new database created, you configure this memory area? Did it really work as it should be?
Thanks in advance.Hi Fabricio,
We run result cache in our live forecast system on 11.2.0.2. We have result_cache_mode set to force and a cache of 20MB. The performance improvement we get with this is incredible, from a server running flat out to a server that looks like it's hardly doing anything. Of course it depends on exactly how your app works but we've seen no issues with it other than occassional waits for the result cache latch when there are a large number of requests - but even when this happens it's still way faster than running without result cache.
Cheers,
Harry -
SQL Result Cache vs In-Memory Database Cache
Hi,
can anyone help me to understand the relations and differences between the 11 g new features of SQL Result Cache vs In-Memory Database Cache ?
ThanksI highly recommend you read the 11g New Features Guide. Here is a sample from it:
h4. 1.11.2.9 Query Result Cache
A separate shared memory pool is now used for storing and retrieving
cached results. Query retrieval from the query result cache is faster
than rerunning the query. Frequently executed queries will see
performance improvements when using the query result cache.
The new query result cache enables explicit caching of results in
database memory. Subsequent queries using the cached results will
experience significant performance improvements.
See Also:
[Oracle Database Performance Tuning Guide|http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/memory.htm#PFGRF10121] for details
[Results Cache Concepts|http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/memory.htm#PFGRF10121|Results Cache Concepts]
HTH! -
Result Cache in oracle 11g release 2.0.2.0
All,
Few months back I was trying Result Cache feature of 11g release 2.0.1.0. That time oracle mentioned that they have 3 modes to use this feature by setting result_cache_mode paramter to AUTO, FORCE or MANUAL. With AUTO mode (result_cache_mode=AUTO) you can identify queries that may benefit from result cache. I would like to know whcih views or function I should see where it captures this information.
In 11.2.0.1.0 documentation it was referencing some views (I totally don't remember those views names) and said those will be available in 11.2.0.2.0.
Is anyone know about this?
Thanks in advance.user2486753 wrote:
Though oracle doc doesn't say about AUTO it is still accepts that value and caches the result of the SQL query if you add /*+ result cache */ hint to the SQL.
I know that they did mentioned in 112010 some where that it will help users to find which SQL's are good candidates for caching by running the application for a while. I just couldn't fine it.If we are adding AUTO and still passing the hint, its the same behavior as like MANUAL. I am not sure that I have seen the value anywhere and neither its there in the docs too.
HTH
Aman.... -
Oracle result cache and functions
Hi All,
I am on 11.2 in Linux.
I want to use Oracle's result cache to cache results of (user defined) functions, which we use in SELECT commands.
My question is, does result caching work for deterministic and non-deterministic functions ?
Just curious, how Oracle keeps track of changes being made which affect a function's return value?
Thoughts please.
Thanks in advanceI want to ... cache results of (user defined) functions, which we use in SELECT commands.You have four choices:
1. Subquery caching - (wrap function call in SELECT) useful for repeated function calls in a single SELECT
2. Marking function as DETERMINISTIC - inconsistent results across versions, deterministic best reserved for function-based indexes only
3. Result Cache
4. Move function logic out of function and inline to the main SQL statement.
The biggest downside of any function call that is inline to SQL is that it bypasses the read consistency mechanism, actually that's probably the second biggest downside. The biggest downside is normally that their misuse kills performance.
If your function itself contains SQL then you should seriously reconsider whether you should be using a function.
does result caching work for deterministic and non-deterministic functions ?Result cache knows nothing about determinism so yes it should be applied regardless.
Oracle keeps track of changes being made which affect a function's return value?See v$result_cache_dependency.
The mechanism is very blunt, there is no fine-grained tracking of data changes that may affect your result.
It's as simple as function F1 relies on table T1. If the data in table T1 changes, invalidate the results in the result cache for F1. -
Possible result cache problem 11GR1;;Plz Help me :)
Hello,
I just finished installing Oracle 11g Enterprise Edition on my laptop,under windows XP 32 Bit,
Just run to test the result cache ,It seems the result cache does not work for me ;
Please see the demonstration below and help me to undertsand:
(I am the only person connected to the database and I only have one session conneted )
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
Connected as SYS
SQL> set timi on
SQL> select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
Executed in 0.031 seconds
SQL> ----result cache demonstration
SQL> ----clear the server result cache
SQL> exec dbms_result_cache.Flush
PL/SQL procedure successfully completed
Executed in 0 seconds
SQL> ---run a query to load the server result cache
SQL>
SQL> SELECT /*+ result_cache */
2 H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID, COUNT(*)
3 FROM HR.DEPARTMENTS H
4 GROUP BY H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID
5 ;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
10 Administration 200 1
30 Purchasing 114 1
50 Shipping 121 1
60 IT 103 1
70 Public Relations 204 1
200 Operations 1
210 IT Support 1
230 IT Helpdesk 1
90 Executive 100 1
100 Finance 108 1
140 Control And Credit 1
150 Shareholder Services 1
160 Benefits 1
220 NOC 1
250 Retail Sales 1
130 Corporate Tax 1
110 Accounting 205 1
270 Payroll 1
40 Human Resources 203 1
170 Manufacturing 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
260 Recruiting 1
20 Marketing 201 1
120 Treasury 1
80 Sales 145 1
180 Construction 1
190 Contracting 1
240 Government Sales 1
27 rows selected
Executed in 0.282 seconds
SQL> --*-response time is 0.282 seconds*
SQL> ---Show the result information from v$result_cache_objects : is the result cache is valid ?
SQL> --- The space used also?
SQL>
SQL> SELECT ID,
2 NAME,
3 TYPE,
4 STATUS,
5 BLOCK_COUNT,
6 ROW_COUNT * ROW_SIZE_AVG AS SPACE_FOR_ROWS,
7 SPACE_OVERHEAD
8 FROM V$RESULT_CACHE_OBJECTS V
9 ;
ID NAME TYPE STATUS BLOCK_COUNT SPACE_FOR_ROWS SPACE_OVERHEAD
0 HR.DEPARTMENTS Dependency Published 1 0 0
1 SELECT /*+ result_cache */ Result Published 1 675 320
H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID, COUNT(*)
FROM HR.DEPARTMENTS H
GROUP BY H.DEPAR
Executed in 0.141 seconds
SQL> ---we run again our query
SQL>
SQL> SELECT /*+ result_cache */
2 H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID, COUNT(*)
3 FROM HR.DEPARTMENTS H
4 GROUP BY H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID
5 ;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
10 Administration 200 1
30 Purchasing 114 1
50 Shipping 121 1
60 IT 103 1
70 Public Relations 204 1
200 Operations 1
210 IT Support 1
230 IT Helpdesk 1
90 Executive 100 1
100 Finance 108 1
140 Control And Credit 1
150 Shareholder Services 1
160 Benefits 1
220 NOC 1
250 Retail Sales 1
130 Corporate Tax 1
110 Accounting 205 1
270 Payroll 1
40 Human Resources 203 1
170 Manufacturing 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
260 Recruiting 1
20 Marketing 201 1
120 Treasury 1
80 Sales 145 1
180 Construction 1
190 Contracting 1
240 Government Sales 1
27 rows selected
*Executed in 0.297 seconds*
SQL> Why the first is faster than the second?
thanks a lot,
Edited by: Ora-Wiss on Apr 3, 2010 2:17 PMI have been using 11g from quite some time now in my sessions and already have started sessions over 11gr2 as well and I can't recall that I ever faced this thing. And I just did show the same to you on my personal system as well. But nevermind, here is one more run with the database being restarted and the same code being run.
SQL> select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production
Elapsed: 00:00:00.00
SQL> startup force
ORACLE instance started.
Total System Global Area 171573248 bytes
Fixed Size 1331936 bytes
Variable Size 125832480 bytes
Database Buffers 37748736 bytes
Redo Buffers 6660096 bytes
Database mounted.
Database opened.
SQL> exec dbms_result_cache.Flush;
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.06
SQL> SELECT /*+ result_cache */ H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID, COUNT(*) FROM HR.DEPARTMENTS H GROUP BY H.DEP
ARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
10 Administration 200 1
30 Purchasing 114 1
50 Shipping 121 1
60 IT 103 1
70 Public Relations 204 1
200 Operations 1
210 IT Support 1
230 IT Helpdesk 1
90 Executive 100 1
100 Finance 108 1
140 Control And Credit 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
150 Shareholder Services 1
160 Benefits 1
220 NOC 1
250 Retail Sales 1
130 Corporate Tax 1
110 Accounting 205 1
270 Payroll 1
40 Human Resources 203 1
170 Manufacturing 1
260 Recruiting 1
20 Marketing 201 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
120 Treasury 1
80 Sales 145 1
180 Construction 1
190 Contracting 1
240 Government Sales 1
27 rows selected.
Elapsed: 00:00:00.15
SQL> SELECT /*+ result_cache */ H.DEPARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID, COUNT(*) FROM HR.DEPARTMENTS H GROUP BY H.DEP
ARTMENT_ID, H.DEPARTMENT_NAME, H.MANAGER_ID;
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
10 Administration 200 1
30 Purchasing 114 1
50 Shipping 121 1
60 IT 103 1
70 Public Relations 204 1
200 Operations 1
210 IT Support 1
230 IT Helpdesk 1
90 Executive 100 1
100 Finance 108 1
140 Control And Credit 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
150 Shareholder Services 1
160 Benefits 1
220 NOC 1
250 Retail Sales 1
130 Corporate Tax 1
110 Accounting 205 1
270 Payroll 1
40 Human Resources 203 1
170 Manufacturing 1
260 Recruiting 1
20 Marketing 201 1
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID COUNT(*)
120 Treasury 1
80 Sales 145 1
180 Construction 1
190 Contracting 1
240 Government Sales 1
27 rows selected.
Elapsed: 00:00:00.01
SQL>As you can see, I can't reproduce.
HTH
Aman....
Maybe you are looking for
-
"Object reference not set to an instance of an object" error in SAPBO 9.0 PL08
Hi Experts, I developed Customized Addon and created.ard file using B1 DE 2.2 version. But when we installed in the client place,Addon is connecting and status is showing "Connected" at the same time we are getting an error "Object reference not set
-
Can I install the same license for a computer at work and at home?
We are a small design studio in South Africa and have recently had a huge misfortune when our offices burnt down. All our software and licensing agreements were lost. We are now looking into the Creative Cloud for teams option. What I would liek to k
-
Sap b1 compatibility with SQL server 2008
Hello Experts i have installed Sql Server 2008 in my system and when installing SAP Business One server setup the database selection is not coming .Where we can select MSSQL 2008 am not getting that selection of sql . Thanx in advance Regards Krishna
-
Show image in Web Dynpro ALV column
Hello everybody, I have a WD component with an ALV table bound to a context node. Works very fine so far. Now in the first column of the node I have put an image source (MIME object in my WD component). I configured the first ALV column as Link To Ac
-
I am trying to use the Optical out from my MEGA PC to my Onkyo receiver. I enabled the analog passthrough so the tuner card audio would go through the Optical out and it is garbled as though there was too much gain. I switched to the 5.1 analog out