Sei sulla pagina 1di 51

PL/SQL Performance tuning Concurrency & Recovery Data transfer utilities

Oracle Day 5

Objectives
To understand PL/SQL performance tuning To understand few tools like DBMS_TRACE used to tune the PL/SQL code. To understand the locking mechanism and types of locking in Oracle. To understand the read consistency model. To understand the concurrency schemes followed by Oracle. To understand different kinds of database failures and procedure to recover from them. To understand data transfer utilities

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

PL/SQL Performance tuning

Tuning PL/SQL Applications


Usually developer efforts are concentrated on tuning the SQLs used by the PL/SQL program for performance improvement.

Being a procedural language, there can be situations where excessive CPU usage arises out of the code in Pl/SQL even though there are no database accesses.
By tuning the applications, one can make sure they continue to deliver the required response time and throughput.

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

Reasons for PL/SQL Performance Problems


Badly written SQL statements Poor programming practices Misuse of shared memory.

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

Solution to Badly written SQL statements


Analyze the execution plans and performance using EXPLAIN PLAN statement.

Rewrite the SQL statements.


For more info on SQL statements, please refer the RDBMS artifacts.

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

Solutions to Poor programming practices


Here different areas of PL/SQL code are categorized and some of the basic principles of optimizing are discussed:

DECLARE what is required by the code Hand crafting the Built-in Functions Inefficient Conditional Control Statements Check the LOOP Statements Implicit Datatype Conversions Inappropriate Declarations for Numeric Datatypes Unnecessary NOT NULL Constraints

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

DECLARE what is required by the code


After the completion of the code, search for un-used variables if any. Remove them from the code. Defer the execution till it required.
DECLARE
. BEGIN IF criteria1 THEN DECALRE

DECLARE
l_chr_var1 VARCHAR2(15) := takes_five_miunte(..); . BEGIN

IF criteria1 THEN
use_the_defined_variable(l_chr_var1); ELSE -- say 90% of the cases follows this --Normal_code;

l_chr_var1 VARCHAR2(15) :=
takes_five_miunte(..); BEGIN use_the_defined_variable(l_chr_var1); END;

END IF;
END;

ELSE
--Normal_code; END IF; END;
Copyright 2005, Infosys Technologies Ltd
8

ER/CORP/CRS/DB25/003 Version No. 2.0

Hand crafting the Built-in Functions


Built-in functions are more efficient. Do not hand code ones own versions of built-in functions such as REPLACE, TRANSLATE, SUBSTR, INSTR, RPAD, and LTRIM. .

Copyright 2005, Infosys Technologies Ltd

ER/CORP/CRS/DB25/003 Version No. 2.0

Inefficient Conditional Control Statements


Most probable condition must be placed initially. Now, consider the following AND expression: IF credit_ok(cust_id) AND (loan < 5000) THEN ... END IF; The Boolean function credit_ok is always called. However, if one switch the operands of AND as follows IF (loan < 5000) AND credit_ok(cust_id) THEN ... END IF; The function is called only when the expression loan < 5000 is true

Copyright 2005, Infosys Technologies Ltd

10

ER/CORP/CRS/DB25/003 Version No. 2.0

Check the LOOP statements


Minimize the number of iterations inside loop. As soon as the code does the required job EXIT the loop.

Loop within a loop One common place where there is possibility of unnecessary code execution.
Make sure that there should not be statements inside the loop that can be executed outside the loop.

Copyright 2005, Infosys Technologies Ltd

11

ER/CORP/CRS/DB25/003 Version No. 2.0

Implicit Datatype Conversions


Avoiding implicit conversions can improve performance. DECLARE vChar CHAR(5); BEGIN vChar := 25; -- converted vChar := '25'; -- not converted DECLARE vNum NUMBER; BEGIN vNum:=vNum+15; -- converted vNum:=vNum+15.0; -- not converted

...
END;

...
END;

Copyright 2005, Infosys Technologies Ltd

12

ER/CORP/CRS/DB25/003 Version No. 2.0

Inappropriate Declarations for Numeric Datatypes


When one need to declare an integer variable, use the datatype PLS_INTEGER, which is the most efficient numeric type.

Copyright 2005, Infosys Technologies Ltd

13

ER/CORP/CRS/DB25/003 Version No. 2.0

Unnecessary NOT NULL Constraints


Using the NOT NULL constraint incurs a performance cost.

PROCEDURE calc_m IS m NUMBER NOT NULL := 0; a NUMBER; b NUMBER; BEGIN ... m := a + b; ... END;

