SlideShare a Scribd company logo
1 of 54
Download to read offline
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Performance Optimization
User Group Performance Tuning Day
Oracle Confidential – Internal/Restricted/Highly Restricted
Vivek Sharma
Technologist – Core Technology & Cloud
Asia Pacific
Blog : viveklsharma.wordpress.com
Twitter : @vivek_oracle
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 2
The Technical Observations & Views here are my own
and not necessarily those of Oracle or its affiliates.
These are purely based on my understanding,
learning and resolution of various customer issues.
Disclaimer
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Agenda for the Day
• Database Concepts for Performance
• Locks & Latches
• Cursor Concepts & Sharing of Cursors
• Parsing and Optimization
• Indexes – Some Myths and Misconceptions
• Oracle Optimizer – Important Statistics
• Discussions (In-between Sessions & Breaks)
Oracle Confidential – Internal/Restricted/Highly Restricted
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Before We Start…
• What is the fastest way to Query a Row ?
Oracle Confidential – Internal/Restricted/Highly Restricted
• What is Bind Variable Peeking ?
• What is the relationship between Parent Cursor & Child Cursor ?
Answer to SOME of these during the DAY
• What is the difference between Redo & Undo ?
• What is IniTrans & MaxTrans ?
• How many of you believe that db file scattered read can also be seen with Index Scans ?
• How many of you believe that db file sequential read can also be seen with Full Scans ?
• What is the difference between Memory_Target & SGA_Target ?
• Which is better ? Index Scans or Full Scans ?
• To read 100% of the rows, Full Scans or Index Scans ?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Performance – Four Root Causes (Most Common)
• Database is not being Used as it was Designed to be Used
– DB Architect / Developers are Not-Aware of Database features
– Application is as-is portable on all available Databases
• Application Architecture / Code Design is Sub-Optimal
– Solution Architect / DB Architect / Developers are not Database savvy
– Developers use Shortcut Route to implement a solution
• There is a Sub-Optimal algorithm in the Database
– It could be a BUG causing issues
– A feature improves a bottleneck but causes a side-effect
• Human Error
– Human tend to forget things under pressure (18c – Autonomous Database  )
Oracle Confidential – Internal/Restricted/Highly Restricted
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Why Concept ?
• Database Architecture
– Memory Structures
– Background / Server Processes
• Database Objects
• SQL & PL/SQL
• Database Tools & Features
• Optimizer & Critical Inputs to Optimizer
• New Features / Features Deprecated
Oracle Confidential – Internal/Restricted/Highly Restricted
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
At High Level (In the order of priority)
• Know your Database
• Know your Development Tool
• Know your Data
• Know your Application
• Know your Developers 
Oracle Confidential – Internal/Restricted/Highly Restricted
A Mantra for a Successful Development Project
“Don’t treat Database as a Black Box”
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Architecture (Just Enough Diagram)
Oracle Confidential – Internal/Restricted/Highly Restricted
User or
App Server
Oracle
Server
Process
Network
Or Local
Shared Pool
Log
Buffer
Buffer Cache
Shared Global Area - SGA
LGWR
DBWR
Disk Reads
Redo Logs
Commits / Rollbacks
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Redo & Undo
• Redo
– Replay a Transaction
– Flushed from SGA to On-Disk Logs
• Undo
– Opposite of Redo
– Put back the Data – as it was
– Critical for Read Consistency
Oracle Confidential – Internal/Restricted/Highly Restricted
Not an Overhead, but Generate as minimal as possible
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Maintaining Concurrency
Seq 1 (User 1)
Seq 2 (User 2)
Seq 3 (User 1)
Seq 4 (User 2)
update stocks set qty = qty - 100 where prod_id = ‘A’;
update stocks set qty = qty - 10 where prod_id = ‘B’;
update stocks set qty = qty - 75 where prod_id = ‘B’;
update stocks set qty = qty - 50 where prod_id = ‘A’;
Success
Success
Locked
Deadlock
Readers do not block Readers / Writers
Writers do not block Readers / Writers
Writer block Writers ONLY at ROW level
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Maintaining Concurrency (contd..)
• Locks
– Application Enforced
 Row Level Lock (TX Contention)
 Ora-00060 (Deadlock)
– Oracle Enforced
 ITL (Lock Mode 6)
 Bitmap (Lock Mode 4)
 Duplicate Unique / Primary Key (Lock Mode 4)
 TM Contention
