• 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
Trang 1PL/SQL Performance tuning Concurrency & Recovery
Data transfer utilities
Oracle Day 5
Trang 2To 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
Trang 3PL/SQL Performance tuning
Trang 4• By tuning the applications, one can make sure they continue to deliver the
required response time and throughput
Trang 5Copyright © 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
Trang 6Solution 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.
Trang 7Copyright © 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
Trang 8DECLARE – 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
BEGIN
IF criteria1 THEN DECALRE
l_chr_var1 VARCHAR2(15) :=
takes_five_miunte(… );
BEGIN use_the_defined_variable(l_chr_var1); END;
ELSE
Trang 9Copyright © 2005 , Infosys Technologies Ltd
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 one’s own versions of built-in functions such as REPLACE, TRANSLATE, SUBSTR, INSTR, RPAD, and LTRIM
Trang 10Inefficient 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
Trang 11Copyright © 2005 , Infosys Technologies Ltd
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
Trang 12Implicit Datatype Conversions
• Avoiding implicit conversions can improve performance
BEGIN vChar := 25; converted vChar := '25'; not converted
END;
Trang 13Copyright © 2005 , Infosys Technologies Ltd
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
Trang 14Unnecessary NOT NULL Constraints
• Using the NOT NULL constraint incurs a performance cost
m := a + b;
IF m IS NULL THEN enforce constraint programmatically
END IF;
END;
Trang 15Copyright © 2005 , Infosys Technologies Ltd
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
Trang 16Identifying 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
Trang 17Copyright © 2005 , Infosys Technologies Ltd
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
Trang 18DBMS_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
Trang 19Concurrency in Oracle
Trang 20Locking 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
Trang 21Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
Trang 22LOCK TABLE
LOCK TABLE
LOCK TABLE <tableName> IN <mode> MODE
Trang 23Copyright © 2005 , Infosys Technologies Ltd
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
Trang 25Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
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
Locking Modes
Trang 26SQL Statement Mode of table lock
Select for update of RS
Lock table in rowshare mode RS
Lock table in rowx mode RX
Lock table in share mode S
Lock table in exclusive mode X
Lock table in srx mode SRX
Row locknoneXX
Trang 27Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
Trang 28Read 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
Trang 29Recovery in Oracle
Trang 30Possible causes of failure
Trang 31Copyright © 2005 , Infosys Technologies Ltd
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
Trang 32• 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
Trang 33Copyright © 2005 , Infosys Technologies Ltd
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
Trang 34Data Transfer Utilities
Trang 35Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
Objectives
Export utility
Import utility
SQL Loader
Trang 36Export & 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
Trang 37Copyright © 2005 , Infosys Technologies Ltd
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>
Trang 38Import 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
Trang 39Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
SQL * Loader
• SQL*Loader is Oracle’s 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
Trang 40The SQL * Loader environment
Input Data File
Control File
SQL * Loader Executable
Oracle Database
Data Data
Trang 41Copyright © 2005 , Infosys Technologies Ltd
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)
Trang 42The 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
Trang 43Copyright © 2005 , Infosys Technologies Ltd
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
Trang 44The 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
Trang 45Copyright © 2005 , Infosys Technologies Ltd
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
Trang 46Creating 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
Microsoft Office
Excel Comma Separated V
Trang 47Copyright © 2005 , Infosys Technologies Ltd
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
)
Trang 48• One can see your loaded data with your favorite:
SQL>Select * from marks;
Trang 49Copyright © 2005 , Infosys Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
Trang 50• 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 procedures- some implicitly and some explicitly by DBA
• To understand data transfer utilities
Trang 51Copyright © 2005 , Infosys
Technologies Ltd
ER/CORP/CRS/DB25/003 Version No 2.0
Thank You!