PROCEDURE calc_m IS m NUMBER; -- no constraint a NUMBER; b NUMBER; BEGIN ... m := a + b; IF m IS NULL THEN -- enforce constraint programmatically ... END IF; END;

Copyright 2005, Infosys Technologies Ltd

14

ER/CORP/CRS/DB25/003 Version No. 2.0

Solution to Misuse of shared memory


Sizing the shared memory pool correctly. Make sure it is large enough to hold all frequently used packages but not so large that memory is wasted.

Copyright 2005, Infosys Technologies Ltd

15

ER/CORP/CRS/DB25/003 Version No. 2.0

Identifying PL/SQL Performance problems


There are few tools/API provided by PL/SQL to identify the PL/SQL performance problems:
DBMS_PROFILER DBMS_TRACE

One need DBA-SYS access to use these tools/API

Copyright 2005, Infosys Technologies Ltd

16

ER/CORP/CRS/DB25/003 Version No. 2.0

DBMS_PROFILER
The Profiler API is implemented as PL/SQL package DBMS_PROFILER. Provides services for gathering and saving run-time statistics. The information is stored in database tables, which one can query later. For example, one can learn how much time was spent executing each PL/SQL line and subprogram.

Copyright 2005, Infosys Technologies Ltd

17

ER/CORP/CRS/DB25/003 Version No. 2.0

DBMS_TRACE
The Trace API is implemented as PL/SQL package DBMS_TRACE. Provides services for tracing execution by subprogram or exception. One can see the order in which subprograms get executed. In a typical session, follow the following steps:
Optionally, select specific subprograms for trace data collection. Start by calling the procedure set_plsql_trace in package DBMS_TRACE. Run the application to be traced. Stop by calling the procedure clear_plsql_trace.

Copyright 2005, Infosys Technologies Ltd

18

ER/CORP/CRS/DB25/003 Version No. 2.0

Concurrency in Oracle

Locking mechanism
The smallest unit that can be locked in oracle is the row For each SQL statement oracle acquires the appropriate lock automatically. Programmers cannot acquire locks at the row level explicitly The smallest unit at which programmers can explicitly acquire locks is the table Locks are released when transaction commits or rolls back Oracle does not acquire locks for reading

Copyright 2005, Infosys Technologies Ltd

20

ER/CORP/CRS/DB25/003 Version No. 2.0

Types of locks
When Oracle acquires locks at the row level, it automatically acquires locks at the table level also There are 5 different modes of locking at the table level
row share row exclusive share row exclusive share exclusive

Copyright 2005, Infosys Technologies Ltd

21

ER/CORP/CRS/DB25/003 Version No. 2.0

LOCK TABLE
LOCK TABLE LOCK TABLE <tableName> IN <mode> MODE

Copyright 2005, Infosys Technologies Ltd

22

ER/CORP/CRS/DB25/003 Version No. 2.0

Locking Modes

EXCLUSIVE(X)

No other transaction can lock the table.

SHARE(S)

Allow queries but no updates Other transactions can acquire S Lock on this table Can allow SELECT..FOR UPDATE & SELECT statements

Copyright 2005, Infosys Technologies Ltd

23

ER/CORP/CRS/DB25/003 Version No. 2.0

Locking Modes

ROW EXCLUSIVE(RX)

Allow concurrent access for queries, but prevent Share locking also by other transactions Permit Insert, Update, Delete or Select by other transactions/ or lock rows in same table by other transactions Prevent Share or Exclusive locking of the table by other transactions

Copyright 2005, Infosys Technologies Ltd

24

ER/CORP/CRS/DB25/003 Version No. 2.0

Locking Modes

ROW SHARE(=SHARE UPDATE)

Allow concurrent access, prevent Exclusive locking by other

transactions

SHARE ROW EXCLUSIVE(SRX)

Allow other users to look at table but prevent sharing and updates by other transactions

Copyright 2005, Infosys Technologies Ltd

25

ER/CORP/CRS/DB25/003 Version No. 2.0

Locking
SQL Statement Select .... from table insert,delete,update Select .... for update of Lock table in rowshare mode Mode of table lock none RX RS RS Row lock none

X
X

Lock table in rowx mode


Lock table in share mode Lock table in exclusive mode Lock table in srx mode

RX
S X SRX

Copyright 2005, Infosys Technologies Ltd

26

ER/CORP/CRS/DB25/003 Version No. 2.0