Oracle Confidential – Internal/Restricted/Highly Restricted
Except for ITL, others are Application Issue
itl.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Question Time
• Is Initrans a Block Level or a Table Level Parameter ?
• What is the default value of Initrans for a Table ?
• What is the default value of Initrans for an Index ?
• Maximum number of Transaction an Oracle Block can accommodate ?
Oracle Confidential – Internal/Restricted/Highly Restricted
itl.sql
Database Block Size 8192
Variable Header 48 Bytes
ITL 24 Bytes
8192 – 48 8144
50% of 8144 4072
4072/24 169
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
ITL Allocation Process Diagram
Oracle Confidential – Internal/Restricted/Highly Restricted
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• Table Level Lock
• Primary Cause
– Update to a Primary Key (A Bad Idea)
– Un-indexed Foreign Keys
User 1
(11:57:50) Updates
update emp set empno=:b1, ename=:b2,
ename=:b3, job=:b4,
mgr=:b5, hiredate=:b6,
sal=:b7, comm=:b8,
deptno=:b9
where rowid=:rowid;
User 2
(11:57:51) Updates
update dept set deptno=:b1,
dname=:b2,
loc=:b3
where rowid=:rowid;
TM Contention
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• Delete’s are cascaded to Child Table
User 1
(11:57:50) Deletes
delete from dept where deptno=10;
User 2
(11:57:51) Deletes
delete from dept where deptno=20;
What is “On Delete Cascade” Constraint ?
• User 2 Waits for “TM Contention”
• Primary Cause
– Deleting a Primary Key
– Un-indexed Foreign Keys
Idea is not to create Indexes on all the Foreign Keys
Know your Application / Know your Queries
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
TM Contention
• Table Level Lock
• Primary Cause
– Update to a Primary Key (A Bad Idea)
– Unindexed Foreign Keys
• Tools that UPDATE every column
• Solution (Quantify Pros & Cons)
– Update only Relevant Columns (No Primary Keys)
– Index Foreign Keys
Another example of “Know your Development Tool”
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
The Shared Pool
• Objective – to read as much as from Memory
• Stores Parsed version of SQL’s / PL/SQL’s
• Split into various components
– Library Cache, Dictionary Cache and many more…
• LRU Algorithm
• Protected by Latches / Mutexes (Mutual Exclusive Locks)
• Contention : Frequent Allocation / De-Allocation of Memory
• Contention : Frequent Loading of Cursors
Sharing of SQL’s key to effective Shared Pool Utilization
Maintain Coding Standards
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Query Processing
Syntax / Semantics Checks
Sharable Parent Cursor
Available ?
Execute
Store Parent Cursor in Library Cache
Query Transformation / Execution
Plans
Store child Cursor in Library Cache
Sharable Child Cursor
Available ?
N
N
Y
Y
Soft Parse
Hard Parse
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Sharing of SQL’s / Effective Memory Utilization
• Literals v/s Bind Variables
select empno, ename, sal from emp where empno=7369;
select empno, ename, sal from emp where empno=7521;
select empno, ename, sal from emp where empno=7902;
select empno, ename, sal from emp where empno=:b1;
Problem
mpc.sql
select sql_id, sql_text, executions, version_count, sharable_mem, force_matching_signature, plan_hash_value from v$sqlarea
where sql_text like 'select empno, ename, sal from emp where empno%';
SQL_ID SQL_TEXT EXECUTIONS VERSION_COUNT SHARABLE_MEM FORCE_MATCHING_SIGNATURE PLAN_HASH_VALUE
------------- ---------------------------------- ---------- ------------- ------------ ------------------------ ---------------
dyqfcpyqwd9zk select empno, ename, sal from emp 3 1 27554 7320676830101929156 2949544139
where empno=:b1
gzbpcx3suxjk3 select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139
where empno=7902
0h7y2gqzrxubu select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139
where empno=7369
5ptzb4hqxb1wv select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139
where empno=7521
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Coding Standard (Multiple Parent Cursors)
Parent
(select
ename from
emp where
empno=:b1)
Child
Parent
(select
dname from
dept where
deptno=:b2)
Child
Parent
(SELECT
ENAME
FROM EMP
WHERE
EMPNO=:B1)
Child
Parent
(select
ename from
emp e where
empno=:b1)
Child
A Parent requires at least one Child Cursor
Obvious Problem
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Coding Standard (Multiple Child Cursors)
Child 0
(Schema X)
Child 1
(Schema Y)
Child 2
(Schema X
OICA=10)
Child 3
(Schema X
different bind
length)
Parent
(select * from emp where
ename=:b1)
Obvious – but a problem Problem
My Blog “Authorization Check Failed ! Multiple Child Cursors..” Dec 2013
mcc.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Bind Graduation
Bind Name Bind Length Graduate to Child Number
:b1 10 32 1
:b1 30 32 1
:b1 40 128 2
:b1 80 128 2
:b1 140 2000 3
:b1 2040 4000 4
select empno, ename, sal from emp where empno=:b1;
Identify cause of Multiple Child Cursors
v$sql_shared_cursor
Pre 12c
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Sharing of SQL
• Why ?
– For Performance Reason
– Scalability
– Effective Resource Utilization (Memory / CPU)
•
• How ?
– Implement Bind (only when required)
– Maintain Coding Standard
test_bind.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Production Downtime (real life example)
Snap Id Snap Time Sessions Curs/Sess
--------- ------------------- -------- ---------
Begin Snap: 24222 18-Apr-14 11:30:27 401 74.5
End Snap: 24223 18-Apr-14 12:30:16 783 86.0
Elapsed: 59.81 (mins)
DB Time: 1,133.51 (mins)
Cache Sizes
~~~~~~~~~~~ Begin End
---------- ----------
Buffer Cache: 23,552M 23,552M Std Block Size: 8K
Shared Pool Size: 12,288M 12,288M Log Buffer: 15,112K
Load Profile
~~~~~~~~~~~~ Per Second Per Transaction
--------------- ---------------
Redo size: 859,548.86 25,693.53
Logical reads: 154,690.90 4,624.00
Block changes: 3,634.57 108.64
Physical reads: 1,515.71 45.31
Physical writes: 296.98 8.88
User calls: 2,817.43 84.22
Parses: 2,842.89 84.98
Hard parses: 156.49 4.68
Sorts: 664.11 19.85
Logons: 0.97 0.03
Executes: 6,454.01 192.92
Transactions: 33.45
19 Active
5.5%
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Production Downtime (real life example)
Top 5 Timed Events Avg %Total
~~~~~~~~~~~~~~~~~~ wait Call
Event Waits Time (s) (ms) Time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
db file sequential read 4,874,348 35,300 7 51.9 User I/O
CPU time 22,056 32.4
ARCH wait on SENDREQ 2,787 13,399 4808 19.7 Network
gc cr block busy 238,851 2,833 12 4.2 Cluster
gcs log flush sync 1,017,044 2,672 3 3.9 Other
-------------------------------------------------------------
Instance Activity Stats DB/Inst: IIMSP/IIMSP2 Snaps: 24222-24223
Statistic Total per Second per Trans
-------------------------------- ------------------ -------------- -------------
parse count (failures) 357,665 99.7 3.0
parse count (hard) 561,605 156.5 4.7
parse count (total) 10,202,613 2,842.9 85.0
64% Failures
Fix High Hard Parse Failures = Unwanted Work
Fix Hard Parses
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 26
Client /
Application
Handle
Server Process
Memory
Private SQL Area
SGA
Library Cache
Shared SQL Area
Cursor Concepts
• Private SQL Area
– Parsed SQL Statement
– Session Specific Information
• Shared SQL Area
– Parsed SQL Statement
– Execution Plan
PGA
SGA
scc.sql
Locks
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 27
Session Cached Cursors
• Avoids Soft Parse – Better Concurrency
• Maintains Direct Address to the Memory Object
• Locks the Object to avoid flushing out
• Reduces the Contention on Library Cache Latches & Locks & Mutexes
• Cursors are cached after
– 3 Executions within a Session or
– 2 Executions within a Session, if already Hard Parsed by other Session
• Defaults to 50
– Refrain from setting to a very high value
– Monitor parse count (total), parse count (hard), session cache cursor hits
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
The Buffer Cache
• Objective – to read as much as from Memory
• Caches Data Blocks to eliminate Disk I/O’s
• Blocks are either Dirty or Clean
• LRU Algorithm, Mid Point Insertion & Touch Count (TCH)
• Protected by Latches to maintain LRU and TCH
• Contention : Unwanted I/O’s
• Contention : High Concurrency on a Block
Logical Reads are Faster than Disk Reads
Logical Reads consume CPU
Effective Utilization of Cache – Optimizing I/O’s
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Question time…
• Outer Query
select get_dname(deptno) deptno, ename, sal
from emp where deptno in (10,20);
• Query in GET_DNAME function
select dname from dept where deptno=:b1;
test_scalar.sql
Blog on “Cache Buffers Chains Latch Contention…” May 2010
Scalar Subqueries, DETERMINISTIC, RESULT_CACHE
• Assuming, 200 rows are fetched by Outer Query
What would be the total number of executions of the Function ?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 30
Readers do not block Readers / Writers
Writers do not block Readers / Writers
Writer block Writers ONLY at ROW level
Data Layer v/s Cache Layer
Readers MUST block Writers
Single Writer MUST block All Operations
• For Data Layer – Protected by Locks & Enqueues
• For Cache Layer (Raw Memory) – Protected by Latches & Mutexes
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Oracle Waits (to name a few)
• db file sequential read
• db file scattered read
• read by other session
• direct path read
• Latch / Mutexes
Eliminating Waits critical for Response Sensitive Application
Single Block Reads
Multi Block Reads
Block Level Contention
Bypass Cache / Smart Scans
Concurrency
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Row Migration
row_migration.sql
Higher Value means Impact of Migrated Rows, Chained Rows, >255 Columns
• Impact due to Additional HOP (Additional I/O)
• Impact Index Scans
Index
Block
Table
Block
Index
Block
Table
Block
Table
Blockv/s
Check for table fetch continued row
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Question
In terms of performance –
Is there any difference between these queries ?
select a1, a10 from a where rowid=:rowid;
Additional LIO’s due to Intra-Block Chaining
Table A
Rows 10000
Blocks 100
Columns 300
select a1, a200 from a where rowid=:rowid;
select a1, a300 from a where rowid=:rowid;
Intra_block.sql
I/O’s (300 Columns) I/O’s (600 Columns)
1 to 45 = 7 I/O’s 1 to 90 = 7 I/O’s
46 to 300 = 8 I/O’s 91 to 345 = 8 I/O’s
346 onwards = 9 I/O’s
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Which Query is better ?
Ensure Rewrite is functionally Correct
Don’t Rely on Optimizer Transformation
• Table T1 with Billions of Rows and an Index on C4
• Table T2 with Millions of Rows and Index T2_IDX(A,B)
select t1.c1, t1.c2,
(select t2.c3 from t2
where t2.a = t1.a
and t2.b = t1.b) c3
from t1
Where t1.c4='AIOUG'
select t1.c1, t1.c2,
(select func(t2,a,b)
from dual) c3
from t1
where t1.c4='AIOUG'
select t1.c1, t1.c2,
t2.c3
from t1,
t2
where t1.c4='AIOUG'
and t1.a = t2.a
and t1.b = t2.b
(+)
(+)
• Assuming the Predicate on T1 fetches only 1 Row
• Assuming the Predicate on T1 fetches 100,000 Rows
qt_scalar.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Explain Plan - Bind Variables Trap
ep.sql
Use Run Time Plan, using dbms_xplan.display_cursor
• Bind with Explain Plan has two problems
– Bind Variables are declared as VARCHAR2 (Default Behavior)
– Plan Generation does not peek into Bind Variable
• Plan, may or may not match (Not Reliable)
• AUTOTRACE has similar problem
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Bind Peeking
• Introduced in 9i
• Hard Parse, as if Bind is a Literal
• Appropriate plan based on Bind Value
• 9i & 10g, Hard Parse Bind Value Wins
• 11g – Adaptive Cursor Sharing
• Plan Upgraded, post subsequent execution
• Bad Query Performance, at least Once
bp.sql
How do you take care of a High Performance Application ?
Solution : Use Bind, only when required. BIND_AWARE hint.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Indexes not being Used (Real Life Example)
INST_ID SQL_ID SQL_TEXT EXECUTIONS BUFFER_GETS
-------- ------------- ---------------------------------------- ---------- -----------
1 1kfxns3m02pu3 select distinct TXT_ADDRESS_LINE_1 , TXT 28 1213546962
_ADDRESS_LINE_2 , TXT_APARTMENT , TXT_ST
REET , TXT_CITYDISTRICT , TXT_AREAVILLAG
E , TXT_STATE , NUM_PINCODE from genmst_
location a, Risk_headers b where a.NUM_L
OCATION_CD = b.location_code and a.num_l
ocation_cd = (SELECT location_code FROM
risk_headers WHERE reference_num = :"SYS
_B_0" AND reference_date = TO_DATE (:"SY
S_B_1", :"SYS_B_2") and POLICY_RISK_SERI
AL = :"SYS_B_3")
Enter value for table: RISK_HEADERS
OWNER NUM_ROWS BLOCKS
---------- ---------- ----------
INS 14844896 846555
select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET ,
TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE
From genmst_location a,
Risk_headers b
where to_a.NUM_LOCATION_CD = b.location_code
and a.num_location_cd = (SELECT location_code FROM INS.risk_headers
WHERE reference_num = '201412200014630’
AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’)
and POLICY_RISK_SERIAL = 1)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Indexes not being Used (Real Life Example)
--------------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | HASH UNIQUE | |
| 2 | NESTED LOOPS | |
| 3 | TABLE ACCESS BY INDEX ROWID | GENMST_LOCATION |
|* 4 | INDEX UNIQUE SCAN | PK_GENMST_LOCATION |
| 5 | TABLE ACCESS BY INDEX ROWID| RISK_HEADERS |
|* 6 | INDEX UNIQUE SCAN | PK_RISK_HEADERS |
|* 7 | TABLE ACCESS FULL | RISK_HEADERS |
--------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
4 - access("A"."NUM_LOCATION_CD"=TO_NUMBER())
6 - access("REFERENCE_NUM"=TO_NUMBER(:SYS_B_0) AND
"REFERENCE_DATE"=TO_DATE(:SYS_B_1,:SYS_B_2) AND
"POLICY_RISK_SERIAL"=:SYS_B_3)
7 - filter("A"."NUM_LOCATION_CD"=TO_NUMBER("B"."LOCATION_CODE"))
select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET ,
TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE
From genmst_location a,
Risk_headers b
where to_a.NUM_LOCATION_CD = b.location_code
and a.num_location_cd = (SELECT location_code FROM INS.risk_headers
WHERE reference_num = '201412200014630’
AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’)
and POLICY_RISK_SERIAL = 1)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Indexes not being Used (Real Life Example)
select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET ,
TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE
From genmst_location a,
Risk_headers b
where to_char(to_a.NUM_LOCATION_CD) = b.location_code
and a.num_location_cd = (SELECT location_code FROM INS.risk_headers
WHERE reference_num = '201412200014630’
AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’)
and POLICY_RISK_SERIAL = 1)
Datatype Mismatch – Should be taken care during Design Phase
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Select the Best Index
1. SELECT C FROM T1 WHERE A=:B1;
2. SELECT C, D FROM T1 WHERE A=:B1 AND B=:B2;
a. Index on (A)
b. Index on (B,A)
c. Index on (A,B)
Both the Queries
Only 2nd Query
Both the Queries
pc.sql
What will be the Impact of Index C on 1st Query ?
SQL Performance Analyzer – Proactive Performance Analysis
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Select the Best Index
1. SELECT * FROM T1 WHERE OBJECT_ID=100;
2. SELECT * FROM T1 WHERE TEMPORARY=‘Y’ AND OBJECT_ID=100;
3. SELECT * FROM T1 WHERE TEMPORARY=‘Y’;
a. Index on (OBJECT_ID)
b. Index on (OBJECT_ID, TEMPORARY)
c. Index on (TEMPORARY, OBJECT_ID)
SKIP SCAN requires a Low Cardinality Column as a Leading Column
Num_Rows 90410
Object_id Num_Distinct => 90410
Temporary Num_Distinct => 2
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Index Myths & Misconceptions
I have to come across a scenerio where Index Rebuild actually Resolved Performance Issues
• Index Rebuild – To make it more Efficient or Small
– Not always True
– In case the Index is Shrinked, it can introduce Block Level Contention
– Index tend to get into their Original Shape (Pre-Rebuild)
– Improving CF of an Index may Impact CF of another Index
– Statistics : branch node splits / leaf node splits & leaf node 90-10 splits
– Exception : Rebuilding an Index to convert from Reverse to NoReverse or vice versa
ir.sql
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Understanding Block Split (50-50)
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
DELETE INSERT
Understanding Block Split (50-50)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
DELETE
Understanding Block Split (50-50)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
DELETE
Understanding Block Split (50-50)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
DELETE
Understanding Block Split (50-50)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• 50-50 Split caused by
– Updates / Inserts of a Non-Largest Value into a Leaf Block
Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’)
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
EAZ
LMN
OAK
ODL
KAY
AAA
AAC
AAD
BAA
BCC
CAB
CDA
CDE
CEA
CEB
DAA
DAD
DAY
FAA
EAN
OAK
ODL
KAY
DELETE
EAZ
GOA
LMN
INSERT
Understanding Block Split (50-50)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Understanding Block Split (90-10)
• 90-10 Split caused by
– Monotonically Increasing Value (Date-Time/Sequences)
insert into table values (32);
1
2
3
4
5
6
8
9
11
12
14
15
16
18
19
20
21
22
23
24
25
27
28
29
30
1
2
3
4
5
6
8
9
11
12
14
15
16
18
19
20
21
22
23
24
25
27
28
29
30
INSERT
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Understanding Block Split (90-10)
• 90-10 Split caused by
– Monotonically Increasing Value (Date-Time/Sequences)
insert into table values (32);
1
2
3
4
5
6
8
9
11
12
14
15
16
18
19
20
21
22
23
24
25
27
28
29
30
1
2
3
4
5
6
8
9
11
12
14
15
16
18
19
20
21
22
23
24
25
27
28
29
30
32
New Block Allocated
Inserted
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Indexing Guidelines
Guideline Reasoning
Create as many, but try to keep the number minimum. Indexes increase Performance, but also consume
disk space and processing resources.
Test First to determine Quantifiable Benefits Same as above. Also, an Index to optimize one
query can impact other queries.
Use the correct type of Index Correct Index usage maximizes performance
Use Btree Indexes in OLTP Btree Indexes are suitable for OLTP as the data is
frequently updated
Use Bitmap Indexes in Data warehouse environments Bitmap Indexes are suitable for Data warehouses
as the data is rarely manipulated
Check for the Column Ordering based on Application /
Query pattern
Avoid Redundant Indexes
Don’t Rebuild Indexes unless you have a solid reason Rebuilding can cause concurrency issues
Monitor your Indexes and drop indexes that aren’t used Doing this frees up space and improves DML
Before Dropping an index, consider marking them Invisible This allows you to better determine if there are
any performance impact before you drop these.
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
• Requirement – Sales Tax Report
• Join Financial Year Table to Invoices Table
• DB Version 8174 v/s Now
52
Previous
Year
Finance
Table
(20 GB)
Current
Year
Finance
Table
(5 GB)
Invoices
Table
(100 GB)
Invoices
Table
(100 GB)
UNION ALL
Issue :
UAT – 5 Minutes
Prod – 60+ Minutes
2 Scans of 100 GB
Optimizer Evolution…(An Example)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Modification - Rewritten for a Single Scan of Invoices
53
Now, optimizer does it for us by way of a Query Transformation
Join Factorization
Previous
Year
Finance
Table
(20 GB)
Current
Year
Finance
Table
(5 GB)
Invoices
Table
(100 GB)
UNION ALL
Benefit : < 1 Minute
Optimizer Evolution…(An Example)
Developer day v2

