Optimizing applications and database performance

Post on 08-Jun-2015

257 views 0 download

Tags:

description

The presentation was given in OTN Middle East North AfricaTour Riyadh 2014

Transcript of Optimizing applications and database performance

1

OPTIMIZING APPLICATION AND

DATABASE PERFORMANCE

2

ABOUT ME

• 15+ years of database-centric experience• Oracle Certified Developer 2000• Oracle DBA since 2002 -Oracle 8i,10g,11g RAC Expert , E-Business Suite DBA OCP

• Other Credentials: SCJP, SAP (FI/CO)• Different Roles - Developer, DBA, Analyst, SW Architect

• Trainer – Oracle Core, RAC Curriculum• Current JD

- Senior Database Architect, Manage Oracle & SQL Server DBAs

• Blog - dbmentors.blogspot.com

Inam Ullah Bukhari

3

AGENDA

• What is Optimization?• Why you need it? Tuning goals• How is it done/how it works?• Optimization Areas

Database Design (if it's not too late) Application Memory I/O Database Contention

4

WHAT/WHY - OPTIMIZATION?

• Achieving the best performance in shortest amount of time

• The use of system resources to perform work efficiently and quickly to homogenize the performance of a database.

5

OPTIMIZATION AREAS

• Database Design (if it's not too late):• Application• Memory• I/O • Database Contention

6

DATABASE DESIGN

Poor Design => Poor PerformanceData Modeling

7

OPTIMIZING APPLICATION DESIGN

• Simplicity In Application Design• Optimizing connection management• Reducing the number of requests to the database using stored

procedures• Reducing the number of requests to the database using

sequences• Optimizing performance with schema De-Normalization• Improving performance by sharing reusable code (Hard/Soft

Parsing)• Reducing the number of requests to the database using

materialized views• SQL Execution Efficiency - Avoiding dynamic SQL

8

DE-NORMALIZATION EXAMPLE

SET AUTOTRACE TRACEONLYSELECT F.FIRSTNAME, F.LASTNAME, PK.DESCRIPTION AS PHONEKIND,PA.WHENAVAILABLE AS AVAILABILITY, P.PHONENUMBERFROM FRIEND FINNER JOIN FRIEND_PHONE FP ON FP.FRIENDID = F.IDINNER JOIN PHONE P ON P.ID = FP.PHONEIDINNER JOIN PHONEKIND PK ON PK.ID = P.PHONEKINDIDLEFT OUTER JOIN AVAILABILITY PA ON PA.ID = P.AVAILABILITYIDWHERE F.ID = 29912;

9

MATERIALIZED VIEW EXAMPLESELECT PROD_ID, SUM(AMOUNT_SOLD) FROM SH.SALES GROUP BY PROD_ID;

CREATE MATERIALIZED VIEW SH.MV_SALES_BY_PRODUCTBUILD IMMEDIATE REFRESH ON COMMITENABLE QUERY REWRITE ASSELECT PROD_ID, SUM(AMOUNT_SOLD) AS AMOUNT_SOLD FROM SH.SALESGROUP BY PROD_ID;

10

AVOIDING DYNAMIC SQL EXAMPLESQL> declare 2 x number; 3 begin 4 for i in 1 .. 10 5 loop 6 execute immediate 'select count(*) from dual q1' into x; 7 select count(*) into x from dual q2; 8 end loop; 9 end; 10 /

-- sql_trace and tkprof select count(*) from dual q1

call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- --------Parse 10 0.00 0.00 0 0 0 0Execute 10 0.00 0.00 0 0 0 0Fetch 10 0.00 0.01 0 10 40 10------- ------ -------- ---------- ---------- ---------- ---------- --------total 30 0.00 0.01 0 10 40 10

*******************************************************************************

SELECT COUNT(*) FROM DUAL q2

call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- ---------- --------Parse 1 0.00 0.00 0 0 0 0Execute 10 0.00 0.00 0 0 0 0Fetch 10 0.00 0.00 0 10 40 10------- ------ -------- ---------- ---------- ---------- ---------- --------total 21 0.00 0.00 0 10 40 10

- No compile time check- No dependency mechanism (No clue)- Overhead of doing dynamic stuff

11

OPTIMIZING STORAGE STRUCTURES

Chained Rows/Migrated Rows (using multiple block sizes)

ALTER SYSTEM SET db_16k_cache_size = 16m scope=both;

• Contention reduction• Reduced row chaining• Faster updates• Reduced Pinging

• Less disk space waste• Less RAM waste• Minimize redo generation• Faster scans

12

OPTIMIZING STORAGE STRUCTURES

• Using LOBs - Separate Tablespace - Cache,NoCache,CacheReads

• Indexing the correct way - B-tree - Reverse Key - Function Based - Bitmap - Analyze - Compress

• Using partitioning - Partition Pruning - Massive DML Operations in parallel

13

OPTIMIZING SQL CODE PROCEDURE PNOBIND(CUSTID IN sh.customers.cust_id%TYPE)ISBEGINDECLARE aRow sh.customers%ROWTYPE;l_stmt VARCHAR2(2000);BEGINl_stmt := 'SELECT * FROM sh.customers s WHERE s.cust_id=‘ || TO_CHAR (CUSTID);EXECUTE IMMEDIATE l_stmt INTO aRow;…..END ;

PROCEDURE PBIND(CUSTID IN sh.customers.cust_id%TYPE) ISBEGINDECLARE aRow sh.customers%ROWTYPE;l_stmt VARCHAR2(2000);BEGINl_stmt := 'SELECT * FROM sh.customers s WHERE s.cust_id =:p_cust_id';EXECUTE IMMEDIATE l_stmt INTO aRow USING CUSTID;…..END;

PROCEDURE TEST_BIND_STATIC(CUSTID IN sh.customers.cust_id%TYPE) ISBEGINDECLARE aRow sh.customers%ROWTYPE;

BEGINSELECT * INTO aROW FROM sh.customers s WHERE s.cust_id =CUSTID;…..END;

Elapsed: 00:01:25.56

Elapsed: 00:00:05.35

Elapsed: 00:00:04.33

50k Runs

• Bind Variables

• Concurrency and scalability

14

OPTIMIZING SQL CODE

Avoiding full table scans (many I/O operations/buffer cache flush)FTS - Small TablesThe High-Water Mark

15

SQL OPTIMIZATIONArrays and Bulk operations

16

IMPROVING THE ORACLE OPTIMIZER• Optimizer Hints

/*+ optimizer_features_enable('11.1.0.6') */

• Statistics & Histogram

• Stored Outlines

17

OTHER OPTIMIZATIONSCaching results - client-side result cache ALTER SYSTEM SET CLIENT_RESULT_CACHE_SIZE=5M SCOPE=SPFILE; ALTER SESSION SET RESULT_CACHE_MODE = FORCE ALTER TABLE CUSTOMERS RESULT_CACHE (MODE FORCE); SELECT /*+ result_cache */ COUNTRY_NAME, CUST_LAST_NAME, COUNT(*) ……..

Enabling parallel SQL SELECT /*+ PARALLEL (S, 2) */ S.PROD_ID, S.CUST_ID, S.TIME_ID FROM SH.SALES S ORDER BY S.AMOUNT_SOLD DESC;

Direct path inserting /*+ APPEND */ hint for INSERT

18

OTHER OPTIMIZATIONS

19

OTHER OPTIMIZATIONSUsing create table as select – CTASAvoid Over Indexing

20

OTHER OPTIMIZATIONSAvoid unnecessary triggers – use virtual columns where possible

21

OTHER OPTIMIZATIONSSQL Loader & External Tables

22

OPTIMIZING MEMORY• Avoid Operating System paging/Swapping• AMM – Don’t use with hugepages and MTS• Tuning the Library Cache (Hits & Misses)

23

OPTIMIZING MEMORYDictionary Cache

- Reduce DDL activities - Use the CACHE option for Sequences

Program Global Area and the User Global Area - OPEN_CURSORS - SESSION_CACHED_CURSORS - CURSOR_SHARING

Buffer Cache- configure multiple Buffer Pools

24

OPTIMIZING I/O• Redologs on disks without other activities• Redo logs and Archived redo logs on separate disks• Heavily accessed files on separate disk• Distribute the data files based on disk controller allocation• Separate disks for data that is not related to the database• Striping objects across multiple disks• Distribute table and related indexes on different disks

25

OPTIMIZING CONTENTIONDetecting and preventing lock contention

- V$LOCK, V$ENQUEUE_LOCK, V$ENQUEUE_LOCK, DBA_WAITERS, DBA_BLOCKERS

Latches – Is there any Tuning? - V$SYSTEM_EVENT