Lock Compatibility
SQL statement Table Lock Compatibility RS RX S SRX X SELECT..FROM None Y Y Y Y Y

INSERT..INTO
UPDATE SELECT..FOR..UPD SHARE MODE SRX MODE

RX
RX RS S SRX

Y
Y Y Y Y

Y
Y Y N N

N
N Y Y N

N
N N N N

N
N N N N

EXCLUSIVE MODE

Copyright 2005, Infosys Technologies Ltd

27

ER/CORP/CRS/DB25/003 Version No. 2.0

Read Consistency Model


System Change Number (SCN) A unique number which is assigned to each transaction when it starts Transaction table An internal data structure which stores information regarding the active transactions in the system

Copyright 2005, Infosys Technologies Ltd

28

ER/CORP/CRS/DB25/003 Version No. 2.0

Recovery in Oracle

Possible causes of failure


Process failure User/Server Process Background Process Database Instance failure Media failure

Copyright 2005, Infosys Technologies Ltd

30

ER/CORP/CRS/DB25/003 Version No. 2.0

Process recovery
Process recovery to be done when user/server process failed Failure detected by PMON which rolls back the transaction and release resources If process is a background process, generally instance cannot function correctly

Copyright 2005, Infosys Technologies Ltd

31

ER/CORP/CRS/DB25/003 Version No. 2.0

Instance recovery
Need Required because DBWR writes data to disk only when buffer is nearly full Some data which is committed may not be present in database Database may contain uncommitted data also Performed by SMON when database is restarted Roll forward using Redo Log to record data not present in data files Rolls back transactions that did not commit/were explicitly rolled back Release locks held by transactions in process at time of failure

Copyright 2005, Infosys Technologies Ltd

32

ER/CORP/CRS/DB25/003 Version No. 2.0

Media recovery
Initiated by DBA Complete Media recovery Restore backup data files Start recovery program using SQL *DBA Retrieve archived log files to roll forward and roll back using generated roll back segments

Copyright 2005, Infosys Technologies Ltd

33

ER/CORP/CRS/DB25/003 Version No. 2.0

Data Transfer Utilities

Objectives
Export utility Import utility SQL Loader

Copyright 2005, Infosys Technologies Ltd

35

ER/CORP/CRS/DB25/003 Version No. 2.0

Export & Import utilities


Complementary utilities which allow one to write data in an ORACLE-binary format from the database into operating system files and to read data back from those. EXPORT, IMPORT are used for the following tasks:
backup Oracle data in operating system files restore tables that were dropped save space or reduce fragmentation in the database move data from one owner to another

Copyright 2005, Infosys Technologies Ltd

36

ER/CORP/CRS/DB25/003 Version No. 2.0

Export Utility - Invoking Export


Interactive dialogue: Simply type exp on command prompt.

Controlled through by passing parameters: One may pass parameters when one export data from the database.
Type the following at command prompt

C:\>exp scott/tiger file=empdept.expdat tables=(EMP,DEPT) log=empdept.log Parameterfile controlled: One may use a parameter file where the parameters are stored.
Type the following at command prompt

C:\>exp <userid/password> parfile=<filename>

Copyright 2005, Infosys Technologies Ltd

37

ER/CORP/CRS/DB25/003 Version No. 2.0

Import Utility - Invoking Import


Interactive dialogue: Simply type imp on command prompt.

Controlled through by passing parameters: One may pass parameters when one import data.
Type the following at command prompt

C:\>imp <userid/password> tables=(table1,table2)

Parameterfile controlled: One may use a parameter file where the parameters are stored.
Type the following at command prompt

C:\>imp <userid/password> parfile=<filename>

Copyright 2005, Infosys Technologies Ltd

38

ER/CORP/CRS/DB25/003 Version No. 2.0

SQL * Loader
SQL*Loader is Oracles utility program for loading data into an Oracle table. SQL*Loader takes two input files a control file and a data file and loads the data into a single Oracle table.

Copyright 2005, Infosys Technologies Ltd

39

ER/CORP/CRS/DB25/003 Version No. 2.0

The SQL * Loader environment


Control File

Data

Oracle Database

SQL * Loader Executable

Data

Input Data File

ec or d fo s n r l ot oa se di le ng ct ed

at th r ds ro or er ec e R aus c

Discard File

Log File

Bad File

Copyright 2005, Infosys Technologies Ltd

40

ER/CORP/CRS/DB25/003 Version No. 2.0

The SQL * Loader Control file


Key to any load process. The control file provides the following information to SQL*Loader:

The name and location of the input data file The format of the records in the input data file The name of the table or tables to be loaded The correspondence between the fields in the input record and the columns in the database tables being loaded Selection criteria defining which records from the input file contain data to be inserted into the destination database tables. The names and locations of the bad file and the discard file (Explained later)

Copyright 2005, Infosys Technologies Ltd

41

ER/CORP/CRS/DB25/003 Version No. 2.0

The SQL * Loader Log file


The log file is a record of SQL*Loader's activities during a load session. It contains information such as the following:

The names of the control file, log file, bad file, discard file, and data file The values of several command-line parameters A detailed breakdown of the fields and datatypes in the data file that was loaded Error messages for records that cause errors Messages indicating when records have been discarded A summary of the load that includes the number of logical records read from the data file, the number of rows rejected because of errors, the number of rows discarded because of selection criteria, and the elapsed time of the load

Copyright 2005, Infosys Technologies Ltd

42

ER/CORP/CRS/DB25/003 Version No. 2.0

The SQL * Loader Bad file


Whenever SQL*Loader encounters a database error while trying to load a record, it writes that record to a file known as the bad file.

Common scenarios are:


insert failing because of some type of error. Integrity constraint violations lack of free space in a tablespace, can also cause insert operations to fail.

Bad files are mandatory.

Copyright 2005, Infosys Technologies Ltd

43

ER/CORP/CRS/DB25/003 Version No. 2.0

The SQL * Loader Discard file


Used to hold records that do not meet selection criteria specified in the SQL*Loader control file.

Discard files are optional.

Copyright 2005, Infosys Technologies Ltd

44

ER/CORP/CRS/DB25/003 Version No. 2.0

An example on usage of SQL * Loader


The following slides contains a short example showing how SQL*Loader is used.

For this example, we'll be loading a Unix module mark sheet (XLS) of a FP batch taken from perception server (examination server) into Oracle

Copyright 2005, Infosys Technologies Ltd

45

ER/CORP/CRS/DB25/003 Version No. 2.0

Creating Data file


Save your Excel spreadsheet data as a Comma-Separated-Variable (*.csv) file.

Click on the icon below to get the sample CSV file

Copyright 2005, Infosys Technologies Ltd

46

ER/CORP/CRS/DB25/003 Version No. 2.0

Creating Control file


Using any text editor, create a file (say, e:\workarea\marksheet.ctl) containing these lines: LOAD DATA INFILE 'E:\workarea\marksheet.csv' REPLACE INTO TABLE scott.marks FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (empid INTEGER EXTERNAL, quiz1 INTEGER EXTERNAL, quiz2 INTEGER EXTERNAL, test INTEGER EXTERNAL, total INTEGER EXTERNAL, grade )

Copyright 2005, Infosys Technologies Ltd

47

ER/CORP/CRS/DB25/003 Version No. 2.0

Running SQL * Loader


At an MS-DOS prompt (or the Start, Run menu) , execute SQL*Loader as follows:

C:\>sqlldr scott/tiger@training control=e:\workarea\marksheet.ctl

One can see your loaded data with your favorite: SQL>Select * from marks;

Copyright 2005, Infosys Technologies Ltd

48

ER/CORP/CRS/DB25/003 Version No. 2.0

Export-Import vs. SQL * Loader


Export and Import tools are primarily used to maintain ORACLE database objects.

Because of the special binary format, files which had been created by the EXPORT utility can only be read by IMPORT utility.
To load data from other systems into the database one have to use SQL*LOADER.

Copyright 2005, Infosys Technologies Ltd

49

ER/CORP/CRS/DB25/003 Version No. 2.0

Summary
PL/SQL program can feel a performance hit because of so many reasons. We have to ensure the performance with best programming practices, SQL tuning and utilizing the memory in the right way. DBMS_PROFILER, DBMS_TRACE are two useful tools which are used by developers to isolate the performance related issues in a PL/SQL program. The default locking in Oracle is Row Exclusive. Programmers can acquire lock on table level as well. Read consistency model is used to read values from database. Database may fail because of process, instance or media failure. Different kinds of database failures are recovered by different proceduressome implicitly and some explicitly by DBA. To understand data transfer utilities

Copyright 2005, Infosys Technologies Ltd

50

ER/CORP/CRS/DB25/003 Version No. 2.0

Thank You!
Copyright 2005, Infosys Technologies Ltd
51

ER/CORP/CRS/DB25/003 Version No. 2.0

Potrebbero piacerti anche