More Related Content

What's hot

Simplify IT: Oracle SuperCluster
Simplify IT: Oracle SuperCluster Simplify IT: Oracle SuperCluster
Simplify IT: Oracle SuperCluster Fran Navarro
 
APEX – jak vytvořit jednoduše aplikaci
APEX – jak vytvořit jednoduše aplikaciAPEX – jak vytvořit jednoduše aplikaci
APEX – jak vytvořit jednoduše aplikaciMarketingArrowECS_CZ
 
Presenta completaoow2013
Presenta completaoow2013Presenta completaoow2013
Presenta completaoow2013Fran Navarro
 
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...Trivadis
 
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?AskTom: How to Make and Test Your Application "Oracle RAC Ready"?
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?Markus Michalewicz
 
Představení produktové řady Oracle SPARC S7
Představení produktové řady Oracle SPARC S7Představení produktové řady Oracle SPARC S7
Představení produktové řady Oracle SPARC S7MarketingArrowECS_CZ
 
Oracle IaaS Overview - AIOUG Hyderabad Chapter
Oracle IaaS Overview - AIOUG Hyderabad ChapterOracle IaaS Overview - AIOUG Hyderabad Chapter
Oracle IaaS Overview - AIOUG Hyderabad Chapteraioughydchapter
 
Oracle Data Protection - 1. část
Oracle Data Protection - 1. částOracle Data Protection - 1. část
Oracle Data Protection - 1. částMarketingArrowECS_CZ
 
