Client Result Cache Question
Hi,
i am not sure, whether the new feature "Client Result Cache" for OCI - Connections is an enterprise only feature or not.
The Licensing Information at http://docs.oracle.com/cd/E11882_01/license.112/e10594/editions.htm#CJACGHEB shows this three features are enterprise only:
Client Side Query Cache
Query Results Cache
PL/SQL Function Result Cache
Which of these are pointing to Client Result Cache? Is it the Query Results Cache? Or something else?
As an Hint, i am unable to activate the feature on standard edition databases, but i am not sure, if this is the reason or if i am just making some mistakes in configuration/testing.
Thanks in advance
Joerg
we stopped all tests, because it seems to be a enterprise edition only feature.
Similar Messages
-
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 -
Does Instant Client support client result caching?
Hi all,
couldn't find the answer to this question on the ic-FAQ (http://www.oracle.com/technetwork/database/features/oci/ic-faq-094177.html)
Does Instant Client support client result caching?
Kind regards, Sander.Yes. Like any other OCI feature, Client Result Caching is supported by Instant Client.
Besides OCI documentation, here is a link to white paper on Client Result Caching and other OCI features: http://www.oracle.com/technetwork/topics/php/whatsnew/building-best-drivers-131920.pdf -
Does OCI client result cache and oracle UCP work together?
I'm using Oracle 11.2.1.0. I've set up FCF and enabled OCI result cache on server side, so on client side, I'm using UCP for failover.
this is my datasource configuration:
<Resource name="jdbc/MyPool"
auth="Container"
factory="oracle.ucp.jdbc.PoolDataSourceImpl"
type="oracle.ucp.jdbc.PoolDataSource"
connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
url="jdbc:oracle:oci:@dbhost:1521/myDb"
user="db_user"
password="db_password"
fastConnectionFailoverEnabled="true"
onsConfiguration=""
connectionPoolName="dbPool"
initialPoolSize="5"
minPoolSize="5"
maxPoolSize="25"
connectionWaitTimeout="10000"
inactiveConnectionTimeout="120000"
abandonConnectionTimeout="60"
validateConnectionOnBorrow="true"
sqlForValidateConnection="select user from dual"
maxStatements="30"/>
I've enabled OCI client result cache.
I use /*+ result_cache */ in my query to take advantage of the result cache.
so I execute the following scenario:
i) select /*+ result_cache */ value from myTable where id=1; (this returns a result.)
ii) update myTable to set a different value for id=1 record;
iii) run select query again; (this should return a different result. oci result cache gets updated when table changes.)
if I take out
"sqlForValidateConnection" and/or "validateConnectionOnBorrow" (i.e. disable sql validation on borrow), the 2nd query after table update doesn't show the latest result. it's still showing the old query result.
is this a bug? that UCP validation on borrow has an impact on OCI result cache function? this doesn't happen if using dbcp java connection pooling with OCI result cache.it turns out I ran the test against an oracle server that doesnt have FCF configured, nor ONS.
once i switched to a correct oracle cluster, my test passed. -
Using the client result cache without the query result cache
I have constructed a client in C# using ODP.NET to connect to an Oracle database and want to perform client result caching for some of my queries.
This is done using a result_cache hint in the query.
select /*+ result_cache */ * from table
As far as I can tell query result caching on the server is done using the same hint, so I was wondering if there was any way to differentiate between the two? I want the query results to be cached on the client, but not on the server.
The only way I have found to do this is to disable all caching on the server, but I don't want to do this as I want to use the server cache for PL/SQL function results.
Thanks.e3a934c9-c4c2-4c80-b032-d61d415efd4f wrote:
I have constructed a client in C# using ODP.NET to connect to an Oracle database and want to perform client result caching for some of my queries.
This is done using a result_cache hint in the query.
select /*+ result_cache */ * from table
As far as I can tell query result caching on the server is done using the same hint, so I was wondering if there was any way to differentiate between the two? I want the query results to be cached on the client, but not on the server.
The only way I have found to do this is to disable all caching on the server, but I don't want to do this as I want to use the server cache for PL/SQL function results.
Thanks.
You haven't provided ANY information about how you configured the result cache. Different parameters are used for configuring the client versus the server result cache so you need to post what, if anything, you configured.
Post the code you executed when you set the 'client_result_cache_lag' and 'client_result_cache_size' parameters so we can see what values you used. Also post the results of querying those parameters after you set them that show that they really are set.
You also need to post your app code that shows that you are using the OCI statements are used when you want to use client side result cacheing.
See the OCI dev guide
http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci10new.htm#sthref1491
Statement Caching in OCI
Statement caching refers to the feature that provides and manages a cache of statements for each session. In the server, it means that cursors are ready to be used without the need to parse the statement again. Statement caching can be used with connection pooling and with session pooling, and will improve performance and scalability. It can be used without session pooling as well. The OCI calls that implement statement caching are:
OCIStmtPrepare2()
OCIStmtRelease() -
Client Result Cache for geometries
Hi,
we have experienced that Client Result Caches can not be used using SDO geometries or function calls. Does anybody know a workaround for using Client Result Caches with geometries (e.g. casting the geometries to varchar2).
Thanks in advance,
SimonThere is a Spatial forum here at OTN. Please delete this thread and repost there.
Thank you. -
Is it possible to use the Client Result Cache when you use ODP.NET?
With the client side query cache it should be possible to cache query results in client memory.Is it possible to use the Client Result Cache when you use ODP.NET?
Yes, absolutely. In fact, my next Oracle Magazine column is on just that subject... though you won't see it until the May/June 2008 issue is published.
- Mark -
I create and populate the following table in my schema:
create table plch_table (id number, time_sleep number);
begin
insert into plch_table values (1, 20);
commit;
end;
Then I create this function (it compiles successfully, since my schema has EXECUTE authority on DBMS_LOCK):
create or replace function plch_func
return number
result_cache
is
l_time_sleep number;
begin
select time_sleep
into l_time_sleep
from plch_table
where id = 1;
dbms_lock.sleep(l_time_sleep);
return l_time_sleep;
end;
I then start up a second session, connected to the same schema, and execute this block:
declare
res number := plch_func;
begin
null;
end;
Within five seconds of executing the above block, I go back to the first session and I run this block:
declare
t1 number;
t2 number;
begin
t1 := dbms_utility.get_time;
dbms_output.put_line(plch_func);
t2 := dbms_utility.get_time;
dbms_output.put_line('Execute in '||round((t2-t1)/100)||' seconds');
end;
what will be displayed after this block executes?
And the result is:
20
Execute in 30 secondsHowever, I don't understand why? I mean what is going on behind this? Why the result 30? Could somebody tell me why?Honestly, before yesterday's PL/SQL Challenge question, I had no idea how this worked either. This is very much a deep internals question-- you'd likely have to go looking for a very specialized presentation or blog post to get more detail (or you'd have to do the research yourself). And even then, it's relatively unlikely that they would go into much more detail than the PL/SQL Challenge answer did. Julain Dyke's Result Cache Internals (PPT) is probably one of the more detailed presentations about the internals of the result cache.
The set of valid statuses for a result cache object are documented in the Oracle Database Reference entry for the v$result_cache_objects view. The two 10 second timeouts are controlled by the database- and session-level settings of the undocumented resultcache_timeout parameter (which, based on this blog post by Vladimir Begun was set to 60 seconds in 11.1.0.6 and changed to 11.1.0.7 to 10 seconds.
Justin -
Let's say I have a FLV that "lives" on a server, and I serve
it up through, say, Ruby. The Ruby script takes care of obtaining
the FLV from the filesystem and renders it to the browser.
Inside my client-side SWF, my code to connect to the Ruby
application and get the FLV may look like this:
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
tvid.attachVideo(ns);
ns.setBufferTime(2);
statusID = setInterval(videoStatus, 200);
ns.onStatus = function(info) {
trace(info.code);
if(info.code == "NetStream.Buffer.Full") {
bufferClip._visible = false;
ending = false;
clearInterval( statusID );
statusID = setInterval(videoStatus, 200);
if(info.code == "NetStream.Buffer.Empty") {
if ( !ending ) {
bufferClip._visible = true;
if(info.code == "NetStream.Play.Stop") {
bufferClip._visible = false;
//ending = true;
if(info.code == "NetStream.Play.Start") {
ending = false;
if(info.code == "NetStream.Buffer.Flush") {
ending = true;
//Play it
ns.play("
http://localhost:3000/stream");
==============
It seems to me that the "decision" of whether or not to cache
is entirely dependent on the access method within the client-side
SWF. So, if in this case, I'm using NetStream to stream the video,
will it still be cached on the client end? Or do I -have- to use
FMS to prevent client caching - and if so, why? How does FMS
prevent the client from caching the data (isn't it up to the client
to delete the data bits after they're viewed?)
Thanks a bunch for the help.Let's say I have a FLV that "lives" on a server, and I serve
it up through, say, Ruby. The Ruby script takes care of obtaining
the FLV from the filesystem and renders it to the browser.
Inside my client-side SWF, my code to connect to the Ruby
application and get the FLV may look like this:
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
tvid.attachVideo(ns);
ns.setBufferTime(2);
statusID = setInterval(videoStatus, 200);
ns.onStatus = function(info) {
trace(info.code);
if(info.code == "NetStream.Buffer.Full") {
bufferClip._visible = false;
ending = false;
clearInterval( statusID );
statusID = setInterval(videoStatus, 200);
if(info.code == "NetStream.Buffer.Empty") {
if ( !ending ) {
bufferClip._visible = true;
if(info.code == "NetStream.Play.Stop") {
bufferClip._visible = false;
//ending = true;
if(info.code == "NetStream.Play.Start") {
ending = false;
if(info.code == "NetStream.Buffer.Flush") {
ending = true;
//Play it
ns.play("
http://localhost:3000/stream");
==============
It seems to me that the "decision" of whether or not to cache
is entirely dependent on the access method within the client-side
SWF. So, if in this case, I'm using NetStream to stream the video,
will it still be cached on the client end? Or do I -have- to use
FMS to prevent client caching - and if so, why? How does FMS
prevent the client from caching the data (isn't it up to the client
to delete the data bits after they're viewed?)
Thanks a bunch for the help. -
11g Client result set caching in OCI
I'm trying out this feature in the 11.1.0.6 release. My understanding of this feature is that when enabled with the appropriate server-side init.ora parameters, a 11g OCI client connecting to the instance will cache SQL results locally in some fixed amount of RAM on the client. The idea is that network roundtrips would simply disappear in this situation.
I'm not sure if it's working--or how to tell if it is. I have a 11g instance running and put the 11g client incl. sqlplus on a separate box, setting up TNS connectivity from client to server. Pretty standard stuff. I can connect fine and run the same query over and over, but I see incrementing execution counts on the database side and network traffic between the client and server so I'm guessing that the client-side caching isn't happening. There doesn't seem to be a ton of clear documentation on this feature so I wanted to see if anyone else has kicked it around.
BobI am also facing the same issue (enabling client result set caching). I am using Oracle Database 11g Release 11.2.0.2.0.
I have made the below configuration changes
1. Enabled the client result set cache by setting the server side parameter 'client_result_cache_size' to 10485760 (10 MB)
2. Restarted the oracle instance after setting the above parameter
3. Added a table annotation by executing the statement ALTER TABLE emp RESULT_CACHE (MODE FORCE). I verified that the annotation is applied by query the user table later.
4. Enabled statement caching on the client side i.e. on the JDBC driver.
5. Used prepared statements to execute the query so that statement caching kicks in. From the driver logs I verified that execution of subsequent queries after the first one used the same statement handle.
After executing the select prepared statement query for three times I checked the CLIENT_RESULT_CACHE_STATS$ view. But this view didn't result in any rows.
As part of troubleshooting I even tried adding the /*+ RESULT_CACHE */ hint to the query but the view didn't gave any result.
Also on enabling sql trace I could see from tkprof that every execution of the query increased the number of rows fetched on the server which indicates that the client result set caching in OCI isn't working.
Are there any steps which I have missed?
Thanks in advance. -
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. -
Client automatically cache the data got from cache server?
Hi expert,
I have 2 questions about the client local cache. Would you please help to give me some suggestion?
1. Will client automatically locally cache the data got from cache server the first time and automatically update the data in local cache when getting the same data from cache server again? I go through the API reference but cannot find any API to query the data currently cached in the local cache.
2. If client will automatically cache the data got from cache server. Is there any way for a client to get the data event that happens to its local cache, such as entry created in local cache, entry deleted from local cache and entry updated in local cache? In my opinion, when getting an entry from cache server the first time, the MapListener's entry create event should be triggered. When getting the same entry again, the entry update event should be triggered.
However, I have tried a client with replicated cache, a client with partitioned cache, an extend client with remote cache and a client with local cache(front cache part of near cache), the client (the NamedCache object has been set the MapListener) cannot get any event notification after getting data from cache server. By the way, my listener is OK since when putting data the entry create event and entry update event will be triggered.
Your suggestion is very appreciated. :)Hi
If I were you I would read this http://download.oracle.com/docs/cd/E14526_01/coh.350/e14510/toc.htm
and particularly the section about Near Caching here http://download.oracle.com/docs/cd/E14526_01/coh.350/e14510/nearcache.htm#CDEFEAJG
which is what you are asking about in your question.
Near Caching is how Coherence stores data in the locally - which is the answetr to your first question. How Near Caching works is explained in the documentation.
Events, which you ask about in your second question are explained here http://download.oracle.com/docs/cd/E14526_01/coh.350/e14510/delivereventsjava.htm#CBBIIEFA
It might be that ContinuousQueryCache is closer to what you want. This is explained here http://download.oracle.com/docs/cd/E14526_01/coh.350/e14510/queryabledatafabric.htm#sthref38 A ContinuousQueryCache is like having a sub-set of the underlying cache on the local client which you can then listen to etc...
JK -
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. -
Result cache not working?
Hi,
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> show 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 10M
result_cache_mode string MANUAL
result_cache_remote_expiration integer 0
The above are the initialization parameters set and the DB version.
Now i have created a table as
create table objects as select * from dba_objects;
then issued the following query.
select /* result_cache */ object_Type,count(*) from objects group by object_type;
it appears that the results of the above query is not cached in the result cache. using
set autotrace traceonly explain confirms that there is no result cache or the CACHE_ID in the explain plan. also the v$result_cache_statistics confirm the same.
But after this when i issued the following statement.
alter session set result_cache_mode=force;
the same below sql statement again
select /* result_cache */ object_Type,count(*) from objects group by object_type;
it appears that now the result cache is being used.
My question is despite using the result_cache hint and trying the above statement when the result_cache_mode=auto/manual. The result cache is not being used or the results of the SQL statements are not being cached at all despite using the result_cache hint and the table being not used at all. and if i use the result_cache_mode=force then the result cache is being used.
Can any one please explain this behavior. Cursor_sharing is set to EXACT. and i am issuing the same SQL statement without any changes at all.
Thanks,There is a syntax problem with your queries:
select /* result_cache */.... is just a comment, not a hint. For creating a hint, you need "+": select /*+ result_cache */.... -
my table frequently updating value.I want to retrieve updated value from result cache not from the table .
I used result cache function for the same.updated value is coming from table and not updated value from result cache.
Is it possible to retrieve updated value from result cache.or any the memory area.
I have below query
SELECT /*+RESULT_CACHE*/SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 160
at the first time above query retrieving value from the disk.
next time it is retrieving value from result cache. that is correct.
But whenever salary is updating for the employee_id =160.
after that that query retrieving value from disk. this is also correct.
But i want to retrieve value after update the salary for that employee_id=10 from result cache not from disk.I want to any mechanism is available in oracle that can retrieve value from result cache for the same input if record is updated.
Edited by: ibney on Mar 20, 2013 2:15 AMHi Karthick,
I know that .i have another question .
I have below query
SELECT /*+RESULT_CACHE*/SALARY FROM EMPLOYEES WHERE EMPLOYEE_ID = 160
at the first time above query retrieving value from the disk.
next time it is retrieving value from result cache. that is correct.
But whenever salary is updating for the employee_id =160.
after that that query retrieving value from disk. this is also correct.
But i want to retrieve value after update the salary for that employee_id=10 from result cache not from disk.I want to any mechanism is available in oracle that can retrieve value from result cache for the same input if record is updated.
Edited by: ibney on Mar 20, 2013 2:16 AM
Edited by: ibney on Mar 20, 2013 2:16 AM
Maybe you are looking for
-
I am trying to wipe my broken iPhone 4 and have signed into iCloud on my laptop, but seem to be going around in circles trying to find a simple option to wipe my phone. It keeps telling me to install iCloud, which I have. Help!
-
EMac no longer functions as a base station
I have an eMac just over a year old with an Airport card in it. I used to connect to it with my PowerBook as it was upstairs and closer than my Base Station downstairs. Even then I couldn't get mail, but I let it go. Recent updates knocked out my thi
-
Try this, several people complained of the same problem, they reset winsock..Start --> Programs --> Accessories (Right Click on Command Prompt) --> Run as Administrator then type in: Netsh winsock reset Hit enter, restart PC, open iTunes, go to Store
-
Editing in PS CS4 from PSE7 Organiser
Back in PSE4 (I think) there used to be an option on the menu to Edit an image from the Organiser in either Elements or Full Photoshop - you either used Ctrl + I for Elements or Ctrl + H for Photoshop. This got dropped from the menus in later version
-
HT4095 Error while downloading HD Movie on iPad
This is the first time for me to buy a HD Movie from iTunes on iPad.. I think it will be as easy as downloading music from iTunes.. Can anybody help me??