SlideShare a Scribd company logo
100500 способов
кэширования в Oracle
Database или как достичь
максимальной скорости
обработки запросов
минимальной ценой
DataArt experience
Agenda
• Database caches
• Result cache
• Result cache in DBMSs different from Oracle
• Hand-made Oracle result cache implementation
• Embedded Oracle result cache implementation
• Performance tests
• Limitations and caveats
• Cases
• Conclusion
Hot news from trenches!!!
Agenda
• Retailer case
• Finance case
• Limitations and caveats
• Loyalty case
• Conclusion
Database caches
• Buffer cache – cache for data pages/data blocks
• Statement cache – cache of queries plan
• Result cache – rows from queries
• OS cache
Retailer case
DWH report
Oracle 11
20 Tb
300 users
20 min
350 distinct SKU
5000 rows
Select sku_id,
Shop_id,
sku_detail(sku_id),
…..
from dim_sales
where ….
Order by shop_id……..
Create or replace
function
sku_detail(sku_id
number) return
number is
Select 1
If Select 2
Else Select 3
…
…
…
Select 30
End;
400 lines of
SQL+PL/SQL
0.2 second per SKU
5000 * 0.2 = 1000 seconds
Retailer case Hand-made cache
DWH
report
Oracle 11
20 Tb
300 users
4 min
350 distinct SKU
5000 rows
Select sku_id,
Shop_id,
sku_detail(sku_id),
…..
from dim_sales
where ….
Order by shop_id……..
Create or replace function
sku_full(sku_id number)
return number is
Select 1
If Select 2
Else Select 3
…
…
…
Select 30
End;
400 lines of SQL+PL/SQL
0.2 second per SKU
350* 0.2 = 70 seconds
CREATE PACKAGE BODY cache_sku AS
TYPE sku_cache_aat IS TABLE OF number INDEX BY PLS_INTEGER;
cache sku_cache_aat;
end cache_sku;
cache
FUNCTION sku_detail(sku
number) RETURN number IS
BEGIN
IF NOT cache.EXISTS(sku) THEN
cache(sku) := sku_full(sku);
END IF;
RETURN cache(sku);
END sku_detail;
Hand-made cache Memory
12X
Hand-made cache
Pros:
- Very fast
- Easy to implement
- No configuration efforts
- No intra-process sync logic burden
Cons:
- Cache consumes expensive memory from DB
- Memory is allocated per-session basis
- PL/SQL or other DB stored logic is required
- Vendor specific
- No automatic invalidation
Hand-made cache Not Oracle
No cache
Hand-made cache Not Oracle
With propopulated cache
Case 2 Recommendation engine
Oracle
main
Oracle
DG
Application
server
Application
server
Load
balancer
Client
browser
400 users
1000
requests
per
second
Hazelcast
Case 2 Recommendation engine
Recommendation rules
1. 10 best recommendations by text match
2. Multilanguage capabilities
3. Should be taken from 12 previous recognized documents of the client
4. If there is no documents – from all clients of the same industry
5. If no in same industry – from clients similar by margin and e.t.c
max
100
rows
2-3 columns. Parameter length – 100 letter.
max 10 users
Case 2 Recommendation engine
1. Recommendations work slow – 5 minutes for 1 document
2. To risky to change JAVA
1. Do not use any cache to not care about expiration
2. Use purchased Oracle options of customer
3. Use “in-Memory for beggars” - KEEP pool for full text search
1. Table with recommendations was too big
2. New DR$ tables in case of frequent index setting changes
3. KEEP pool warming is complicated (iot, lob, small table threshold, etc.)
4. DBA was reluctant to extra pool management, warming stored
procedure, additional permissions
5. Performance gain was not enough – 90 seconds per document
1. Table with recommendations was too big
2. New DR$ tables in case of frequent index setting changes
3. KEEP pool warming is complicated (iot, lob, small table threshold, etc.)
4. DBA was reluctant to extra pool management, warming stored
procedure, additional permissions
5. Performance gain was not enough – 90 seconds per document
Case 2 Recommendation engine
Solution
1. Use database to cache queries
2. Use Oracle Database Result Cache
Why
1. SQL to get recommendation works 0.5 sec, no options for query
tuning – Oracle full text search engine + it is really heavy SQL
2. Same parameters appear at least 5-10 times – cache will be used
3. Data to get recommendations is refreshed 1 hour basis
4. PL/SQL is prohibited
Oracle Result Cache
Oracle result cache
1. Memory area to share query result sets
2. Read consistent – auto invalidation during DML
3. Automatic dependency tracking
4. Minimal changes in the application
5. There is an option how not to change application
6. Could cache PL/SQL logic as well
Result Cache Way 1
ID of result
First execution Second execution
Result Cache Table annotations
No query changes
but RC works
Result Cache Table annotations
No annotation on JOBS table – no result cache
Result Cache Table annotations
2 annotations –result cache works
Result Cache Dependency Tracking
No in dependency list
Result Cache Dependency Tracking
Result Cache Inline Views
Result Cache Inline Views
Result Cache Simple Views
Result Cache Invalidation
Result Cache Invalidation
Cache is ignored for current session
Good for others sessions
Result Cache Invalidation
Invalidated after commit for others sessions!
1. SELECT FOR UPDATE + COMMIT statements even there were no
changes at all:
- no DML statement were issued
- DML updated 0 rows
2. Update/delete statements in a table under result cache with no
records affected + an update to any table where rows were affected +
COMMIT.
SQL Result Cache Unexpected Invalidation
WTF!!!
SQL Result Cache Unexpected Invalidation
3. An unindexed foreign key + delete/update/insert a record from
parent table
4. Changes in an arbitrary partition even if a RC query deals with a
different single partition data. Table level tracking only.
Unexpected PL/SQL Invalidation Quiz
How it is possible for equal calls?
Unexpected PL/SQL Invalidation Quiz
No exception handler
Explicit exception
in case of error!
Unexpected PL/SQL Invalidation Quiz
Unexpected PL/SQL Invalidation
No-invalidation style – always return value!!!
Unexpected PL/SQL Invalidation
Unexpected PL/SQL Invalidation
Case 2 Recommendation engine
Final solution
1. Do not use annotations – not all queries should be cached
2. Use /*+ result_cache*/ for long-running query
Performance is tested. Document recognition – 30 seconds.
Time for production
Case 2 Recommendation engine Early morning
Level 3 support
Production incident
Severity 1
Users can’t provide document recognition. Recognition takes 20 minutes
at least. Sessions hangs.
Regards, L2 support team.
Case 2 Recommendation engine
• Active user count: 40
• Row count: 300
• Columns count: 5-8
• Parameter length: 300
• Database active session count: 120 = 40 * 3
X5 more!
Monitoring features
View Name Description
V$RESULT_CACHE_STATISTICS Lists cache settings and memory usage statistics
V$RESULT_CACHE_MEMORY Lists all the memory blocks and corresponding
statistics
V$RESULT_CACHE_OBJECTS Lists all the objects(cached results and
dependencies) along with their attributes
V$RESULT_CACHE_DEPENDENCY Lists the dependency details between the cached
results and dependencies
V$SQLAREA Lists SQL statements issued inside Oracle database
Management features
Procedure Name Description
BYPASS Instruction to ignore result cache: for current
session or for all DB
FLUSH Clean cache
MEMORY_REPORT Memory detail report
STATUS Checks the status
INVALIDATE Invalidates the specified result-set object
Package: DBMS_RESULT_CACHE
V$RESULT_CACHE_MEMORY
V$RESULT_CACHE_OBJECTS
V$RESULT_CACHE_STATISTICS
DBMS_RESULT_CACHE.MEMORY_REPORT
Locks Result cache prior 12.2 – use very careful!!!
Case 2 Recommendation engine Investigations
Strange queries for 40 small tables each minute:
ETL
Case 2 Recommendation engine Investigations
Result cache annotation
Still 20 minutes per document 
Case 2 Recommendation engine
We have received very positive feedback about Oracle Adaptive Statistic feature from customer with respect to adaptive
plans. It has proved to be very able at improving system performance for a huge range of workloads. (c) Oracle
20000 queries
10 minutes per document!!!
Via bug? WTF!!!
Result cache latches
Latches are Oracle-internal low-level locks that protect the memory
structures of the system global area (SGA) against simultaneous
accesses.
Result cache latches
Result cache latches Type 1
When sets
First row of dataset is placed in Result Cache
When release
Last row of dataset is placed in Result Cache
Who waits
Sessions with same SQL which requested the latch
How much
_RESULT_CACHE_TIMEOUT – 10 seconds. Result cache bypassed after timeout.
Result cache latches Type 2
When sets
First row of dataset is requested from Result Cache
When release
Last row of dataset is read from Result Cache
Who waits
Sessions with same SQL which requested the latch
How much
It depends 
Result cache latches
Latches not only makes SQL to wait but consumes CPU.
There is no options to get rid of result cache latches – slow for
concurrent environment..
Be ready to convince DBA latches wait time saves DB time.
Result cache statistics
NAME VALUE
Block Size (Bytes) 1024
Block Count Maximum 4096
Block Count Current 4096
Result Size Maximum
(Blocks) 204
Create Count Success 500
Create Count Failure 0
Find Count 20000
Invalidation Count 10000
Delete Count Invalid 155
Delete Count Valid 14000
Hash Chain Length 1
Find Copy Count 1770
Latch (Share) 0
They are equal – the cache is full!!!
Proper results are deleted
Memory estimate
Result Cache Size = row width (bytes)* expected row count
NAME VALUE
Block Size (Bytes) 1024
Block Count Maximum 4096
Block Count Current 4096
Memory allocated by blocks!!!
Result Cache Size = block size (if fits in 1024) * expected row count
Administration Patching
Administration Patching
Administration
23 undocumented parameters
6 documented parameters
Administration
Parameter Purpose
RESULT_CACHE_MAX_SIZE memory allocated to the server result cache in bytes. default – 0 bytes
RESULT_CACHE_MAX_RESULT maximum amount of server result cache memory (in percent) that can be
used for a single result. The default value is 5%.
RESULT_CACHE_MODE Default is MANUAL which means that the cache should be requested
explicitly via the RESULT_CACHE hint
_RESULT_CACHE_TIMEOUT
(undocumented)
Maximum time a session request for a latch. Default 10 sec.
6 minutes per document!!!
Case 2 Recommendation engine
NAME VALUE
Block Size (Bytes) 1024
Block Count Maximum 4096
Block Count Current 4096
Result Size Maximum
(Blocks) 204
Create Count Success 500
Create Count Failure 0
Find Count 20000
Invalidation Count 10000
Delete Count Invalid 155
Delete Count Valid 14000
Hash Chain Length 1
Find Copy Count 1770
Latch (Share) 0
A lot of updates on source tables
Case 2 Recommendation engine
1. Materialize recommendations
2. Refresh on hourly basis
Final statistics for result cache
40 seconds per document!!!
NAME VALUE
Block Size (Bytes) 1024
Block Count Maximum 4096
Block Count Current 4096
Result Size Maximum
(Blocks) 204
Create Count Success 500
Create Count Failure 0
Find Count 20000
Invalidation Count 10000
Delete Count Invalid 155
Delete Count Valid 14000
Hash Chain Length 1
Find Copy Count 1770
Latch (Share) 0
NAME VALUE
Block Size (Bytes) 1024
Block Count Maximum 8192
Block Count Current 6000
Result Size Maximum
(Blocks) 204
Create Count Success 1000
Create Count Failure 0
Find Count 20000
Invalidation Count 30
Delete Count Invalid 155
Delete Count Valid 0
Hash Chain Length 1
Find Copy Count 1770
Latch (Share) 0
Case 2 Recommendation engine Auto-expiring
SHELFLIFE = read-consistent result life time in seconds
SNAPSHOT = NON-read-consistent result life time in seconds
Auto-expiring Snapshot Internals
No dependencies for
RC_TAB
Auto-expiring Snapshot Internals
Auto-expiring Snapshot Internals
Auto-expiring Snapshot Internals
No records for RC_TAB
It happens in 5 minutes usually!
Restrictions
• Dictionary tables/views (sys. schema)
• Temporary and external tables
• Sequences (nextval and curval columns)
• Non-deterministic SQL functions:
current_date, current_time, local_timestamp, sys_guid…
• Non-deterministic PL/SQL function:
dbms_random, hand-written, …
• Pipelined functions (returning rowsets)
• Only IN parameter with simple data types: no CLOB, BLOB, records, objects,
collections, ref cursors
• The same for return result
Result cache inside Oracle
Where in Oracle
Jobs related stuff
SELECT /*+ NO_STATEMENT_QUEUING RESULT_CACHE (SYSOBJ=TRUE) */
OBJ#,SCHEDULE_LMT,PRIO,JOB_WEIGHT FROM "SYS"."SCHEDULER$_PROGRAM" WHERE bla-bla-bla
APEX
SELECT /*+result_cache*/ NAME, VALUE FROM WWV_FLOW_PLATFORM_PREFS
WHERE NAME IN ( 'QOS_MAX_WORKSPACE_REQUESTS', 'QOS_MAX_SESSION_REQUESTS', bla-bla-bla
select *
from v$sqlarea
where upper(sql_fulltext) like
'%RESULT_CACHE%‘
Result cache inside Oracle
Dynamic sampling
SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS RESULT_CACHE(SNAPSHOT=3600)
opt_param('parallel_execution_enabled', 'false') NO_PARALLEL(SAMPLESUB)
NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),:"SYS_B_0"),
NVL(SUM(C2),:"SYS_B_1") FROM (bla-bla-bla
Adaptive statistic
SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring
optimizer_features_enable(default) no_parallel RESULT_CACHE(SNAPSHOT=3600) */
NVL(SUM(C1),0) FROM (SELECT /*+ qb_name("innerQuery") NO_INDEX_FFS bla-bla-bla
Oracle internals for result cache
1
2
3
Database result cache pros&cons
Pros:
- Minimal or no intervention at all into application code
- No DB stored logic required
- Read consistency
- Fast in certain scenarios
Cons:
- Cache consumes expensive memory from database
- Should be properly set up
- Sometimes could lead even to performance degradation
- Vendor specific
We are not alone
1. Не расчитан размер кэша Troubleshooting Latch Free (Result Cache: RC Latch) Issues When The Result Cache is Full (Doc ID 2143739.1)
2. Блокировки Patch 14665745: DBMS_RESULT_CACHE.MEMORY_REPORT LOCKS OUT WRITERS TO THE RESULT CACHE
Bug 19846066 : LATCH FREE IN RESULT CACHE WHEN QUERYING V$RESULT_CACHE_OBJECTS
Patch 14665745: DBMS_RESULT_CACHE.MEMORY_REPORT LOCKS OUT WRITERS TO THE RESULT CACHE
3. Не проверено исчезновение ошибки после накатов патчей
We are not alone
Result_cache_max_size /*+ result_cache*/ removed or
dbms_result_cache.add_to_black_list or
/*+ no_result_cache*/
Black lists
Black lists
Black lists
There is no record with type = Result! But Dependency still in place !
Black lists
Black lists
1. Alive during runtime
2. Valid only for 12.2 Oracle
We are not alone: Lessons learned
Best approach to roll out updates:
1. Adjust result cache memory
2. Disable cache before bulk loading
dbms_result_cache.bypass;
data ingestion scripts;
Issue dbms_result_cache.bypass(false);
Client side result cache
DB
Client cache is ON
Client driver
2. Configuration message
Connection thread 1
Connection
thread 2
Result cache
3. SQL
Statistics messages
1. connect
1. connect 3.
Cached
SQL 1
4. Results
4. Results
5. Cached
SQL 1
6. Results
CACHE SIZE
Client side result cache Invalidation Case 1
DB
Client cache is ON
Client driver
Connection thread 1
Result cache
1. non-cached SQL
2. Invalid resultset list
2. Results
t last cached SQL 1 < Invalidation lag
Invalidation rules = Invalidation rules for Server Side Result Cache
Invalidation
Client side result cache Invalidation Case 1
DB
Client cache is ON
Client driver
Result cache
1. Get invalid result set list
2. Invalid result set list
Current time = t Invalidation message + Invalidation lag
Invalidation rules = Invalidation rules for Server Side Result Cache
Invalidation
Client side result cache Configuration
Parameter Purpose
CLIENT_RESULT_CACHE_LAG maximum time in milliseconds that client result cache can lag behind
changes in the database that affect its result sets. Default 3000 milliseconds
CLIENT_RESULT_CACHE_SIZE the maximum size of the client result set cache for each client process.
Default 0 – not active, min - 32KB, max – 2G
Client side result cache
Client side result cache
Client side result cache
NAME VALUE
Block Size (Bytes) 256
Block Count Maximum 256
Block Count Current 3
Create Count Success 1
Create Count Failure 0
Find Count 9
Invalidation Count 0
Delete Count Invalid 0
Delete Count Valid 0
= 10
Client side Result cache pros&cons
Pros:
- Cheap client memory
- JDBC and .NET drivers
- Minimal or no intervention at all into application code
- Significant CPU, I/O, network roundtrip reduction
- No extra caching layer/API is required
- No latches
Cons:
- Eventual read consistency with delay
- Oracle OCI client should be installed
- Vendor specific
- 2 Gb per client limitation
- Not enough information about production
- Overrides server result cache
Hand-made cache bad scenario
• Cache invalidation in case of data changes is a must
• Database stored logic isn’t in favor
• There is strong database developers team
• PL/SQL business logic is already in place
• There are limitations which don’t permit others caching techniques
Hand-made cache good scenario
Server side Result cache bad scenario
• SQL populates a large number of distinct result sets
• SQL statement takes more than _RESULT_CACHE_TIMEOUT
• Cached results are requested very often from many sessions
Result cache good scenario
• Queries have a limited number of possible result sets
• Result sets are relatively small (200-300 rows)
• SQL statements are relatively expensive
• Queries run against relatively static tables
• There is a strong DBA
Client side Result cache bad scenario
• Instant cache invalidation in case of data changes is a must
• Thin drivers are required
• There is fine middle-tier developers team
• Middle tier uses a lot of SQL without any caching layer
• There are DB server hardware limitations
Hand-made cache good scenario
Conclusion
1. Estimate memory size properly:
volume (Mb) = (
number of result rows * block size+
avg number of apex/scheduler usage +
avg number adaptive statistic usage
)
2. Add auto-cleaning capabilities with (snapshot + shelflife) options
3. Bypass the cache during bulk data changes
4. Adjust _result_cache_timeout to expected queries duration
5. Never use FORCE mode for all database
6. Check does FORCE used as expected in table annotations
7. Decide about adaptive statistics: _optimizer_ads_use_result_cache = false
Q&A

More Related Content

What's hot

OOUG: Oracle transaction locking
OOUG: Oracle transaction lockingOOUG: Oracle transaction locking
OOUG: Oracle transaction lockingKyle Hailey
 
Ch17 introduction to transaction processing concepts and theory
Ch17 introduction to transaction processing concepts and theoryCh17 introduction to transaction processing concepts and theory
Ch17 introduction to transaction processing concepts and theorymeenatchi selvaraj
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning Fundamentals
Enkitec
 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Aaron Shilo
 
Oracle Database in-Memory Overivew
Oracle Database in-Memory OverivewOracle Database in-Memory Overivew
Oracle Database in-Memory Overivew
Maria Colgan
 
Chapter19
Chapter19Chapter19
Chapter19
gourab87
 
Chapter 7 - Deadlocks
Chapter 7 - DeadlocksChapter 7 - Deadlocks
Chapter 7 - Deadlocks
Wayne Jones Jnr
 
Extreme Replication - Performance Tuning Oracle GoldenGate
Extreme Replication - Performance Tuning Oracle GoldenGateExtreme Replication - Performance Tuning Oracle GoldenGate
Extreme Replication - Performance Tuning Oracle GoldenGate
Bobby Curtis
 
Deep Dive with Spark Streaming - Tathagata Das - Spark Meetup 2013-06-17
Deep Dive with Spark Streaming - Tathagata  Das - Spark Meetup 2013-06-17Deep Dive with Spark Streaming - Tathagata  Das - Spark Meetup 2013-06-17
Deep Dive with Spark Streaming - Tathagata Das - Spark Meetup 2013-06-17
spark-project
 
Oracle RAC - Roadmap for New Features
Oracle RAC - Roadmap for New FeaturesOracle RAC - Roadmap for New Features
Oracle RAC - Roadmap for New Features
Markus Michalewicz
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
Flink Forward
 
Oracle statistics by example
Oracle statistics by exampleOracle statistics by example
Oracle statistics by example
Mauro Pagano
 
Pl sql student guide v 1
Pl sql student guide v 1Pl sql student guide v 1
Pl sql student guide v 1
Nexus
 
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Databricks
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architectureAmit Bhalla
 
Performance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and UnderscoresPerformance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and Underscores
Jitendra Singh
 
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RACThe Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
Markus Michalewicz
 
153 Oracle dba interview questions
153 Oracle dba interview questions153 Oracle dba interview questions
153 Oracle dba interview questions
Sandeep Sharma IIMK Smart City,IoT,Bigdata,Cloud,BI,DW
 
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
Sandesh Rao
 
Oracle backup and recovery
Oracle backup and recoveryOracle backup and recovery
Oracle backup and recoveryYogiji Creations
 

What's hot (20)

OOUG: Oracle transaction locking
OOUG: Oracle transaction lockingOOUG: Oracle transaction locking
OOUG: Oracle transaction locking
 
Ch17 introduction to transaction processing concepts and theory
Ch17 introduction to transaction processing concepts and theoryCh17 introduction to transaction processing concepts and theory
Ch17 introduction to transaction processing concepts and theory
 
Oracle Performance Tuning Fundamentals
Oracle Performance Tuning FundamentalsOracle Performance Tuning Fundamentals
Oracle Performance Tuning Fundamentals
 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
 
Oracle Database in-Memory Overivew
Oracle Database in-Memory OverivewOracle Database in-Memory Overivew
Oracle Database in-Memory Overivew
 
Chapter19
Chapter19Chapter19
Chapter19
 
Chapter 7 - Deadlocks
Chapter 7 - DeadlocksChapter 7 - Deadlocks
Chapter 7 - Deadlocks
 
Extreme Replication - Performance Tuning Oracle GoldenGate
Extreme Replication - Performance Tuning Oracle GoldenGateExtreme Replication - Performance Tuning Oracle GoldenGate
Extreme Replication - Performance Tuning Oracle GoldenGate
 
Deep Dive with Spark Streaming - Tathagata Das - Spark Meetup 2013-06-17
Deep Dive with Spark Streaming - Tathagata  Das - Spark Meetup 2013-06-17Deep Dive with Spark Streaming - Tathagata  Das - Spark Meetup 2013-06-17
Deep Dive with Spark Streaming - Tathagata Das - Spark Meetup 2013-06-17
 
Oracle RAC - Roadmap for New Features
Oracle RAC - Roadmap for New FeaturesOracle RAC - Roadmap for New Features
Oracle RAC - Roadmap for New Features
 
Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
 
Oracle statistics by example
Oracle statistics by exampleOracle statistics by example
Oracle statistics by example
 
Pl sql student guide v 1
Pl sql student guide v 1Pl sql student guide v 1
Pl sql student guide v 1
 
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architecture
 
Performance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and UnderscoresPerformance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and Underscores
 
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RACThe Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
 
153 Oracle dba interview questions
153 Oracle dba interview questions153 Oracle dba interview questions
153 Oracle dba interview questions
 
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
15 Troubleshooting tips and Tricks for Database 21c - KSAOUG
 
Oracle backup and recovery
Oracle backup and recoveryOracle backup and recovery
Oracle backup and recovery
 

Similar to Oracle Result Cache deep dive

100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Oracle result cache highload 2017
Oracle result cache highload 2017Oracle result cache highload 2017
Oracle result cache highload 2017
Alexander Tokarev
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWR
pasalapudi
 
SQL Server Wait Types Everyone Should Know
SQL Server Wait Types Everyone Should KnowSQL Server Wait Types Everyone Should Know
SQL Server Wait Types Everyone Should Know
Dean Richards
 
Investigate SQL Server Memory Like Sherlock Holmes
Investigate SQL Server Memory Like Sherlock HolmesInvestigate SQL Server Memory Like Sherlock Holmes
Investigate SQL Server Memory Like Sherlock Holmes
Richard Douglas
 
01 oracle architecture
01 oracle architecture01 oracle architecture
01 oracle architecture
Smitha Padmanabhan
 
Top 5 things to know about sql azure for developers
Top 5 things to know about sql azure for developersTop 5 things to know about sql azure for developers
Top 5 things to know about sql azure for developers
Ike Ellis
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it Fast
Barry Jones
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_features
AiougVizagChapter
 
Collaborate 2011-tuning-ebusiness-416502
Collaborate 2011-tuning-ebusiness-416502Collaborate 2011-tuning-ebusiness-416502
Collaborate 2011-tuning-ebusiness-416502
kaziul Islam Bulbul
 
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/DayDatadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
C4Media
 
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL ServerGeek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
IDERA Software
 
Performance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL DatabasePerformance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL Database
Tung Nguyen Thanh
 
Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014
John Beresniewicz
 
ASH and AWR Performance Data by Kellyn Pot'Vin
ASH and AWR Performance Data by Kellyn Pot'VinASH and AWR Performance Data by Kellyn Pot'Vin
ASH and AWR Performance Data by Kellyn Pot'VinEnkitec
 
OracleStore: A Highly Performant RawStore Implementation for Hive Metastore
OracleStore: A Highly Performant RawStore Implementation for Hive MetastoreOracleStore: A Highly Performant RawStore Implementation for Hive Metastore
OracleStore: A Highly Performant RawStore Implementation for Hive Metastore
DataWorks Summit
 
Ash and awr performance data2
Ash and awr performance data2Ash and awr performance data2
Ash and awr performance data2
Kellyn Pot'Vin-Gorman
 
Sql server performance tuning and optimization
Sql server performance tuning and optimizationSql server performance tuning and optimization
Sql server performance tuning and optimization
Manish Rawat
 
Presentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - WebinarPresentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - Webinar
Orient Technologies
 

Similar to Oracle Result Cache deep dive (20)

100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Oracle result cache highload 2017
Oracle result cache highload 2017Oracle result cache highload 2017
Oracle result cache highload 2017
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWR
 
SQL Server Wait Types Everyone Should Know
SQL Server Wait Types Everyone Should KnowSQL Server Wait Types Everyone Should Know
SQL Server Wait Types Everyone Should Know
 
Investigate SQL Server Memory Like Sherlock Holmes
Investigate SQL Server Memory Like Sherlock HolmesInvestigate SQL Server Memory Like Sherlock Holmes
Investigate SQL Server Memory Like Sherlock Holmes
 
01 oracle architecture
01 oracle architecture01 oracle architecture
01 oracle architecture
 
Top 5 things to know about sql azure for developers
Top 5 things to know about sql azure for developersTop 5 things to know about sql azure for developers
Top 5 things to know about sql azure for developers
 
Day 7 - Make it Fast
Day 7 - Make it FastDay 7 - Make it Fast
Day 7 - Make it Fast
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_features
 
Collaborate 2011-tuning-ebusiness-416502
Collaborate 2011-tuning-ebusiness-416502Collaborate 2011-tuning-ebusiness-416502
Collaborate 2011-tuning-ebusiness-416502
 
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/DayDatadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
 
11g R2
11g R211g R2
11g R2
 
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL ServerGeek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
Geek Sync I Need for Speed: In-Memory Databases in Oracle and SQL Server
 
Performance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL DatabasePerformance Tuning And Optimization Microsoft SQL Database
Performance Tuning And Optimization Microsoft SQL Database
 
Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014Ash architecture and advanced usage rmoug2014
Ash architecture and advanced usage rmoug2014
 
ASH and AWR Performance Data by Kellyn Pot'Vin
ASH and AWR Performance Data by Kellyn Pot'VinASH and AWR Performance Data by Kellyn Pot'Vin
ASH and AWR Performance Data by Kellyn Pot'Vin
 
OracleStore: A Highly Performant RawStore Implementation for Hive Metastore
OracleStore: A Highly Performant RawStore Implementation for Hive MetastoreOracleStore: A Highly Performant RawStore Implementation for Hive Metastore
OracleStore: A Highly Performant RawStore Implementation for Hive Metastore
 
Ash and awr performance data2
Ash and awr performance data2Ash and awr performance data2
Ash and awr performance data2
 
Sql server performance tuning and optimization
Sql server performance tuning and optimizationSql server performance tuning and optimization
Sql server performance tuning and optimization
 
Presentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - WebinarPresentation of OrientDB v2.2 - Webinar
Presentation of OrientDB v2.2 - Webinar
 

More from Alexander Tokarev

Rate limits and all about
Rate limits and all aboutRate limits and all about
Rate limits and all about
Alexander Tokarev
 
rnd teams.pptx
rnd teams.pptxrnd teams.pptx
rnd teams.pptx
Alexander Tokarev
 
FinOps for private cloud
FinOps for private cloudFinOps for private cloud
FinOps for private cloud
Alexander Tokarev
 
Graph ql and enterprise
Graph ql and enterpriseGraph ql and enterprise
Graph ql and enterprise
Alexander Tokarev
 
FinOps introduction
FinOps introductionFinOps introduction
FinOps introduction
Alexander Tokarev
 
Open Policy Agent for governance as a code
Open Policy Agent for governance as a code Open Policy Agent for governance as a code
Open Policy Agent for governance as a code
Alexander Tokarev
 
Relational databases for BigData
Relational databases for BigDataRelational databases for BigData
Relational databases for BigData
Alexander Tokarev
 
Cloud DWH deep dive
Cloud DWH deep diveCloud DWH deep dive
Cloud DWH deep dive
Alexander Tokarev
 
Cloud dwh
Cloud dwhCloud dwh
P9 speed of-light faceted search via oracle in-memory option by alexander tok...
P9 speed of-light faceted search via oracle in-memory option by alexander tok...P9 speed of-light faceted search via oracle in-memory option by alexander tok...
P9 speed of-light faceted search via oracle in-memory option by alexander tok...
Alexander Tokarev
 
Row Level Security in databases advanced edition
Row Level Security in databases advanced editionRow Level Security in databases advanced edition
Row Level Security in databases advanced edition
Alexander Tokarev
 
Row level security in enterprise applications
Row level security in enterprise applicationsRow level security in enterprise applications
Row level security in enterprise applications
Alexander Tokarev
 
Inmemory BI based on opensource stack
Inmemory BI based on opensource stackInmemory BI based on opensource stack
Inmemory BI based on opensource stack
Alexander Tokarev
 
Oracle InMemory hardcore edition
Oracle InMemory hardcore editionOracle InMemory hardcore edition
Oracle InMemory hardcore edition
Alexander Tokarev
 
Tagging search solution design Advanced edition
Tagging search solution design Advanced editionTagging search solution design Advanced edition
Tagging search solution design Advanced edition
Alexander Tokarev
 
Faceted search with Oracle InMemory option
Faceted search with Oracle InMemory optionFaceted search with Oracle InMemory option
Faceted search with Oracle InMemory option
Alexander Tokarev
 
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
Alexander Tokarev
 
Tagging search solution design
Tagging search solution designTagging search solution design
Tagging search solution design
Alexander Tokarev
 
Oracle JSON internals advanced edition
Oracle JSON internals advanced editionOracle JSON internals advanced edition
Oracle JSON internals advanced edition
Alexander Tokarev
 
Oracle json caveats
Oracle json caveatsOracle json caveats
Oracle json caveats
Alexander Tokarev
 

More from Alexander Tokarev (20)

Rate limits and all about
Rate limits and all aboutRate limits and all about
Rate limits and all about
 
rnd teams.pptx
rnd teams.pptxrnd teams.pptx
rnd teams.pptx
 
FinOps for private cloud
FinOps for private cloudFinOps for private cloud
FinOps for private cloud
 
Graph ql and enterprise
Graph ql and enterpriseGraph ql and enterprise
Graph ql and enterprise
 
FinOps introduction
FinOps introductionFinOps introduction
FinOps introduction
 
Open Policy Agent for governance as a code
Open Policy Agent for governance as a code Open Policy Agent for governance as a code
Open Policy Agent for governance as a code
 
Relational databases for BigData
Relational databases for BigDataRelational databases for BigData
Relational databases for BigData
 
Cloud DWH deep dive
Cloud DWH deep diveCloud DWH deep dive
Cloud DWH deep dive
 
Cloud dwh
Cloud dwhCloud dwh
Cloud dwh
 
P9 speed of-light faceted search via oracle in-memory option by alexander tok...
P9 speed of-light faceted search via oracle in-memory option by alexander tok...P9 speed of-light faceted search via oracle in-memory option by alexander tok...
P9 speed of-light faceted search via oracle in-memory option by alexander tok...
 
Row Level Security in databases advanced edition
Row Level Security in databases advanced editionRow Level Security in databases advanced edition
Row Level Security in databases advanced edition
 
Row level security in enterprise applications
Row level security in enterprise applicationsRow level security in enterprise applications
Row level security in enterprise applications
 
Inmemory BI based on opensource stack
Inmemory BI based on opensource stackInmemory BI based on opensource stack
Inmemory BI based on opensource stack
 
Oracle InMemory hardcore edition
Oracle InMemory hardcore editionOracle InMemory hardcore edition
Oracle InMemory hardcore edition
 
Tagging search solution design Advanced edition
Tagging search solution design Advanced editionTagging search solution design Advanced edition
Tagging search solution design Advanced edition
 
Faceted search with Oracle InMemory option
Faceted search with Oracle InMemory optionFaceted search with Oracle InMemory option
Faceted search with Oracle InMemory option
 
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
Oracle JSON treatment evolution - from 12.1 to 18 AOUG-2018
 
Tagging search solution design
Tagging search solution designTagging search solution design
Tagging search solution design
 
Oracle JSON internals advanced edition
Oracle JSON internals advanced editionOracle JSON internals advanced edition
Oracle JSON internals advanced edition
 
Oracle json caveats
Oracle json caveatsOracle json caveats
Oracle json caveats
 

Recently uploaded

Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
rickgrimesss22
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
Roshan Dwivedi
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
Octavian Nadolu
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 

Recently uploaded (20)

Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxTop Features to Include in Your Winzo Clone App for Business Growth (4).pptx
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptx
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
Launch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in MinutesLaunch Your Streaming Platforms in Minutes
Launch Your Streaming Platforms in Minutes
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Artificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension FunctionsArtificia Intellicence and XPath Extension Functions
Artificia Intellicence and XPath Extension Functions
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 

Oracle Result Cache deep dive

  • 1. 100500 способов кэширования в Oracle Database или как достичь максимальной скорости обработки запросов минимальной ценой DataArt experience
  • 2. Agenda • Database caches • Result cache • Result cache in DBMSs different from Oracle • Hand-made Oracle result cache implementation • Embedded Oracle result cache implementation • Performance tests • Limitations and caveats • Cases • Conclusion
  • 3. Hot news from trenches!!!
  • 4. Agenda • Retailer case • Finance case • Limitations and caveats • Loyalty case • Conclusion
  • 5. Database caches • Buffer cache – cache for data pages/data blocks • Statement cache – cache of queries plan • Result cache – rows from queries • OS cache
  • 6. Retailer case DWH report Oracle 11 20 Tb 300 users 20 min 350 distinct SKU 5000 rows Select sku_id, Shop_id, sku_detail(sku_id), ….. from dim_sales where …. Order by shop_id…….. Create or replace function sku_detail(sku_id number) return number is Select 1 If Select 2 Else Select 3 … … … Select 30 End; 400 lines of SQL+PL/SQL 0.2 second per SKU 5000 * 0.2 = 1000 seconds
  • 7. Retailer case Hand-made cache DWH report Oracle 11 20 Tb 300 users 4 min 350 distinct SKU 5000 rows Select sku_id, Shop_id, sku_detail(sku_id), ….. from dim_sales where …. Order by shop_id…….. Create or replace function sku_full(sku_id number) return number is Select 1 If Select 2 Else Select 3 … … … Select 30 End; 400 lines of SQL+PL/SQL 0.2 second per SKU 350* 0.2 = 70 seconds CREATE PACKAGE BODY cache_sku AS TYPE sku_cache_aat IS TABLE OF number INDEX BY PLS_INTEGER; cache sku_cache_aat; end cache_sku; cache FUNCTION sku_detail(sku number) RETURN number IS BEGIN IF NOT cache.EXISTS(sku) THEN cache(sku) := sku_full(sku); END IF; RETURN cache(sku); END sku_detail;
  • 9. Hand-made cache Pros: - Very fast - Easy to implement - No configuration efforts - No intra-process sync logic burden Cons: - Cache consumes expensive memory from DB - Memory is allocated per-session basis - PL/SQL or other DB stored logic is required - Vendor specific - No automatic invalidation
  • 10. Hand-made cache Not Oracle No cache
  • 11. Hand-made cache Not Oracle With propopulated cache
  • 12. Case 2 Recommendation engine Oracle main Oracle DG Application server Application server Load balancer Client browser 400 users 1000 requests per second Hazelcast
  • 13. Case 2 Recommendation engine Recommendation rules 1. 10 best recommendations by text match 2. Multilanguage capabilities 3. Should be taken from 12 previous recognized documents of the client 4. If there is no documents – from all clients of the same industry 5. If no in same industry – from clients similar by margin and e.t.c max 100 rows 2-3 columns. Parameter length – 100 letter. max 10 users
  • 14. Case 2 Recommendation engine 1. Recommendations work slow – 5 minutes for 1 document 2. To risky to change JAVA
  • 15. 1. Do not use any cache to not care about expiration 2. Use purchased Oracle options of customer 3. Use “in-Memory for beggars” - KEEP pool for full text search
  • 16. 1. Table with recommendations was too big 2. New DR$ tables in case of frequent index setting changes 3. KEEP pool warming is complicated (iot, lob, small table threshold, etc.) 4. DBA was reluctant to extra pool management, warming stored procedure, additional permissions 5. Performance gain was not enough – 90 seconds per document
  • 17. 1. Table with recommendations was too big 2. New DR$ tables in case of frequent index setting changes 3. KEEP pool warming is complicated (iot, lob, small table threshold, etc.) 4. DBA was reluctant to extra pool management, warming stored procedure, additional permissions 5. Performance gain was not enough – 90 seconds per document
  • 18. Case 2 Recommendation engine Solution 1. Use database to cache queries 2. Use Oracle Database Result Cache Why 1. SQL to get recommendation works 0.5 sec, no options for query tuning – Oracle full text search engine + it is really heavy SQL 2. Same parameters appear at least 5-10 times – cache will be used 3. Data to get recommendations is refreshed 1 hour basis 4. PL/SQL is prohibited
  • 19. Oracle Result Cache Oracle result cache 1. Memory area to share query result sets 2. Read consistent – auto invalidation during DML 3. Automatic dependency tracking 4. Minimal changes in the application 5. There is an option how not to change application 6. Could cache PL/SQL logic as well
  • 20. Result Cache Way 1 ID of result First execution Second execution
  • 21. Result Cache Table annotations No query changes but RC works
  • 22. Result Cache Table annotations No annotation on JOBS table – no result cache
  • 23. Result Cache Table annotations 2 annotations –result cache works
  • 24. Result Cache Dependency Tracking No in dependency list
  • 30. Result Cache Invalidation Cache is ignored for current session Good for others sessions
  • 31. Result Cache Invalidation Invalidated after commit for others sessions!
  • 32. 1. SELECT FOR UPDATE + COMMIT statements even there were no changes at all: - no DML statement were issued - DML updated 0 rows 2. Update/delete statements in a table under result cache with no records affected + an update to any table where rows were affected + COMMIT. SQL Result Cache Unexpected Invalidation WTF!!!
  • 33. SQL Result Cache Unexpected Invalidation 3. An unindexed foreign key + delete/update/insert a record from parent table 4. Changes in an arbitrary partition even if a RC query deals with a different single partition data. Table level tracking only.
  • 34. Unexpected PL/SQL Invalidation Quiz How it is possible for equal calls?
  • 35. Unexpected PL/SQL Invalidation Quiz No exception handler Explicit exception in case of error!
  • 37. Unexpected PL/SQL Invalidation No-invalidation style – always return value!!!
  • 40. Case 2 Recommendation engine Final solution 1. Do not use annotations – not all queries should be cached 2. Use /*+ result_cache*/ for long-running query Performance is tested. Document recognition – 30 seconds. Time for production
  • 41. Case 2 Recommendation engine Early morning Level 3 support Production incident Severity 1 Users can’t provide document recognition. Recognition takes 20 minutes at least. Sessions hangs. Regards, L2 support team.
  • 42. Case 2 Recommendation engine • Active user count: 40 • Row count: 300 • Columns count: 5-8 • Parameter length: 300 • Database active session count: 120 = 40 * 3 X5 more!
  • 43. Monitoring features View Name Description V$RESULT_CACHE_STATISTICS Lists cache settings and memory usage statistics V$RESULT_CACHE_MEMORY Lists all the memory blocks and corresponding statistics V$RESULT_CACHE_OBJECTS Lists all the objects(cached results and dependencies) along with their attributes V$RESULT_CACHE_DEPENDENCY Lists the dependency details between the cached results and dependencies V$SQLAREA Lists SQL statements issued inside Oracle database
  • 44. Management features Procedure Name Description BYPASS Instruction to ignore result cache: for current session or for all DB FLUSH Clean cache MEMORY_REPORT Memory detail report STATUS Checks the status INVALIDATE Invalidates the specified result-set object Package: DBMS_RESULT_CACHE
  • 46. Case 2 Recommendation engine Investigations Strange queries for 40 small tables each minute: ETL
  • 47. Case 2 Recommendation engine Investigations Result cache annotation Still 20 minutes per document 
  • 48. Case 2 Recommendation engine We have received very positive feedback about Oracle Adaptive Statistic feature from customer with respect to adaptive plans. It has proved to be very able at improving system performance for a huge range of workloads. (c) Oracle 20000 queries 10 minutes per document!!! Via bug? WTF!!!
  • 49. Result cache latches Latches are Oracle-internal low-level locks that protect the memory structures of the system global area (SGA) against simultaneous accesses.
  • 51. Result cache latches Type 1 When sets First row of dataset is placed in Result Cache When release Last row of dataset is placed in Result Cache Who waits Sessions with same SQL which requested the latch How much _RESULT_CACHE_TIMEOUT – 10 seconds. Result cache bypassed after timeout.
  • 52. Result cache latches Type 2 When sets First row of dataset is requested from Result Cache When release Last row of dataset is read from Result Cache Who waits Sessions with same SQL which requested the latch How much It depends 
  • 53. Result cache latches Latches not only makes SQL to wait but consumes CPU. There is no options to get rid of result cache latches – slow for concurrent environment.. Be ready to convince DBA latches wait time saves DB time.
  • 54. Result cache statistics NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 4096 Block Count Current 4096 Result Size Maximum (Blocks) 204 Create Count Success 500 Create Count Failure 0 Find Count 20000 Invalidation Count 10000 Delete Count Invalid 155 Delete Count Valid 14000 Hash Chain Length 1 Find Copy Count 1770 Latch (Share) 0 They are equal – the cache is full!!! Proper results are deleted
  • 55. Memory estimate Result Cache Size = row width (bytes)* expected row count NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 4096 Block Count Current 4096 Memory allocated by blocks!!! Result Cache Size = block size (if fits in 1024) * expected row count
  • 59. Administration Parameter Purpose RESULT_CACHE_MAX_SIZE memory allocated to the server result cache in bytes. default – 0 bytes RESULT_CACHE_MAX_RESULT maximum amount of server result cache memory (in percent) that can be used for a single result. The default value is 5%. RESULT_CACHE_MODE Default is MANUAL which means that the cache should be requested explicitly via the RESULT_CACHE hint _RESULT_CACHE_TIMEOUT (undocumented) Maximum time a session request for a latch. Default 10 sec. 6 minutes per document!!!
  • 60. Case 2 Recommendation engine NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 4096 Block Count Current 4096 Result Size Maximum (Blocks) 204 Create Count Success 500 Create Count Failure 0 Find Count 20000 Invalidation Count 10000 Delete Count Invalid 155 Delete Count Valid 14000 Hash Chain Length 1 Find Copy Count 1770 Latch (Share) 0 A lot of updates on source tables
  • 61. Case 2 Recommendation engine 1. Materialize recommendations 2. Refresh on hourly basis
  • 62. Final statistics for result cache 40 seconds per document!!! NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 4096 Block Count Current 4096 Result Size Maximum (Blocks) 204 Create Count Success 500 Create Count Failure 0 Find Count 20000 Invalidation Count 10000 Delete Count Invalid 155 Delete Count Valid 14000 Hash Chain Length 1 Find Copy Count 1770 Latch (Share) 0 NAME VALUE Block Size (Bytes) 1024 Block Count Maximum 8192 Block Count Current 6000 Result Size Maximum (Blocks) 204 Create Count Success 1000 Create Count Failure 0 Find Count 20000 Invalidation Count 30 Delete Count Invalid 155 Delete Count Valid 0 Hash Chain Length 1 Find Copy Count 1770 Latch (Share) 0
  • 63. Case 2 Recommendation engine Auto-expiring SHELFLIFE = read-consistent result life time in seconds SNAPSHOT = NON-read-consistent result life time in seconds
  • 64. Auto-expiring Snapshot Internals No dependencies for RC_TAB
  • 67. Auto-expiring Snapshot Internals No records for RC_TAB It happens in 5 minutes usually!
  • 68. Restrictions • Dictionary tables/views (sys. schema) • Temporary and external tables • Sequences (nextval and curval columns) • Non-deterministic SQL functions: current_date, current_time, local_timestamp, sys_guid… • Non-deterministic PL/SQL function: dbms_random, hand-written, … • Pipelined functions (returning rowsets) • Only IN parameter with simple data types: no CLOB, BLOB, records, objects, collections, ref cursors • The same for return result
  • 69. Result cache inside Oracle Where in Oracle Jobs related stuff SELECT /*+ NO_STATEMENT_QUEUING RESULT_CACHE (SYSOBJ=TRUE) */ OBJ#,SCHEDULE_LMT,PRIO,JOB_WEIGHT FROM "SYS"."SCHEDULER$_PROGRAM" WHERE bla-bla-bla APEX SELECT /*+result_cache*/ NAME, VALUE FROM WWV_FLOW_PLATFORM_PREFS WHERE NAME IN ( 'QOS_MAX_WORKSPACE_REQUESTS', 'QOS_MAX_SESSION_REQUESTS', bla-bla-bla select * from v$sqlarea where upper(sql_fulltext) like '%RESULT_CACHE%‘
  • 70. Result cache inside Oracle Dynamic sampling SELECT /* OPT_DYN_SAMP */ /*+ ALL_ROWS RESULT_CACHE(SNAPSHOT=3600) opt_param('parallel_execution_enabled', 'false') NO_PARALLEL(SAMPLESUB) NO_PARALLEL_INDEX(SAMPLESUB) NO_SQL_TUNE */ NVL(SUM(C1),:"SYS_B_0"), NVL(SUM(C2),:"SYS_B_1") FROM (bla-bla-bla Adaptive statistic SELECT /* DS_SVC */ /*+ dynamic_sampling(0) no_sql_tune no_monitoring optimizer_features_enable(default) no_parallel RESULT_CACHE(SNAPSHOT=3600) */ NVL(SUM(C1),0) FROM (SELECT /*+ qb_name("innerQuery") NO_INDEX_FFS bla-bla-bla
  • 71. Oracle internals for result cache 1 2 3
  • 72. Database result cache pros&cons Pros: - Minimal or no intervention at all into application code - No DB stored logic required - Read consistency - Fast in certain scenarios Cons: - Cache consumes expensive memory from database - Should be properly set up - Sometimes could lead even to performance degradation - Vendor specific
  • 73. We are not alone
  • 74. 1. Не расчитан размер кэша Troubleshooting Latch Free (Result Cache: RC Latch) Issues When The Result Cache is Full (Doc ID 2143739.1) 2. Блокировки Patch 14665745: DBMS_RESULT_CACHE.MEMORY_REPORT LOCKS OUT WRITERS TO THE RESULT CACHE Bug 19846066 : LATCH FREE IN RESULT CACHE WHEN QUERYING V$RESULT_CACHE_OBJECTS Patch 14665745: DBMS_RESULT_CACHE.MEMORY_REPORT LOCKS OUT WRITERS TO THE RESULT CACHE 3. Не проверено исчезновение ошибки после накатов патчей
  • 75. We are not alone Result_cache_max_size /*+ result_cache*/ removed or dbms_result_cache.add_to_black_list or /*+ no_result_cache*/
  • 78. Black lists There is no record with type = Result! But Dependency still in place !
  • 80. Black lists 1. Alive during runtime 2. Valid only for 12.2 Oracle
  • 81. We are not alone: Lessons learned Best approach to roll out updates: 1. Adjust result cache memory 2. Disable cache before bulk loading dbms_result_cache.bypass; data ingestion scripts; Issue dbms_result_cache.bypass(false);
  • 82. Client side result cache DB Client cache is ON Client driver 2. Configuration message Connection thread 1 Connection thread 2 Result cache 3. SQL Statistics messages 1. connect 1. connect 3. Cached SQL 1 4. Results 4. Results 5. Cached SQL 1 6. Results CACHE SIZE
  • 83. Client side result cache Invalidation Case 1 DB Client cache is ON Client driver Connection thread 1 Result cache 1. non-cached SQL 2. Invalid resultset list 2. Results t last cached SQL 1 < Invalidation lag Invalidation rules = Invalidation rules for Server Side Result Cache Invalidation
  • 84. Client side result cache Invalidation Case 1 DB Client cache is ON Client driver Result cache 1. Get invalid result set list 2. Invalid result set list Current time = t Invalidation message + Invalidation lag Invalidation rules = Invalidation rules for Server Side Result Cache Invalidation
  • 85. Client side result cache Configuration Parameter Purpose CLIENT_RESULT_CACHE_LAG maximum time in milliseconds that client result cache can lag behind changes in the database that affect its result sets. Default 3000 milliseconds CLIENT_RESULT_CACHE_SIZE the maximum size of the client result set cache for each client process. Default 0 – not active, min - 32KB, max – 2G
  • 88. Client side result cache NAME VALUE Block Size (Bytes) 256 Block Count Maximum 256 Block Count Current 3 Create Count Success 1 Create Count Failure 0 Find Count 9 Invalidation Count 0 Delete Count Invalid 0 Delete Count Valid 0 = 10
  • 89. Client side Result cache pros&cons Pros: - Cheap client memory - JDBC and .NET drivers - Minimal or no intervention at all into application code - Significant CPU, I/O, network roundtrip reduction - No extra caching layer/API is required - No latches Cons: - Eventual read consistency with delay - Oracle OCI client should be installed - Vendor specific - 2 Gb per client limitation - Not enough information about production - Overrides server result cache
  • 90. Hand-made cache bad scenario • Cache invalidation in case of data changes is a must • Database stored logic isn’t in favor • There is strong database developers team • PL/SQL business logic is already in place • There are limitations which don’t permit others caching techniques Hand-made cache good scenario
  • 91. Server side Result cache bad scenario • SQL populates a large number of distinct result sets • SQL statement takes more than _RESULT_CACHE_TIMEOUT • Cached results are requested very often from many sessions Result cache good scenario • Queries have a limited number of possible result sets • Result sets are relatively small (200-300 rows) • SQL statements are relatively expensive • Queries run against relatively static tables • There is a strong DBA
  • 92. Client side Result cache bad scenario • Instant cache invalidation in case of data changes is a must • Thin drivers are required • There is fine middle-tier developers team • Middle tier uses a lot of SQL without any caching layer • There are DB server hardware limitations Hand-made cache good scenario
  • 93. Conclusion 1. Estimate memory size properly: volume (Mb) = ( number of result rows * block size+ avg number of apex/scheduler usage + avg number adaptive statistic usage ) 2. Add auto-cleaning capabilities with (snapshot + shelflife) options 3. Bypass the cache during bulk data changes 4. Adjust _result_cache_timeout to expected queries duration 5. Never use FORCE mode for all database 6. Check does FORCE used as expected in table annotations 7. Decide about adaptive statistics: _optimizer_ads_use_result_cache = false
  • 94. Q&A

Editor's Notes

  1. Добрый день. Меня зовут Александр и я занимаюсь в компании DataArt вопросами, связаными с базами данных как в части построения систем «с нуля», так и оптимизации имеющихся. Сегодня я представлю вам переработанную версию моего доклада с Higload-2017, посвященную различным кэшам в оракле. В ней будет ещё более технического трэша и боли. Итак, полетели!
  2. Итак, у нас сегодня штатная презентация по архитектуре очередного решения от СУБД Oracle для ускорения данных. Сегодня я буду рассказывать многих важных вещах таких как... Хотя не, слишком скучно.
  3. Ценность данной конференции в том, что тут рассказывается не о технических деталях, которые можно найти в google, а о практическим примерах их использования и их нюансах
  4. В данном докладе я буду рассказывать как устроена технология server side Result cache и чем она лучше чем самодельное кэширование на plsql на примерах двух проектов Компании DataArt. Далее мы подытожим результаты этих проектов и выработаем некие подходы к правильной работе с данной технологией. Так же очень поверхностно посмотрим, что могут предложить другие СУБД относительно кэширования результатов запросов. Вооруженные набором знаний мы попробуем понять причины сбоя в российской cloud системе расчёта лояльности, который имел недавно место быть по причине того самого result cache. У Оракла есть client side result cache, я поверхностно расскажу об его архитектуре, но без детализации – он сам по-себе тема отдельного доклада.
  5. Есть 3 основных вида кэшей в базах данных: кэш данных, кэш операторов и их планов и кэш результатов строк. Интересно заметить, что последний пункт из известных мне БД остался только в Oracle. В postgress result cache нет. Он присутствует только в стороннем продукте pgpool. Это связано с некими сложностями, которые мы рассмотрим ниже.
  6. Итак. Кейс 1. Хранилище ретейлера. Было хранилище и в нём был отчёт. Получение его занимало около 20 минут и пользователи печалились. В чем была интрига данного отчёта? В нём на 5000 строк данных было 350 уникальных товаров, но для каждой строчки вызывалась функция получения информациии по товару. Функция по коду была довольно сложная, тяжело поддающаяся рефакторингу и многие вещи в ней было просто боязно переписывать. Так как система находилась на поддержке, то использовать что-то новое типа embedded result cache было запрещено, поэтому был использован стандартный подход с hand-made кэшированием.
  7. Итак, мы переименовали долгую функцию, а вместо нее создали пакет и функцию, которая использует ассоциативный массив в данном пакете. Данный массив это фактически on demand cache. Если в нём данных нет, то происходит вызов функции.
  8. Важно понимать, в какой из областей памяти расположены коллекции. Помещаются они в области памяти, которая называется PGA, выделяемой под каждую сессию. Именно это определяет их достоинства и недостатки.
  9. Итак, самодельные кэши. Плюсы очевидны: легко запрограммировать, никакой конфигурации, нет необходимости думать о синхронизации, да они просто быстрые! Минусы тоже понятны: если в проекте запрещена хранимая логика их невозможно использовать, нет механизма автоматической инвалидации и так как память на кэш выделяется в рамках одной сессии БД, а не экземпляра, то её потребление завышено. Более того, в случае с вариантом использования connection pool необходимо не забывать сбрасывать кэши если для каждой сессии кэширование должно быть разное. Существуют ещё другие варианты hand-made кэшей на основе materialized views, temporary tables, но от них идёт бОльшая нагрузка на систему ввода-вывода, поэтому они не рассматриваются в данной презентации. Они более склонны для других баз данных. Варианты с oracle client cache и scalar subquery caching я тоже не рассказываю, так как по ним мало эффектных кейсов, но после доклада готов рассказать.
  10. Рассмотрим как часто решают задау кэширования в MsSQL для получения списка сопутствующих товаров.
  11. Таблицу GetRelatedItems пересчитывают, например, периодическим заданием или перед началом работы с соответствующим куском функционала. Если в ней данных нет, обращаются к сложному view. В целом, подход относительно похож, но работает не в памяти БД как в части получения данных, так и первичного заполнения, засчёт этого может быть медленнее. В общем, самодельные result cache активно используются, но иным подходом к реализации данной задачи является in-database result cache. Его и как не получилось quick win мы рассмотрим далее...
  12. Теперь рассмотрим второй кейс. Это система полуавтоматизированной обработки финансовой документации. Архитектура системы стандартна для Enterprise. Клиент, балансировщик, 2 сервера приложений для расчёта бизнес-логики, база данных Oracle и её резервный экземляр.
  13. Одной из множества задач является задача коррекции документов после их автоматического распознавания. Упрощённо говоря она выглядит так Есть документы, для каждого нераспознанного автоматически системой показателя предлагается набор показателей либо из предыдущих документов клиента, либо из похожей индустрии, либо по похожей доходности, при этом ещё сравнивает с распознанным значением, чтобы не предложить лишнее. Что важно документы многоязычные. Пользователь выбирает нужное значение и повторяет для каждой пустой строчки. Важно отметить, что показатели повторяются как в строках, так и столбцах. В целом задача по
  14. 1 неделя до релиза На обработку документа уходит минимум 5 минут Java код менять нельзя В команду разработки баз данных приходят с просьбой о помощи
  15. 1 неделя до релиза На обработку документа уходит минимум 5 минут Java код менять нельзя В команду разработки баз данных приходят с просьбой о помощи
  16. Таблица с рекомендациями слишком большая Мы ещё не чётко понимали как устроены индексы и появлялись новые DR$ таблицы Процедура первичного прогрева оказалась непростой, так как требовалось учитывать кучу нюансов Активное сопротивление со стороны DBA заказчика по причине появления новой процедуры, которую надо было запускать после деплоя или рестарта инстанса, дополнительных грантов и так далее Но самое главное – разница в скорости всего в 2 раза На самом деле сейчас мы уже научились всё это готовить и в других задачах используем этот подход Но так как это не кэш то я детально останавливаться не буду. Возможно, я успею рассказать про это, когда буду рассказывать про json.
  17. Таблица с рекомендациями слишком большая Мы ещё не чётко понимали как устроены индексы и появлялись новые DR$ таблицы Процедура первичного прогрева оказалась непростой, так как требовалось учитывать кучу нюансов Активное сопротивление со стороны DBA заказчика по причине появления новой процедуры, которую надо было запускать после деплоя или рестарта инстанса, дополнительных грантов и так далее Но самое главное – разница в скорости всего в 2 раза На самом деле сейчас мы уже научились всё это готовить и в других задачах используем этот подход Но так как это не кэш то я детально останавливаться не буду. Возможно, я успею рассказать про это, когда буду рассказывать про json.
  18. Принимаем решение использовать базу данных и Oracle Result cache так как Возможности по оптимизации исчерпаны Параметры активно повторяются Данные рекомендаций редко обновляются, так как используют полнотекстовый индекс
  19. Что такое result cache. Это технология от Oracle по кэшИированию результатов с минимальным влиянием на приложение.
  20. Как же всё это выглядит. По-факту он включается указанием инструкции result_cache. На втором выполнении видно, что никаких операций с базой данных не происходит. Всё получается из кэша. Как мы видим изменения минимальны.
  21. Есть второй способ, а именно аннотации. Они включают result_cache для таблицы если она участвует в запросе. Как вы думаете, что будет, если в запросе 2 таблицы и только на одной из них аннотация?
  22. Если хоть одна из таблиц без аннотации, то result_cache исчезает.
  23. Если все с ним, то весь запрос кэшируется.
  24. Для SQL зависимости определяются через план запроса, что весьма забавно, так как Oracle может преобразовывать запрос выкидывая ненужные таблицы из запроса и их не окажется в списке зависимостей. Например, в запросе на слайде применена трансформация join elimination из-за того, что есть FK и таблицы нет в зависимостях.
  25. Убираем constraint и Oracle пересчитывает дерево зависимостей. Для plsql кода зависимости определяются в run-time. Это позволяет делать даже dependency tracking для динамического sql и сложной условной логики.
  26. Оракл позволяет кэшировать результаты не только всего запроса целиком, но и его части. Это либо inline view как в виде with.
  27. Так и в виде from.
  28. Более того, можно создать кэшированное view. Например, в джоине таблица прочиталась как обычно, а вью было взято из кэша результатов. Как только появляется result_cache view становится non-mergable и оптимизатор не делает соответствующих трансформаций.
  29. Итак, посмотрим когда же Оракл инвалидирует result cache. Видно, что если в рамках своей сессии произошли изменения, то кэш игнорируется именно в этой сессии. Другие сессии продолжают использовать сохранённый результат. Как только происходит операция commit и другие сессии ожидают нового результата.
  30. Итак, посмотрим когда же Оракл инвалидирует result cache. Видно, что если в рамках своей сессии произошли изменения, то кэш игнорируется именно в этой сессии. Другие сессии продолжают использовать сохранённый результат. Как только происходит операция commit и другие сессии ожидают нового результата.
  31. Как только мы подтверждаем наши изменения они становятся неактуальными для других сессий
  32. К сожалению, не все так гладко. Oracle производит инвалидации и в ряде неочевидных случаев. 1. При любом вызове select for update 2. Неудачный апдейт по основной таблице и удачный по другойs tatement (Bug 26964029 : RESULT CACHE INVALIDATED EVEN THOUGH UPDATE ZERO ROWS)
  33. 2. Если в вашей таблице есть неиндексированый внешний ключ и в его родительской таблице произошло изменение данных. Это произойдёт даже если родительская таблица не упомянута в запросе. Выглядит, что на самом деле обновление учитывает факт наличия блокироки, факт попытки апдейта и количество задействованных строк отличное от нуля, причём всё равно в какой из таблиц.
  34. Итак, Вы наверное соскучались. Небольшая загадка. Почему для одинаковых параметров в PL/SQL могут происходить инвалидации?
  35. Когда exception вырывается наружу, будь то отсутствие блока обработки исключения Явный эксепшн Функция, в случае exception, не возвращающая результаты
  36. Т.е. В данном случае я вызывал одну и ту же функцию с одинаковым набором параметров несколько раз
  37. Есть только один способ побороть лишние объекты в Oracle 12.1 и 12.2 – возвращать значения.
  38. Официальный фикс запланирован в 18с в котором будут так называемые Bypass object для таких ситуаций. Имеющиеся патчи были печальны, но наконец то появилось что-то адекватное. Ну что, не устали? Готовы вернуться к тому, что начали? Не забыли ещё наше распознавание документов?
  39. Самое сложное найти нужный патч, так как на самом деле обещают фикс в 18-й версии. Имеющиеся патчи были печальны, но наконец то появилось что-то адекватное. Ну что, не устали? Готовы вернуться к тому, что начали? Не забыли ещё наше распознавание документов?
  40. Итак, мы изучили всё вышеуказанное и решили идти в прод
  41. Придя утром на работе мы обнаружили письмо примерно следующего содержания. Почему зависают сессии? Каким образом 30 секунд превратились в 20 минут? В общем, мы начали разбираться.
  42. Мы увидели 40 пользователей, делающих распознавание и даже упустим тот факт, что их не 10, как мы ожидали. Это была наша первая ошибка. Мы неодоценили нагрузку. Но в целом всё равно такого проседания быть было не должно. Гораздо более странно, что было видно, что в базе данных количество сессий всегда было ровно в 3 раза больше. Проведя внутреннее расследование мы выяснили, что java разработчики делают распознавание в 3 потока. Почему резалт кэш не любит одновременное к нему обращение расскажу позже.
  43. Для поиска проблем в result_cache нам понадобится небольшой набор view и хранимых процедур.
  44. Самая важная для нас процедура – процедура получения информации о памяти
  45. Что важное я хочу отметить, что в документации про данные случаи не указано. Это видно только из support notes. Важно - все нюансы result cache ТОЛЬКО на саппорте.
  46. Мы решили понять, сколько же у нас закэшировано объектов. Для этого мы воспользовались представлением v$result_cache_objects. Записей было явно много больше чем мы ожидали. Также мы решили посмотреть, что же это за объекты. Мы были сильно удивлены, но это были не наши запросы. Причем по характеру видно, что это явно ETL-процесс. Причём запросы запускались весьма часто.
  47. И мы вспомнили, что сами включили для этих таблиц аннотации, так как из них довольно часто приложению требовались данные и там кэширование было уместно. Однако запросы к таблицам с интервалом 1 минуты на поиск изменённых данных наводнили кэш приведя к вымыванию наших запросов. Анотации мы отключать не стали, но отключили принудительно кэширование в etl. Мы почистили объекты, но скоро их количество вернулось к 120000. Мы продолжили изучать, что же ещё кэшируется, так как скорость не менялась.
  48. Мы обнаружили следующие запросы. Это были запросы от Adaptive Statistics, которую Oracle применяет для построения планов. На форуме поддержки мы довольно оперативно нашли баг про этот функционал и result cache. Отключили использование result cache и производительность улучшилась до 10 минут за документ. Что же такое за latch free, которые возникают при result cache?
  49. Итак, что такое latch и к чему они приводят Так как нам неоходимо обеспечить согласованность по чтению, то необходимо использовать блокировки. Result cache это единственное место, где читатели могу заблокировать читателей.
  50. Оракл пытается установить защёлку несколько раз и потом засыпает
  51. Рассказ про latch
  52. Рассказ про latch
  53. Важно понимать, что на result cache всегда есть защёлки, поэтому придётся убеждать DBA. Итак, наш следующий шаг был получить отчётность по аггрегированому состоянию кэша.
  54. Итак, мы получили отчёт об использовании памяти. Подскажите, по каким показателям можно понять, что что-то пошло не так? Это также видно по показателю Delete count valid Таким образом, стало понятно, что памяти не хватает из-за некорректного расчёта её объёма.
  55. Таким образом, стало понятно, что памяти не хватает из-за некорректного расчёта её объёма. Мы использовали следующую формулу: ширина строки результатов * ожидаемое кол-во результатов, но не учли, что выделение памяти происходит блоками размером минимум 1 Кб. Что и привело к известным ошибкам в процессе переполнения кэша. Как же надо рассчитывать память? А считать её надо в блоках. ksl_get_shared_latch
  56. Адекватно эту ошибку устранили совсем недавно. Выше указан патч для 11 оракла.
  57. Для 12-го я бы выбрал второй патч в зависимости от того, какой сейчас оракл ибо в нём устраняется ещё и ошибка по bypass-объектам для plsql про которую я говорил ранее
  58. Времени на патчинг у нас не было. Надо было что-то подкрутить в базе данных. Итак, неужели нам нужны все эти параметры? Конечно же нет!
  59. Как уже упоминалось досточно четырёх. В кейсе мы обошлись одним – общим размером памяти.
  60. Хотя мы и достигли улучшения с 20 минут до 6 время продолжало быть неприемлемым. Посмотрим, что нам ещё может дать отчёт об использовании кэша. Видите ли вы что в отчёте ещё странного?
  61. Путём неких изысканий мы обнаружили, что отключен джоб обновления рекомендаций, что на самом деле приводило их обновлению данных сразу же . Мы запустили джоб с часовым интервалом как и было задумано, что автоматически отключило функционал постоянного обновления таблицы.
  62. Итак, количество инвалидаций уменьшилось до минимального, удаление корректных записей исчезло, а производительность вернулась в ожидаемые границы даже при пятикратном увеличении нагрузки.
  63. Мы не захотели, чтобы данная ситуация повторилась в дальнейшем и изучая как же Oracle использует result cache в ядре, обнаружили, что для ряда вещей используется недокументированный параметр shelflive по истечению которого результат запроса самоудаляется из кэша. Этот параметр был встроен в новую версию приложения. Важно, что он так же удаляется, если было изменение данных. Если факт изменения не критичен для кэша, можно воспользоваться опцией SNAPSHOT – тогда изменения данных не будут инвалидировать кэш.
  64. Для начала создадим таблицу На период RESULT_CACHE_TIMEOUT записи имеют статус New
  65. Давайте понаблюдаем за эволюцией статусов Статус поменялся, а LRU нет
  66. Поменялся и статус поменялся и LRU
  67. Подождём 5 минут Количество в кэше увеличивается, т.к. есть ещё память, но invalid объекты уходят. Наш объект, как и ожидалось, ушёл, а так бы висел вечно. Собственно shelflife устроен так же, только появляются блоки с dependency
  68. Если вы не испугались после наших кейсов result cache то есть ещё ряд неозвученных ограничений, ряд из которых очевиден. Нет возможности кэширования объектов в схеме SYS Нельзя кэшировать временные и внешние таблицы. Важно, что по-факту можно и оракл это явно не ограничивает. Это приводит к тому, что можно увидеть то, что раньше было немыслимо, а именно, содержимое временных таблиц других пользователей. Более того, оракл декларирует, что это исправлено, но в 12.2 до сих данная проблема есть. Нелязя использовать недетерменированные sql и pl/sql функции Конвеерные функции Входные и выходные параметры должны быть простых типов данных. На самом деле есть подходы как обходить ограничения с current_date/sysdate, но для этого нужна pl/sql функция с параметром по-умолчанию. Собственно у Игоря есть даже пример на его сайте.
  69. Result cache широко используется ядром оракла. Для поиска таких мест можно использовать запрос к шаред пулу. Очень активно кэш используется при работе с джобами, средой разработки приложений APEX. Обратите внимание на недокументированную опцию sysobj – я её нашёл именно тут.
  70. Также через резалт кэш сохраняется информация по адаптивной статистике и dynamic sampling – механизмам корректной генерации статистики и трансформации планов. Что важно данные механизмы используют опцию snapshot, которую я именно тут и обнаружил.
  71. Кратко подитожим работу result cache: Данные при запросе попадают с уровня хранения в буферный кэш Данные из буферного кэша попадают в область памяти result cache Результаты переиспользуются с использование блокировок Исходя из услышанного сведём достоинства и недостатки.
  72. Рассмотрим сначала плюсы. Можно не менять код приложения вообще или свести изменения к минимуму Не требуется использовать внутренние языки программирования Целостность данных при многопользовательском доступе через автоматическую инвалидацию Может быть очень быстрым Минусы мы уже увидели: Кэш должен быть правильно использован. При неправильном сценарии может привести к иллюзии роста скорости, а потом её падению База данных должна быть правильно настроена Решение очень проприетарное (хотя я не верю в миф независимости приложения от базы данных) Хочется отметить, что даже системы, разрабатываемые Oracle наткнулись на проблемы с некорректным использованием result cache.
  73. Например, даже erp система Oracle E-Business suite склонна к падениям по причине некорректного использования result cache. Однако нам интересны не сам факт наличия проблем, а способы их недопущения, так как сейчас мы имеем достаточно информации для их предотвращения. В процессе подготовки презентации было обнаружено письмо службы технической поддержки крупнейшей российской cloud системы рассчёта лояльности. На ней рассчитывают свои параметры известные сети по продаже косметики, торговые марки индустрии красоты, крупные ретейлеры электроники. Итак, переходим к непосредственно письму.
  74. Рассмотрим технические причины, которые вполне очевидно привели к сбою Блокировки из-за неправильного размера кэша при bulk заливке, которая наверняка была в той самой подготовительной работе Возможно это всё же v$result_cache_memory или dbms_result_cache.memory_report, так как по нему баг не закрыт. Однако, тесты багов написаны так хитро, что в них фактически явно говорится, что в v_result_cache_objects есть ошибка. Сами виноваты
  75. Итак, после был изменён параметр result_cache_max_size Скорее всего убран /*+ result_cache/ или созданы black_list или добавлен no_result_cache Как мы видим, были предприняты практически идентичные действия как в случае с Recommendation engine. Как же надо было провести безболезненное обновление?
  76. Как я уже говорил после выполнения появляются dependency и result, для которых свои блоки
  77. Итак, очищаем кэш, запускаем запрос и смотрим содержимое. Записи то есть. Но всё же результата, который в теории должен занимать место нет, но зависимости сохраняются, так что всё равно место потребляется.
  78. Поэтому если к вам приходят и говорят, что result cache не работает посмотрите вначале на блэк-листы
  79. Как всегда с Oracle как никогда верно «Но есть нюанс» Один из них только на саппорте. В документации само собой умалчивается. Так что надо либо воспользоваться параметром, которого конечно же может не хватить, либо делать отдельную процедуру и не забывать её запускать А как вы думаете, какой второй нюанс? Он виден из этой картинки. Это Oracle 12.2
  80. Что бы надо было сделать на самом деле: Оценить на сколько изменится итоговый размер кэша. Формула расчёта будет приведена позднее. Уменьшить влияние заливки набора данных в result cache: разово после загрузки, а не сразу же по каждому оператору Проверить анонсированые Oracle исправления перед накатом изменений руками, а не верить тому, что пишет документация Итак, мы близимся к завершению. Остался последний вид кэша.
  81. Как мы заметили основаная проблема кэшей на сервере это расход дорогой серверной памяти. Для решения этой проблемы есть решение Client side result cache. Он работает так. Есть база данных и драйвер. При попытке подключения запрашивается конфигурация с БД и поднимается кэш. ........... Остальные потоки сразу же запрашивают общий кэш драйвера тем самым экономя память и ресурсы сервера. Иногда в зависимости от нагрузки драйвер присылает в БД статистику по использования кэша, которую потом можно будет посмотреть.
  82. Правила инвалидации клиентского кэша такие же как и для серверного, но гораздо интереснее посмотреть как это происходит в динамике. Есть 2 случая инвалидации. Первый – когда запросы идут часто и не наступил Invalidation lag. В таком случае поток пойдёт в базу данных, обновит кэши и считает данные из него.
  83. Ежели никаких запрос в период от прихода сообщения до Invalidation lag не было, то сам драйвер через Invalidation lag запросит список инвалидированных резалтсетов. Таким образом кэш обеспечивает самоподдерживаемость.
  84. Итак, посмотрим как надо сконфигурировать БД, чтобы заработал client side result cache. Всё весьма просто. Есть 2 параметра, которые мы уже упомянали. Посмотрим на примеры кода с использованием клиентского кэша.
  85. Вот пример кода на .net. Как мы видим в коде нет ничего такого, что включает клиентский кэш. Однажды активировав его на сервере мы на клиенте указываем уже известный хинт result_cache
  86. java
  87. Собственно после того как выполнено java-приложении можно посмотреть как оно использовало клиентский result cache. Это табличка, при отключении сессии записи удаляются Тут указан запрос для текущей сессии, но в целом надо искать по sid из session_connect_info. Почему Oracle не вынес это прямо в данную таблицу (а это таблица, а не view) я понять не смог. Именно поэтому я считаю, что этот функционал не очень востребован, хотя как мне кажется очень нужен.
  88. Достоинства, как всегда следуют из архитектуры. Дешёвая память Любые драйвера Минимальное изменение кода приложения Сильное уменьшение нагрузки на базу данных Отсутствие необходимости использовать дополнительные программные продукты для кэширования Минусы понятны Согласованность по чтению с задержкой Необходимость толстого клиента, решение от вендора, максимум 2 Гб на клиента и как-то подозрительно мало багов на саппорте (я нашел около пяти), что говорит о малом использовании в production. Или бы иначе никто не стал пользоваться кэширующим сервером Oracle Oracle coherence. Исходя из всех кейсов мы можем окончательно сформулировать плохие и хорошие сценарии для использования всех видов кэшей
  89. Первый случай – если после изменения данных кэш должен мгновенно стать неактуальным. Для самодельных кэшей тяжело создать корректную инвалидацию в случае изменения объектов, на которых они построены. Если использование хранимой в БД логики запрещено политиками разработки
  90. Если кэш будет наполнен множеством разных значений, то они не будут переиспользоваться. Например, кэш созданный по идентификаторам транзакций бесполезен по причине того, что транзакции не так часто ищутся. Все аналогичные запросы подвисают на время данного таймаута ожидая выполнения главного запроса Одновременный многопользовательский доступ провоцирует возникновение блокировок
  91. Первый случай – если после изменения данных кэш должен мгновенно стать неактуальным. Для самодельных кэшей тяжело создать корректную инвалидацию в случае изменения объектов, на которых они построены. Если использование хранимой в БД логики запрещено политиками разработки Есть команда разработки средней квалификации Уже используется много SQL без использования внешнего кэширующего слоя Есть ограничения по ресурсам сервера СУБД Теперь подве
  92. Так как я считаю, что в основном доклад про result cache выводы я буду делать по нему Оцените верно размер памяти с учётом количества запросов, а не количества результатов. Не бойтесь использовать auto-expiring. Он сохранит место удаляя неиспользуемое. Не перегружайте запросами во время загрузки больших объемов данных Прогревайте кэш Убедитесь, что _result_cache_timeout соответствует вашим ожиданиям НИКОГДА не используйте FORCE для БД Проверяйте, адекватно ли используется FORCE для таблиц Проверьте find count и убедитесь надо ли вам использовать result cache для адаптивной статистики