Úvod do Oracle Cloud infrastruktury
Úvod do Oracle Cloud infrastrukturyÚvod do Oracle Cloud infrastruktury
Úvod do Oracle Cloud infrastrukturyMarketingArrowECS_CZ
 
Big data oracle_introduccion
Big data oracle_introduccionBig data oracle_introduccion
Big data oracle_introduccionFran Navarro
 
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 RACMarkus Michalewicz
 
Tendencias Storage
Tendencias StorageTendencias Storage
Tendencias StorageFran Navarro
 
PDoolan Oracle Overview PPT Version
PDoolan Oracle Overview PPT VersionPDoolan Oracle Overview PPT Version
PDoolan Oracle Overview PPT VersionPeter Doolan
 
Oracle Solaris Software Integration
Oracle Solaris Software IntegrationOracle Solaris Software Integration
Oracle Solaris Software IntegrationOTN Systems Hub
 
MAA Best Practices for Oracle Database 19c
MAA Best Practices for Oracle Database 19cMAA Best Practices for Oracle Database 19c
MAA Best Practices for Oracle Database 19cMarkus Michalewicz
 
Oracle engineered systems executive presentation
Oracle engineered systems executive presentationOracle engineered systems executive presentation
Oracle engineered systems executive presentationOTN Systems Hub
 
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RAC
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RACAUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RAC
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RACSandesh Rao
 
Oracle Data Protection - 2. část
Oracle Data Protection - 2. částOracle Data Protection - 2. část
Oracle Data Protection - 2. částMarketingArrowECS_CZ
 
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data avanttic Consultoría Tecnológica
 

What's hot (20)

Simplify IT: Oracle SuperCluster
Simplify IT: Oracle SuperCluster Simplify IT: Oracle SuperCluster
Simplify IT: Oracle SuperCluster
 
APEX – jak vytvořit jednoduše aplikaci
APEX – jak vytvořit jednoduše aplikaciAPEX – jak vytvořit jednoduše aplikaci
APEX – jak vytvořit jednoduše aplikaci
 
Presenta completaoow2013
Presenta completaoow2013Presenta completaoow2013
Presenta completaoow2013
 
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
TechEvent 2019: Create a Private Database Cloud in the Public Cloud using the...
 
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?AskTom: How to Make and Test Your Application "Oracle RAC Ready"?
AskTom: How to Make and Test Your Application "Oracle RAC Ready"?
 
Představení produktové řady Oracle SPARC S7
Představení produktové řady Oracle SPARC S7Představení produktové řady Oracle SPARC S7
Představení produktové řady Oracle SPARC S7
 
Oracle IaaS Overview - AIOUG Hyderabad Chapter
Oracle IaaS Overview - AIOUG Hyderabad ChapterOracle IaaS Overview - AIOUG Hyderabad Chapter
Oracle IaaS Overview - AIOUG Hyderabad Chapter
 
Oracle Data Protection - 1. část
Oracle Data Protection - 1. částOracle Data Protection - 1. část
Oracle Data Protection - 1. část
 
Úvod do Oracle Cloud infrastruktury
Úvod do Oracle Cloud infrastrukturyÚvod do Oracle Cloud infrastruktury
Úvod do Oracle Cloud infrastruktury
 
Big data oracle_introduccion
Big data oracle_introduccionBig data oracle_introduccion
Big data oracle_introduccion
 
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
 
Oracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 serveryOracle SPARC T7 a M7 servery
Oracle SPARC T7 a M7 servery
 
Tendencias Storage
Tendencias StorageTendencias Storage
Tendencias Storage
 
PDoolan Oracle Overview PPT Version
PDoolan Oracle Overview PPT VersionPDoolan Oracle Overview PPT Version
PDoolan Oracle Overview PPT Version
 
Oracle Solaris Software Integration
Oracle Solaris Software IntegrationOracle Solaris Software Integration
Oracle Solaris Software Integration
 
MAA Best Practices for Oracle Database 19c
MAA Best Practices for Oracle Database 19cMAA Best Practices for Oracle Database 19c
MAA Best Practices for Oracle Database 19c
 
Oracle engineered systems executive presentation
Oracle engineered systems executive presentationOracle engineered systems executive presentation
Oracle engineered systems executive presentation
 
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RAC
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RACAUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RAC
AUSOUG - NZOUG-GroundBreakers-Jun 2019 - 19c RAC
 
Oracle Data Protection - 2. část
Oracle Data Protection - 2. částOracle Data Protection - 2. část
Oracle Data Protection - 2. část
 
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data
Meetup Oracle Database MAD: 2.1 Data Management Trends: SQL, NoSQL y Big Data
 

Similar to Developer day v2

Kellyn Pot'Vin-Gorman - Awr and Ash
Kellyn Pot'Vin-Gorman - Awr and AshKellyn Pot'Vin-Gorman - Awr and Ash
Kellyn Pot'Vin-Gorman - Awr and Ashgaougorg
 
20150110 my sql-performanceschema
20150110 my sql-performanceschema20150110 my sql-performanceschema
20150110 my sql-performanceschemaIvan Ma
 
OUGLS 2016: How profiling works in MySQL
OUGLS 2016: How profiling works in MySQLOUGLS 2016: How profiling works in MySQL
OUGLS 2016: How profiling works in MySQLGeorgi Kodinov
 
Database as a Service, Collaborate 2016
Database as a Service, Collaborate 2016Database as a Service, Collaborate 2016
Database as a Service, Collaborate 2016Kellyn Pot'Vin-Gorman
 
The Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result CacheThe Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result CacheSteven Feuerstein
 
Oracle Open World Exadata Monitoring and Management with EM12c
Oracle Open World Exadata Monitoring and Management with EM12cOracle Open World Exadata Monitoring and Management with EM12c
Oracle Open World Exadata Monitoring and Management with EM12cKellyn Pot'Vin-Gorman
 
MySQL Manchester TT - Performance Tuning
MySQL Manchester TT  - Performance TuningMySQL Manchester TT  - Performance Tuning
MySQL Manchester TT - Performance TuningMark Swarbrick
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeGeorgi Kodinov
 
New data dictionary an internal server api that matters
New data dictionary an internal server api that mattersNew data dictionary an internal server api that matters
New data dictionary an internal server api that mattersAlexander Nozdrin
 
IOUG at Coors Field ASH and AWR in EM12c!
IOUG at Coors Field ASH and AWR in EM12c!IOUG at Coors Field ASH and AWR in EM12c!
IOUG at Coors Field ASH and AWR in EM12c!Kellyn Pot'Vin-Gorman
 
Kscope Not Your Father's Enterprise Manager
Kscope Not Your Father's Enterprise ManagerKscope Not Your Father's Enterprise Manager
Kscope Not Your Father's Enterprise ManagerKellyn Pot'Vin-Gorman
 
Oracle SQL Developer for the DBA
Oracle SQL Developer for the DBAOracle SQL Developer for the DBA
Oracle SQL Developer for the DBAJeff Smith
 
Some Oracle AWR observations
Some Oracle AWR observationsSome Oracle AWR observations
Some Oracle AWR observationsConnor McDonald
 
Power of the AWR Warehouse- HotSos Symposium 2015
Power of the AWR Warehouse-  HotSos Symposium 2015Power of the AWR Warehouse-  HotSos Symposium 2015
Power of the AWR Warehouse- HotSos Symposium 2015Kellyn Pot'Vin-Gorman
 
Oracle EM12c Release 4 New Features!
Oracle EM12c Release 4 New Features!Oracle EM12c Release 4 New Features!
Oracle EM12c Release 4 New Features!Kellyn Pot'Vin-Gorman
 

Similar to Developer day v2 (20)

AWR and ASH Deep Dive
AWR and ASH Deep DiveAWR and ASH Deep Dive
AWR and ASH Deep Dive
 
Kellyn Pot'Vin-Gorman - Awr and Ash
Kellyn Pot'Vin-Gorman - Awr and AshKellyn Pot'Vin-Gorman - Awr and Ash
Kellyn Pot'Vin-Gorman - Awr and Ash
 
AWR and ASH in an EM12c World
AWR and ASH in an EM12c WorldAWR and ASH in an EM12c World
AWR and ASH in an EM12c World
 
20150110 my sql-performanceschema
20150110 my sql-performanceschema20150110 my sql-performanceschema
20150110 my sql-performanceschema
 
UKOUG
UKOUG UKOUG
UKOUG
 
OUGLS 2016: How profiling works in MySQL
OUGLS 2016: How profiling works in MySQLOUGLS 2016: How profiling works in MySQL
OUGLS 2016: How profiling works in MySQL
 
Database as a Service, Collaborate 2016
Database as a Service, Collaborate 2016Database as a Service, Collaborate 2016
Database as a Service, Collaborate 2016
 
The Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result CacheThe Amazing and Elegant PL/SQL Function Result Cache
The Amazing and Elegant PL/SQL Function Result Cache
 
Oracle Open World Exadata Monitoring and Management with EM12c
Oracle Open World Exadata Monitoring and Management with EM12cOracle Open World Exadata Monitoring and Management with EM12c
Oracle Open World Exadata Monitoring and Management with EM12c
 
Apouc 2014-enterprise-manager-12c
Apouc 2014-enterprise-manager-12cApouc 2014-enterprise-manager-12c
Apouc 2014-enterprise-manager-12c
 
MySQL Manchester TT - Performance Tuning
MySQL Manchester TT  - Performance TuningMySQL Manchester TT  - Performance Tuning
MySQL Manchester TT - Performance Tuning
 
OUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source CodeOUGLS 2016: Guided Tour On The MySQL Source Code
OUGLS 2016: Guided Tour On The MySQL Source Code
 
New data dictionary an internal server api that matters
New data dictionary an internal server api that mattersNew data dictionary an internal server api that matters
New data dictionary an internal server api that matters
 
IOUG at Coors Field ASH and AWR in EM12c!
IOUG at Coors Field ASH and AWR in EM12c!IOUG at Coors Field ASH and AWR in EM12c!
IOUG at Coors Field ASH and AWR in EM12c!
 
Kscope Not Your Father's Enterprise Manager
Kscope Not Your Father's Enterprise ManagerKscope Not Your Father's Enterprise Manager
Kscope Not Your Father's Enterprise Manager
 
Oracle SQL Developer for the DBA
Oracle SQL Developer for the DBAOracle SQL Developer for the DBA
Oracle SQL Developer for the DBA
 
Power of the AWR Warehouse
Power of the AWR WarehousePower of the AWR Warehouse
Power of the AWR Warehouse
 
Some Oracle AWR observations
Some Oracle AWR observationsSome Oracle AWR observations
Some Oracle AWR observations
 
Power of the AWR Warehouse- HotSos Symposium 2015
Power of the AWR Warehouse-  HotSos Symposium 2015Power of the AWR Warehouse-  HotSos Symposium 2015
Power of the AWR Warehouse- HotSos Symposium 2015
 
Oracle EM12c Release 4 New Features!
Oracle EM12c Release 4 New Features!Oracle EM12c Release 4 New Features!
Oracle EM12c Release 4 New Features!
 

More from AiougVizagChapter

All about Oracle Golden Gate by Udaya Kumar Pyla
All about Oracle Golden Gate by Udaya Kumar PylaAll about Oracle Golden Gate by Udaya Kumar Pyla
All about Oracle Golden Gate by Udaya Kumar PylaAiougVizagChapter
 
Oracle database in cloud, dr in cloud and overview of oracle database 18c
Oracle database in cloud, dr in cloud and overview of oracle database 18cOracle database in cloud, dr in cloud and overview of oracle database 18c
Oracle database in cloud, dr in cloud and overview of oracle database 18cAiougVizagChapter
 
Awr + 12c performance tuning
Awr + 12c performance tuningAwr + 12c performance tuning
Awr + 12c performance tuningAiougVizagChapter
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAiougVizagChapter
 

More from AiougVizagChapter (7)

All about Oracle Golden Gate by Udaya Kumar Pyla
All about Oracle Golden Gate by Udaya Kumar PylaAll about Oracle Golden Gate by Udaya Kumar Pyla
All about Oracle Golden Gate by Udaya Kumar Pyla
 
Oracle database in cloud, dr in cloud and overview of oracle database 18c
Oracle database in cloud, dr in cloud and overview of oracle database 18cOracle database in cloud, dr in cloud and overview of oracle database 18c
Oracle database in cloud, dr in cloud and overview of oracle database 18c
 
Aioug vizag ado_12c_aug20
Aioug vizag ado_12c_aug20Aioug vizag ado_12c_aug20
Aioug vizag ado_12c_aug20
 
Aioug big data and hadoop
Aioug  big data and hadoopAioug  big data and hadoop
Aioug big data and hadoop
 
Performance Tuning intro
Performance Tuning introPerformance Tuning intro
Performance Tuning intro
 
Awr + 12c performance tuning
Awr + 12c performance tuningAwr + 12c performance tuning
Awr + 12c performance tuning
 
Aioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_featuresAioug vizag oracle12c_new_features
Aioug vizag oracle12c_new_features
 

Recently uploaded

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 

Recently uploaded (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 

Developer day v2

  • 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Performance Optimization User Group Performance Tuning Day Oracle Confidential – Internal/Restricted/Highly Restricted Vivek Sharma Technologist – Core Technology & Cloud Asia Pacific Blog : viveklsharma.wordpress.com Twitter : @vivek_oracle
  • 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 2 The Technical Observations & Views here are my own and not necessarily those of Oracle or its affiliates. These are purely based on my understanding, learning and resolution of various customer issues. Disclaimer
  • 3. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Agenda for the Day • Database Concepts for Performance • Locks & Latches • Cursor Concepts & Sharing of Cursors • Parsing and Optimization • Indexes – Some Myths and Misconceptions • Oracle Optimizer – Important Statistics • Discussions (In-between Sessions & Breaks) Oracle Confidential – Internal/Restricted/Highly Restricted
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Before We Start… • What is the fastest way to Query a Row ? Oracle Confidential – Internal/Restricted/Highly Restricted • What is Bind Variable Peeking ? • What is the relationship between Parent Cursor & Child Cursor ? Answer to SOME of these during the DAY • What is the difference between Redo & Undo ? • What is IniTrans & MaxTrans ? • How many of you believe that db file scattered read can also be seen with Index Scans ? • How many of you believe that db file sequential read can also be seen with Full Scans ? • What is the difference between Memory_Target & SGA_Target ? • Which is better ? Index Scans or Full Scans ? • To read 100% of the rows, Full Scans or Index Scans ?
  • 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Performance – Four Root Causes (Most Common) • Database is not being Used as it was Designed to be Used – DB Architect / Developers are Not-Aware of Database features – Application is as-is portable on all available Databases • Application Architecture / Code Design is Sub-Optimal – Solution Architect / DB Architect / Developers are not Database savvy – Developers use Shortcut Route to implement a solution • There is a Sub-Optimal algorithm in the Database – It could be a BUG causing issues – A feature improves a bottleneck but causes a side-effect • Human Error – Human tend to forget things under pressure (18c – Autonomous Database  ) Oracle Confidential – Internal/Restricted/Highly Restricted
  • 6. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Why Concept ? • Database Architecture – Memory Structures – Background / Server Processes • Database Objects • SQL & PL/SQL • Database Tools & Features • Optimizer & Critical Inputs to Optimizer • New Features / Features Deprecated Oracle Confidential – Internal/Restricted/Highly Restricted
  • 7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | At High Level (In the order of priority) • Know your Database • Know your Development Tool • Know your Data • Know your Application • Know your Developers  Oracle Confidential – Internal/Restricted/Highly Restricted A Mantra for a Successful Development Project “Don’t treat Database as a Black Box”
  • 8. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Architecture (Just Enough Diagram) Oracle Confidential – Internal/Restricted/Highly Restricted User or App Server Oracle Server Process Network Or Local Shared Pool Log Buffer Buffer Cache Shared Global Area - SGA LGWR DBWR Disk Reads Redo Logs Commits / Rollbacks
  • 9. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Redo & Undo • Redo – Replay a Transaction – Flushed from SGA to On-Disk Logs • Undo – Opposite of Redo – Put back the Data – as it was – Critical for Read Consistency Oracle Confidential – Internal/Restricted/Highly Restricted Not an Overhead, but Generate as minimal as possible
  • 10. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Maintaining Concurrency Seq 1 (User 1) Seq 2 (User 2) Seq 3 (User 1) Seq 4 (User 2) update stocks set qty = qty - 100 where prod_id = ‘A’; update stocks set qty = qty - 10 where prod_id = ‘B’; update stocks set qty = qty - 75 where prod_id = ‘B’; update stocks set qty = qty - 50 where prod_id = ‘A’; Success Success Locked Deadlock Readers do not block Readers / Writers Writers do not block Readers / Writers Writer block Writers ONLY at ROW level
  • 11. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Maintaining Concurrency (contd..) • Locks – Application Enforced  Row Level Lock (TX Contention)  Ora-00060 (Deadlock) – Oracle Enforced  ITL (Lock Mode 6)  Bitmap (Lock Mode 4)  Duplicate Unique / Primary Key (Lock Mode 4)  TM Contention Oracle Confidential – Internal/Restricted/Highly Restricted Except for ITL, others are Application Issue itl.sql
  • 12. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Question Time • Is Initrans a Block Level or a Table Level Parameter ? • What is the default value of Initrans for a Table ? • What is the default value of Initrans for an Index ? • Maximum number of Transaction an Oracle Block can accommodate ? Oracle Confidential – Internal/Restricted/Highly Restricted itl.sql Database Block Size 8192 Variable Header 48 Bytes ITL 24 Bytes 8192 – 48 8144 50% of 8144 4072 4072/24 169
  • 13. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ITL Allocation Process Diagram Oracle Confidential – Internal/Restricted/Highly Restricted
  • 14. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • Table Level Lock • Primary Cause – Update to a Primary Key (A Bad Idea) – Un-indexed Foreign Keys User 1 (11:57:50) Updates update emp set empno=:b1, ename=:b2, ename=:b3, job=:b4, mgr=:b5, hiredate=:b6, sal=:b7, comm=:b8, deptno=:b9 where rowid=:rowid; User 2 (11:57:51) Updates update dept set deptno=:b1, dname=:b2, loc=:b3 where rowid=:rowid; TM Contention
  • 15. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • Delete’s are cascaded to Child Table User 1 (11:57:50) Deletes delete from dept where deptno=10; User 2 (11:57:51) Deletes delete from dept where deptno=20; What is “On Delete Cascade” Constraint ? • User 2 Waits for “TM Contention” • Primary Cause – Deleting a Primary Key – Un-indexed Foreign Keys Idea is not to create Indexes on all the Foreign Keys Know your Application / Know your Queries
  • 16. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | TM Contention • Table Level Lock • Primary Cause – Update to a Primary Key (A Bad Idea) – Unindexed Foreign Keys • Tools that UPDATE every column • Solution (Quantify Pros & Cons) – Update only Relevant Columns (No Primary Keys) – Index Foreign Keys Another example of “Know your Development Tool”
  • 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | The Shared Pool • Objective – to read as much as from Memory • Stores Parsed version of SQL’s / PL/SQL’s • Split into various components – Library Cache, Dictionary Cache and many more… • LRU Algorithm • Protected by Latches / Mutexes (Mutual Exclusive Locks) • Contention : Frequent Allocation / De-Allocation of Memory • Contention : Frequent Loading of Cursors Sharing of SQL’s key to effective Shared Pool Utilization Maintain Coding Standards
  • 18. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Query Processing Syntax / Semantics Checks Sharable Parent Cursor Available ? Execute Store Parent Cursor in Library Cache Query Transformation / Execution Plans Store child Cursor in Library Cache Sharable Child Cursor Available ? N N Y Y Soft Parse Hard Parse
  • 19. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Sharing of SQL’s / Effective Memory Utilization • Literals v/s Bind Variables select empno, ename, sal from emp where empno=7369; select empno, ename, sal from emp where empno=7521; select empno, ename, sal from emp where empno=7902; select empno, ename, sal from emp where empno=:b1; Problem mpc.sql select sql_id, sql_text, executions, version_count, sharable_mem, force_matching_signature, plan_hash_value from v$sqlarea where sql_text like 'select empno, ename, sal from emp where empno%'; SQL_ID SQL_TEXT EXECUTIONS VERSION_COUNT SHARABLE_MEM FORCE_MATCHING_SIGNATURE PLAN_HASH_VALUE ------------- ---------------------------------- ---------- ------------- ------------ ------------------------ --------------- dyqfcpyqwd9zk select empno, ename, sal from emp 3 1 27554 7320676830101929156 2949544139 where empno=:b1 gzbpcx3suxjk3 select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139 where empno=7902 0h7y2gqzrxubu select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139 where empno=7369 5ptzb4hqxb1wv select empno, ename, sal from emp 1 1 23419 5733699794739066958 2949544139 where empno=7521
  • 20. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Coding Standard (Multiple Parent Cursors) Parent (select ename from emp where empno=:b1) Child Parent (select dname from dept where deptno=:b2) Child Parent (SELECT ENAME FROM EMP WHERE EMPNO=:B1) Child Parent (select ename from emp e where empno=:b1) Child A Parent requires at least one Child Cursor Obvious Problem
  • 21. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Coding Standard (Multiple Child Cursors) Child 0 (Schema X) Child 1 (Schema Y) Child 2 (Schema X OICA=10) Child 3 (Schema X different bind length) Parent (select * from emp where ename=:b1) Obvious – but a problem Problem My Blog “Authorization Check Failed ! Multiple Child Cursors..” Dec 2013 mcc.sql
  • 22. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Bind Graduation Bind Name Bind Length Graduate to Child Number :b1 10 32 1 :b1 30 32 1 :b1 40 128 2 :b1 80 128 2 :b1 140 2000 3 :b1 2040 4000 4 select empno, ename, sal from emp where empno=:b1; Identify cause of Multiple Child Cursors v$sql_shared_cursor Pre 12c
  • 23. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Sharing of SQL • Why ? – For Performance Reason – Scalability – Effective Resource Utilization (Memory / CPU) • • How ? – Implement Bind (only when required) – Maintain Coding Standard test_bind.sql
  • 24. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Production Downtime (real life example) Snap Id Snap Time Sessions Curs/Sess --------- ------------------- -------- --------- Begin Snap: 24222 18-Apr-14 11:30:27 401 74.5 End Snap: 24223 18-Apr-14 12:30:16 783 86.0 Elapsed: 59.81 (mins) DB Time: 1,133.51 (mins) Cache Sizes ~~~~~~~~~~~ Begin End ---------- ---------- Buffer Cache: 23,552M 23,552M Std Block Size: 8K Shared Pool Size: 12,288M 12,288M Log Buffer: 15,112K Load Profile ~~~~~~~~~~~~ Per Second Per Transaction --------------- --------------- Redo size: 859,548.86 25,693.53 Logical reads: 154,690.90 4,624.00 Block changes: 3,634.57 108.64 Physical reads: 1,515.71 45.31 Physical writes: 296.98 8.88 User calls: 2,817.43 84.22 Parses: 2,842.89 84.98 Hard parses: 156.49 4.68 Sorts: 664.11 19.85 Logons: 0.97 0.03 Executes: 6,454.01 192.92 Transactions: 33.45 19 Active 5.5%
  • 25. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Production Downtime (real life example) Top 5 Timed Events Avg %Total ~~~~~~~~~~~~~~~~~~ wait Call Event Waits Time (s) (ms) Time Wait Class ------------------------------ ------------ ----------- ------ ------ ---------- db file sequential read 4,874,348 35,300 7 51.9 User I/O CPU time 22,056 32.4 ARCH wait on SENDREQ 2,787 13,399 4808 19.7 Network gc cr block busy 238,851 2,833 12 4.2 Cluster gcs log flush sync 1,017,044 2,672 3 3.9 Other ------------------------------------------------------------- Instance Activity Stats DB/Inst: IIMSP/IIMSP2 Snaps: 24222-24223 Statistic Total per Second per Trans -------------------------------- ------------------ -------------- ------------- parse count (failures) 357,665 99.7 3.0 parse count (hard) 561,605 156.5 4.7 parse count (total) 10,202,613 2,842.9 85.0 64% Failures Fix High Hard Parse Failures = Unwanted Work Fix Hard Parses
  • 26. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 26 Client / Application Handle Server Process Memory Private SQL Area SGA Library Cache Shared SQL Area Cursor Concepts • Private SQL Area – Parsed SQL Statement – Session Specific Information • Shared SQL Area – Parsed SQL Statement – Execution Plan PGA SGA scc.sql Locks
  • 27. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 27 Session Cached Cursors • Avoids Soft Parse – Better Concurrency • Maintains Direct Address to the Memory Object • Locks the Object to avoid flushing out • Reduces the Contention on Library Cache Latches & Locks & Mutexes • Cursors are cached after – 3 Executions within a Session or – 2 Executions within a Session, if already Hard Parsed by other Session • Defaults to 50 – Refrain from setting to a very high value – Monitor parse count (total), parse count (hard), session cache cursor hits
  • 28. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | The Buffer Cache • Objective – to read as much as from Memory • Caches Data Blocks to eliminate Disk I/O’s • Blocks are either Dirty or Clean • LRU Algorithm, Mid Point Insertion & Touch Count (TCH) • Protected by Latches to maintain LRU and TCH • Contention : Unwanted I/O’s • Contention : High Concurrency on a Block Logical Reads are Faster than Disk Reads Logical Reads consume CPU Effective Utilization of Cache – Optimizing I/O’s
  • 29. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Question time… • Outer Query select get_dname(deptno) deptno, ename, sal from emp where deptno in (10,20); • Query in GET_DNAME function select dname from dept where deptno=:b1; test_scalar.sql Blog on “Cache Buffers Chains Latch Contention…” May 2010 Scalar Subqueries, DETERMINISTIC, RESULT_CACHE • Assuming, 200 rows are fetched by Outer Query What would be the total number of executions of the Function ?
  • 30. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Confidential – Internal/Restricted/Highly Restricted 30 Readers do not block Readers / Writers Writers do not block Readers / Writers Writer block Writers ONLY at ROW level Data Layer v/s Cache Layer Readers MUST block Writers Single Writer MUST block All Operations • For Data Layer – Protected by Locks & Enqueues • For Cache Layer (Raw Memory) – Protected by Latches & Mutexes
  • 31. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Oracle Waits (to name a few) • db file sequential read • db file scattered read • read by other session • direct path read • Latch / Mutexes Eliminating Waits critical for Response Sensitive Application Single Block Reads Multi Block Reads Block Level Contention Bypass Cache / Smart Scans Concurrency
  • 32. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Row Migration row_migration.sql Higher Value means Impact of Migrated Rows, Chained Rows, >255 Columns • Impact due to Additional HOP (Additional I/O) • Impact Index Scans Index Block Table Block Index Block Table Block Table Blockv/s Check for table fetch continued row
  • 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Question In terms of performance – Is there any difference between these queries ? select a1, a10 from a where rowid=:rowid; Additional LIO’s due to Intra-Block Chaining Table A Rows 10000 Blocks 100 Columns 300 select a1, a200 from a where rowid=:rowid; select a1, a300 from a where rowid=:rowid; Intra_block.sql I/O’s (300 Columns) I/O’s (600 Columns) 1 to 45 = 7 I/O’s 1 to 90 = 7 I/O’s 46 to 300 = 8 I/O’s 91 to 345 = 8 I/O’s 346 onwards = 9 I/O’s
  • 34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Which Query is better ? Ensure Rewrite is functionally Correct Don’t Rely on Optimizer Transformation • Table T1 with Billions of Rows and an Index on C4 • Table T2 with Millions of Rows and Index T2_IDX(A,B) select t1.c1, t1.c2, (select t2.c3 from t2 where t2.a = t1.a and t2.b = t1.b) c3 from t1 Where t1.c4='AIOUG' select t1.c1, t1.c2, (select func(t2,a,b) from dual) c3 from t1 where t1.c4='AIOUG' select t1.c1, t1.c2, t2.c3 from t1, t2 where t1.c4='AIOUG' and t1.a = t2.a and t1.b = t2.b (+) (+) • Assuming the Predicate on T1 fetches only 1 Row • Assuming the Predicate on T1 fetches 100,000 Rows qt_scalar.sql
  • 35. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Explain Plan - Bind Variables Trap ep.sql Use Run Time Plan, using dbms_xplan.display_cursor • Bind with Explain Plan has two problems – Bind Variables are declared as VARCHAR2 (Default Behavior) – Plan Generation does not peek into Bind Variable • Plan, may or may not match (Not Reliable) • AUTOTRACE has similar problem
  • 36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Bind Peeking • Introduced in 9i • Hard Parse, as if Bind is a Literal • Appropriate plan based on Bind Value • 9i & 10g, Hard Parse Bind Value Wins • 11g – Adaptive Cursor Sharing • Plan Upgraded, post subsequent execution • Bad Query Performance, at least Once bp.sql How do you take care of a High Performance Application ? Solution : Use Bind, only when required. BIND_AWARE hint.
  • 37. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Indexes not being Used (Real Life Example) INST_ID SQL_ID SQL_TEXT EXECUTIONS BUFFER_GETS -------- ------------- ---------------------------------------- ---------- ----------- 1 1kfxns3m02pu3 select distinct TXT_ADDRESS_LINE_1 , TXT 28 1213546962 _ADDRESS_LINE_2 , TXT_APARTMENT , TXT_ST REET , TXT_CITYDISTRICT , TXT_AREAVILLAG E , TXT_STATE , NUM_PINCODE from genmst_ location a, Risk_headers b where a.NUM_L OCATION_CD = b.location_code and a.num_l ocation_cd = (SELECT location_code FROM risk_headers WHERE reference_num = :"SYS _B_0" AND reference_date = TO_DATE (:"SY S_B_1", :"SYS_B_2") and POLICY_RISK_SERI AL = :"SYS_B_3") Enter value for table: RISK_HEADERS OWNER NUM_ROWS BLOCKS ---------- ---------- ---------- INS 14844896 846555 select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET , TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE From genmst_location a, Risk_headers b where to_a.NUM_LOCATION_CD = b.location_code and a.num_location_cd = (SELECT location_code FROM INS.risk_headers WHERE reference_num = '201412200014630’ AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’) and POLICY_RISK_SERIAL = 1)
  • 38. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Indexes not being Used (Real Life Example) -------------------------------------------------------------- | Id | Operation | Name | -------------------------------------------------------------- | 0 | SELECT STATEMENT | | | 1 | HASH UNIQUE | | | 2 | NESTED LOOPS | | | 3 | TABLE ACCESS BY INDEX ROWID | GENMST_LOCATION | |* 4 | INDEX UNIQUE SCAN | PK_GENMST_LOCATION | | 5 | TABLE ACCESS BY INDEX ROWID| RISK_HEADERS | |* 6 | INDEX UNIQUE SCAN | PK_RISK_HEADERS | |* 7 | TABLE ACCESS FULL | RISK_HEADERS | -------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("A"."NUM_LOCATION_CD"=TO_NUMBER()) 6 - access("REFERENCE_NUM"=TO_NUMBER(:SYS_B_0) AND "REFERENCE_DATE"=TO_DATE(:SYS_B_1,:SYS_B_2) AND "POLICY_RISK_SERIAL"=:SYS_B_3) 7 - filter("A"."NUM_LOCATION_CD"=TO_NUMBER("B"."LOCATION_CODE")) select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET , TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE From genmst_location a, Risk_headers b where to_a.NUM_LOCATION_CD = b.location_code and a.num_location_cd = (SELECT location_code FROM INS.risk_headers WHERE reference_num = '201412200014630’ AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’) and POLICY_RISK_SERIAL = 1)
  • 39. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Indexes not being Used (Real Life Example) select distinct TXT_ADDRESS_LINE_1, TXT_ADDRESS_LINE_2, TXT_APARTMENT, TXT_STREET , TXT_CITYDISTRICT , TXT_AREAVILLAGE , TXT_STATE , NUM_PINCODE From genmst_location a, Risk_headers b where to_char(to_a.NUM_LOCATION_CD) = b.location_code and a.num_location_cd = (SELECT location_code FROM INS.risk_headers WHERE reference_num = '201412200014630’ AND reference_date = TO_DATE('20/12/2014','DD/MM/YYYY’) and POLICY_RISK_SERIAL = 1) Datatype Mismatch – Should be taken care during Design Phase
  • 40. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Select the Best Index 1. SELECT C FROM T1 WHERE A=:B1; 2. SELECT C, D FROM T1 WHERE A=:B1 AND B=:B2; a. Index on (A) b. Index on (B,A) c. Index on (A,B) Both the Queries Only 2nd Query Both the Queries pc.sql What will be the Impact of Index C on 1st Query ? SQL Performance Analyzer – Proactive Performance Analysis
  • 41. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Select the Best Index 1. SELECT * FROM T1 WHERE OBJECT_ID=100; 2. SELECT * FROM T1 WHERE TEMPORARY=‘Y’ AND OBJECT_ID=100; 3. SELECT * FROM T1 WHERE TEMPORARY=‘Y’; a. Index on (OBJECT_ID) b. Index on (OBJECT_ID, TEMPORARY) c. Index on (TEMPORARY, OBJECT_ID) SKIP SCAN requires a Low Cardinality Column as a Leading Column Num_Rows 90410 Object_id Num_Distinct => 90410 Temporary Num_Distinct => 2
  • 42. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Index Myths & Misconceptions I have to come across a scenerio where Index Rebuild actually Resolved Performance Issues • Index Rebuild – To make it more Efficient or Small – Not always True – In case the Index is Shrinked, it can introduce Block Level Contention – Index tend to get into their Original Shape (Pre-Rebuild) – Improving CF of an Index may Impact CF of another Index – Statistics : branch node splits / leaf node splits & leaf node 90-10 splits – Exception : Rebuilding an Index to convert from Reverse to NoReverse or vice versa ir.sql
  • 43. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Understanding Block Split (50-50) • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY
  • 44. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY DELETE INSERT Understanding Block Split (50-50)
  • 45. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY DELETE Understanding Block Split (50-50)
  • 46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY DELETE Understanding Block Split (50-50)
  • 47. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY DELETE Understanding Block Split (50-50)
  • 48. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • 50-50 Split caused by – Updates / Inserts of a Non-Largest Value into a Leaf Block Update table set value=‘GOA’ where value=‘BAA’; OR insert into table values (‘GOA’) AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN EAZ LMN OAK ODL KAY AAA AAC AAD BAA BCC CAB CDA CDE CEA CEB DAA DAD DAY FAA EAN OAK ODL KAY DELETE EAZ GOA LMN INSERT Understanding Block Split (50-50)
  • 49. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Understanding Block Split (90-10) • 90-10 Split caused by – Monotonically Increasing Value (Date-Time/Sequences) insert into table values (32); 1 2 3 4 5 6 8 9 11 12 14 15 16 18 19 20 21 22 23 24 25 27 28 29 30 1 2 3 4 5 6 8 9 11 12 14 15 16 18 19 20 21 22 23 24 25 27 28 29 30 INSERT
  • 50. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Understanding Block Split (90-10) • 90-10 Split caused by – Monotonically Increasing Value (Date-Time/Sequences) insert into table values (32); 1 2 3 4 5 6 8 9 11 12 14 15 16 18 19 20 21 22 23 24 25 27 28 29 30 1 2 3 4 5 6 8 9 11 12 14 15 16 18 19 20 21 22 23 24 25 27 28 29 30 32 New Block Allocated Inserted
  • 51. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Indexing Guidelines Guideline Reasoning Create as many, but try to keep the number minimum. Indexes increase Performance, but also consume disk space and processing resources. Test First to determine Quantifiable Benefits Same as above. Also, an Index to optimize one query can impact other queries. Use the correct type of Index Correct Index usage maximizes performance Use Btree Indexes in OLTP Btree Indexes are suitable for OLTP as the data is frequently updated Use Bitmap Indexes in Data warehouse environments Bitmap Indexes are suitable for Data warehouses as the data is rarely manipulated Check for the Column Ordering based on Application / Query pattern Avoid Redundant Indexes Don’t Rebuild Indexes unless you have a solid reason Rebuilding can cause concurrency issues Monitor your Indexes and drop indexes that aren’t used Doing this frees up space and improves DML Before Dropping an index, consider marking them Invisible This allows you to better determine if there are any performance impact before you drop these.
  • 52. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • Requirement – Sales Tax Report • Join Financial Year Table to Invoices Table • DB Version 8174 v/s Now 52 Previous Year Finance Table (20 GB) Current Year Finance Table (5 GB) Invoices Table (100 GB) Invoices Table (100 GB) UNION ALL Issue : UAT – 5 Minutes Prod – 60+ Minutes 2 Scans of 100 GB Optimizer Evolution…(An Example)
  • 53. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Modification - Rewritten for a Single Scan of Invoices 53 Now, optimizer does it for us by way of a Query Transformation Join Factorization Previous Year Finance Table (20 GB) Current Year Finance Table (5 GB) Invoices Table (100 GB) UNION ALL Benefit : < 1 Minute Optimizer Evolution…(An Example)