P. 1
Lob Performance Guidelines

Lob Performance Guidelines

|Views: 2|Likes:
Published by Dirk Avery

More info:

Published by: Dirk Avery on Sep 29, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

07/07/2015

pdf

text

original

LOB Períormance Guidelines

.v Oracte !bite Paper
May 2001
LOB Performance GuideIines Page 2
LOB Períormance Guidelines
Lxecuti·e O·er·iew.......................................................................................... 3
LOB O·er·iew .................................................................................................. 3
Important Storage Parameters......................................................................... 4
(lUNK......................................................................................................... 4
Deíinition .................................................................................................. 4
Points to Note .......................................................................................... 4
Recommendation ..................................................................................... 4
In-line and Out-oí-Line storage: LNABLL S1ORAGL IN RO\ and
DISABLL S1ORAGL IN RO\............................................................... 4
Deíinition .................................................................................................. 4
Points to Note .......................................................................................... 5
Recommendation ..................................................................................... 5
(A(lL. NO(A(lL ................................................................................. 5
Deíinition .................................................................................................. 5
Points to Note .......................................................................................... 5
Recommendation ..................................................................................... 6
(onsistent Reads on LOBs: RL1LN1ION and P(1VLRSION........ 6
Deíinition .................................................................................................. 6
Points to Note .......................................................................................... 6
Recommendation ..................................................................................... ¯
LOGGING. NOLOGGING .................................................................... ¯
Deíinition .................................................................................................. ¯
Points to Note .......................................................................................... ¯
Recommendation ..................................................................................... ¯
Períormance GUIDLLINL - LOB Loading ............................................... ¯
Points to Note............................................................................................... ¯
Use arrav operations íor LOB inserts ................................................... ¯
LONG API access to LOB datatvpe......................................................... 8
APPLNDIX B................................................................................................... 9
Migration írom in-line to out-oí-line and out-oí-line to in-line,
storage............................................................................................................. 9
APPLNDIX (................................................................................................. 10
low LOB data is stored............................................................................ 10
In-line LOB - LOB size less than 3964 bvtes ................................... 10
In-line LOB - LOB size ~ 3965 bvtes 1 bvte greater than 3964, 10
In-line LOB - LOB size greater than 12 chunk addresses .............. 11
Out-oí-line LOBs - All LOB sizes...................................................... 11
LOB Performance GuideIines Page 3
LOB Períormance Guidelines
EXECUTIVE OVERVIEW
1his document gi·es a brieí o·er·iew oí Oracle`s LOB data structure. emphasizing
·arious storage parameter options and describes scenarios where those storage
parameters are best used. 1he purpose oí the latter is to describe the eííects oí
LOB storage options.
LOBs were designed to eííicientlv store and retrie·e large amounts oí data. Small
LOBs · 1MB, períorm better than LONGs íor inserts. and comparable on
selects. Large LOBs períorm better than LONGs in general.
Oracle recommends the use oí LOBs to store unstructured or semi-structured data.
and has pro·ided a LONG API to allow ease oí migration írom LONGs to LOBs.
Oracle plans to de-support LONGs in the íuture.
LOB OVERVIEW
\hene·er a table containing a LOB column is created. two segments are created to
hold the speciíied LOB column. 1hese segments are oí tvpe LOBSLGMLN1 and
LOBINDLX. 1he LOBINDLX segment is used to access LOB chunks´pages that
are stored in the LOBSLGMLN1 segment.
CREATE TABLE foo (pkey NUMBER, bar BLOB);
SELECT segment_name, segment_type FROM user_extents;
SLGMLN1_NAML SLGMLN1_1YPL
lOO 1ABLL
S\S_IL0000009¯92(00002>> LOBINDLX
S\S_LOB0000009¯92(00002>> LOBSLGMLN1 also reíerred as LOB chunks´pages,
1he LOBSLGMLN1 and the LOBINDLX segments are stored in the same
tablespace as the table containing the LOB. unless otherwise speciíied.
1


1
In Oracle8i. users can speciív storage parameters íor LOB index. but írom Oracle9i onwards.
speciíving storage parameters íor a LOB index is ignored without anv error and the index is
stored in the same tablespace as the LOB segment. with an Oracle generated index name.
9792 is the object_id of the parent tabIe
FOO (if a tabIe has more than one LOB
coIumn, LOB segment names are
generated differentIy, use dba|user_Iobs
view to get parent tabIe association).

LOB Performance GuideIines Page 4
IMPORTANT STORAGE PARAMETERS
1his section deíines the important storage parameters oí a LOB column or a LOB
attribute, - íor each deíinition we describe the eííects oí the parameter.
recommendation íor better períormance and to a·oid errors.
CHUNK
Definition
(lUNK is the smallest unit oí LOBSLGMLN1 allocation. It is a multiple
oí DB_BLO(K_SIZL.
Points to Note
• lor example. ií the ·alue oí (lUNK is 8K and an inserted LOB is onlv
1K in size. then 1 chunk is allocated and ¯K are wasted in that chunk.
1he (lUNK option does NO1 aííect in-line LOBs see the deíinition in
the next section,
• (hoose an appropriate chunk size íor best períormance also to a·oid
space wastage. 1he maximum chunk size is 32K.
• 1he (lUNK parameter cannot be altered.
Recommendation
(hoose a chunk size íor optimal períormance and minimum space wastage.
lor LOBs that are less than 32K. a chunk size that is 60° or more, oí the
LOB size is a good starting point. lor LOBs larger than 32K. choose a
chunk size equal to the írequent update size.
In-Iine and Out-of-Line storage: ENABLE STORAGE IN ROW and
DISABLE STORAGE IN ROW
Definition
LOB storage is said to be in-line when the LOB data is stored with the other
column data in the row. A LOB can onlv be stored inline ií its size is less
than ~4000 bvtes. lor in-line LOB data. space is allocated in the table
segment the LOBINDLX and LOBSLGMLN1 segments are emptv,.
LOB storage is said to be out-oí-line when the LOB data is stored. in
(lUNK sized blocks in the LOBSLGMLN1 segment. separate írom the
other columns` data.
LNABLL S1ORAGL IN RO\ allows LOB data to be stored in the table
segment pro·ided it is less than ~4000 bvtes.
DISABLL S1ORAGL IN RO\ pre·ents LOB data írom being stored in-
line. regardless oí the size oí the LOB. Instead onlv a 20-bvte LOB locator is
stored with the other column data in the table segment.
LOB Performance GuideIines Page 5
Points to Note
• In-line LOBs are subject to normal chaining and row migration rules
within Oracle. Ií vou store a 3900 bvte LOB in a row with 2K block size
then the row will be chained across two or more blocks. Both RLDO and
UNDO are written íor in-line LOBs as thev are part oí the normal row
data. 1he (lUNK option does not aííect in-line LOBs.
• \ith out-oí-line storage. UNDO is written onlv íor the LOB locator and
LOBINDLX changes. No UNDO is generated íor chunks´pages in the
LOBSLGMLN1. (onsistent Read is achie·ed bv using page ·ersions see
the RL1LN1ION or P(1VLRSION options,.
• DML operations on out-oí-line LOBs can generate high amounts oí redo
iníormation. because redo is generated íor the entire chunk. lor example.
in the extreme case. DISABLL S1ORAGL IN RO\ (lUNK 32K`
would write redo íor the whole 32K e·en ií the LOB changes were onlv 5
bvtes.
• \hen in-line LOB data is updated. and ií the new LOB size is greater than
3964 bvtes. then it is migrated and stored out-oí-line. Ií this migrated
LOB is updated again and its size becomes less than 3964 bvtes. it is not
mo·ed back in-line except when we use LONG API íor update,.
• LNABLL|DISABLL S1ORAGL IN RO\ parameters cannot be altered.
Recommendation
Use LNABLL S1ORAGL IN RO\. except in cases where the LOB data is
not retrie·ed as much as other columns` data. In this case. ií the LOB data is
stored out-oí-line. the biggest gain is achie·ed while períorming íull table
scans. as the operation does not retrie·e the LOB`s data.
CACHE, NOCACHE
Definition
1he (A(lL storage parameter causes LOB data blocks to be read´written
·ia the buííer cache.
\ith the NO(A(lL storage parameter. LOB data is read´written using
direct reads´writes. 1his means that the LOB data blocks are ne·er in the
buííer cache and the Oracle ser·er process períorms the reads´writes.
Points to Note
• \ith the (A(lL option. LOB data reads show up as wait e·ent db íile
sequential read`. writes are períormed bv the DB\R process. \ith the
NO(A(lL option. LOB data reads´writes show up as wait e·ents direct
path read lob,`´`direct path write lob,`. (orresponding statistics are
phvsical reads direct lob,` and phvsical writes direct lob,`.
LOB Performance GuideIines Page 6
• In-line LOBs are not aííected bv the (A(lL option as thev reside with
the other column data. which is tvpicallv accessed ·ia the buííer cache.
• 1he (A(lL option gi·es better read´write períormance than the
NO(A(lL option.
• 1he (A(lL option íor LOB columns is diííerent írom the (A(lL
option íor tables. 1his means that caution is required otherwise the read
oí a large LOB can eííecti·elv ílush the buííer cache.
• 1he (A(lL|NO(A(lL option can be altered.
Recommendation
Lnable caching. except íor cases where caching LOBs would se·erelv impact
períormance íor other online users. bv íorcing these users to períorm disk
reads rather than getting cache hits.
Consistent Reads on LOBs: RETENTION and PCTVERSION
(onsistent Read (R, on LOBs uses a diííerent mechanism than that used íor
other data blocks in Oracle. Older ·ersions oí the LOB are retained in the LOB
segment and (R is used on the LOB index to access these older ·ersions íor in-
line LOBs which are stored in the table segment. the regular UNDO mechanism is
used,. 1here are two wavs to control how long older ·ersions are maintained.
Definition
• RL1LN1ION - time-based: this speciíies how long older ·ersions are to
be retained.
• P(1VLRSION - space-based: this speciíies what percentage oí the LOB
segment is to be used to hold older ·ersions.
Points to Note
• RL1LN1ION is a kevword in the LOB column deíinition. No ·alue can
be speciíied íor RL1LN1ION. 1he RL1LN1ION ·alue is implicit. Ií a
LOB is created with database compatibilitv set to 9.2.0.0 or higher.
undo_management~1RUL and P(1VLRSION is not explicitlv speciíied.
time-based retention is used. 1he LOB RL1LN1ION ·alue is alwavs
equal to the ·alue oí the UNDO_RL1LN1ION database instance
parameter.
• \ou cannot speciív both P(1VLRSION and RL1LN1ION.
• P(1VLRSION is applicable onlv to LOB chunks´pages allocated in
LOBSLGMLN1S. Other LOB related data in the table column and the
LOBINDLX segment use regular undo mechanism.
• P(1VLRSION~0: the space allocated íor older ·ersions oí LOB data in
LOBSLGMLN1S can be reused bv other transactions and can cause
snapshot too old` errors.
LOB Performance GuideIines Page 7
• P(1VLRSION~100: the space allocated bv older ·ersions oí LOB data
can ne·er be reused bv other transactions. LOB data storage space is
ne·er reclaimed and it alwavs increases.
• RL1LN1ION and P(1VLRSION can be altered
Recommendation
1ime-based retention using the RL1LN1ION kevword is preíerred.
A high ·alue íor RL1LN1ION or P(1VLRSION mav be needed to a·oid
snapshot too old` errors in en·ironments with high concurrent read´write
LOB access.
LOGGING, NOLOGGING
Definition
LOGGING: enables logging oí LOB data changes to the redo logs.
NOLOGGING: changes to LOB data stored in LOBSLGMLN1s, are not
logged into the redo logs. howe·er in-line LOB changes are still logged as
normal.
Points to Note
• 1he (A(lL option implicitlv enables LOGGING.
• Ií NOLOGGING was set. and ií vou ha·e to reco·er the database. then
sections oí the LOBSLGMLN1 will be marked as corrupt during
reco·erv LOBINDLX changes are logged to redo logs and are reco·ered.
but the corresponding LOBSLGMLN1s are not logged íor reco·erv,.
• LOGGING|NOLOGGING can be altered. 1he NO(A(lL option is
required to turn oíí LOGGING. e.g. NO(A(lL NOLOGGING,.
Recommendation
Use NOLOGGING onlv when doing bulk loads or migrating írom LONG
to LOB. Backup is recommended aíter bulk operations.

PERFORMANCE GUIDELINE - LOB LOADING
In the rest oí the document. vou will notice LOB API and LONG API methods
being reíerenced manv times. 1he diííerence between these APIs is as íollows:
LOB API: the LOB data is accessed bv íirst selecting the LOB locator.
LONG API: the LOB data is accessed without using the LOB locator.
Points to Note
Use array operations for LOB inserts
LOB Performance GuideIines Page 8
APPLNDIX A
LONG API access to LOB datatype
Oracle pro·ides transparent access to LOBs írom applications that use LONG and
LONG RA\ datatvpes. Ií vour application uses DML INSLR1. UPDA1L.
DLLL1L, statements írom O(I or PL´SOL PRO( etc, íor LONG or LONG
RA\ data. no application changes are required aíter the column is con·erted to a
LOB.
lor example. vou can SLLL(1 a (LOB into a character ·ariable. or a BLOB into a
RA\ ·ariable. \ou can deíine a (LOB column as SOL1_(lR or a BLOB
column as SOL1_BIN and select the LOB data directlv into a (lARA(1LR or
RA\ buííer without selecting out the locator first.
1he íollowing example demonstrates this concept:
create table Ioo (pkey number(10) not null. bar long raw) ;

set serveroutput on

declare
inbuI raw(32767);
outbuI raw(32767);
outpkey number;
begin
inbuI :÷ utlraw.casttoraw (rpad('FF'. 32767. 'FF'));

Ior i in 1..10 loop
insert into Ioo values (i. inbuI) ;
commit;
end loop;
dbmsoutput.putline ('Write test Iinished ');

Ior i in 1..10 loop
select pkey. bar into outpkey. outbuI Irom Ioo where pkey÷i ;
end loop;
dbmsoutput.putline ('Read test Iinished ');

end;
/

Now migrate LONG RA\ column to BLOB column
alter table Ioo modiIy (bar blob);

Aíter the LONG to LOB migration. the abo·e PL´SOL block will work without
anv modiíications.
Ad·anced LOB íeatures mav require the use oí the LOB API. described in the
Oracle Documentation
2


2
Large Objects LOBs, in Oracle9i Application De·eloper's Guide. DBMS_LOB
package in Oracle9i Supplied PL´SOL Packages and 1vpes Reíerence. LOB and lILL
Operations in Oracle (all Interíace Programmer`s guide
When doing the LONG to LOB migration.
The aIter tabIe migration statement runs
seriaIIy in 9i. Indexes need to be rebuiIt
and statistics recoIIected.

LOB Performance GuideIines Page 9
APPENDIX B
Migration from in-Iine to out-of-Iine (and out-of-Iine to in-Iine) storage
1his section explains one major diííerence between the LOB API and LONG API
methods.
Ií a change to the in-line LOB data makes it larger than 3964 bvtes. then it is
automaticallv mo·ed out oí table segment and stored out-oí-line. Ií during íuture
operations. the LOB data shrinks to under 3964 bvtes. it will remain out-oí-line.
In other words. once a LOB is migrated out. it is alwavs stored out-oí-line
irrespecti·e oí its size. with the íollowing exception scenario.
(onsider a scenario where vou used the LONG API to update the LOB datatvpe

begin
inbuI :÷ utlraw.casttoraw (rpad('FF'. 3964. 'FF'));
insert into Ioo values (1. inbuI) ;
commit;
|..|

Above LOB is stored in-line. update the LOB to a size more than 3964 bytes

|..|
inbuI :÷ utlraw.casttoraw (rpad('FF'. 4500. 'FF'));
update Ioo set bar÷buIIer where pkey÷1;
commit;
|..|

AIter the update LOB is stored out-oI-line. now update the LOB to a size smaller than
3964 bytes

|..|
inbuI :÷ utlraw.casttoraw (rpad('FF'. 3000. 'FF'));
update Ioo set bar÷buIIer where pkey÷1;
commit;
|..|

LOB is stored in-line again.

\hen using the LONG API íor update. the older LOB is deleted or space is
reclaimed as per RL1LN1ION or P(1VLRSION setting, and a new LOB is
created, with a new LOB locator. 1his is diííerent írom using LOB API. where
DML on LOB is possible onlv using the LOB locator the LOB locator doesn`t
change,
LOB Performance GuideIines Page 10
APPENDIX C
How LOB data is stored
1he purpose oí this section is to diííerentiate how the LNABLL S1ORAGL IN
RO\ option is diííerent írom the DISABLL S1ORAGL IN RO\ option íor
LOB data size greater than 3964 bvtes. It also highlights when LOBINDLX is
actuallv used íollowing example scenarios assume Solaris OS and Oracle 9204 - 32
bit ·ersion,.
In-Iine LOB - LOB size Iess than 3964 bytes
LOB can be NULL. LMP1\_BLOB. and actual LOB data
create table Ioo (pkey number(10) not null. bar BLOB)
lob (bar) store as (enable storage in row chunk 2k);

declare
inbuI raw(3964);

begin
inbuI :÷ utlraw.casttoraw(rpad('FF'. 3964. 'FF'));
insert into Ioo values (1. NULL);
insert into Ioo values (2. EMPTYBLOB() );
insert into Ioo values (3. inbuI );
commit;
end;
/

Foo table rows

Pkey÷1 Bar÷0 byte (nothing is stored)
Pkey÷2 Bar÷36 byte
Pkey÷3

Bar÷4000 byte (36 byte ¹ 3964 byte oI LOB data. nothing
stored in LOBINDEX and LOBSEGMENT
LobId LOB Locator

In-Iine LOB - LOB size = 3965 bytes (1 byte greater than 3964)
LOB is deíined as in-line. but actual data is greater than 3964 bvtes. so mo·ed
out - please note this is diííerent írom LOB being deíined as out-oí-line.
|..|
inbuI :÷ utlraw.casttoraw(rpad('FF'. 3965. 'FF'));
insert into Ioo values (4. inbuI );
|..|

Foo table row
Pkey÷4 Bar÷40 bytes.
Oracle directly accesses LOB data in LOBSEGMENT.
Nothing stored in LOBINDEX


LOB Performance GuideIines Page 11
In-Iine LOB - LOB size greater than 12 chunk addresses
\ith in-line LOB option. we store the íirst 12 chunk addresses in the table
row. 1his takes 84 bvtes oí size in table row. LOBs that are less than 12
chunks in size will not ha·e entries in the LOBINDLX ií LNABLL
S1ORAGL IN RO\ is used
|..|
inbuI :÷ utlraw.casttoraw(rpad('FF'. 32767. 'FF'));
insert into Ioo values (5. inbuI );
|..|

Here. we are inserting 32767 bytes oI LOB data. given our chunk size oI 2k. we
need approximately 16 blocks (32767/2048). So we store Iirst 12 chunk addresses
in table row and the rest in LOBINDEX

Foo table row

Pkey÷5 Bar÷84 bytes.
Oracle directly accesses 12 LOB chunks in
LOBSEGMENT. Then Oracle looks up LOBINDEX to get
the rest oI the LOB chunk addresses.

Out-of-Iine LOBs - AII LOB sizes
\ith out-oí-line LOB option. onlv LOB locator is stored in table row. Using
LOB locator. we lookup LOBINDLX and íind the range oí chunk addresses.
using these addresses we read LOB data írom the LOBSLGMLN1
create table Ioo (pkey number(10) not null. bar BLOB)
lob (bar) store as (disable storage in row chunk 2k);

|..|
inbuI :÷ utlraw.casttoraw(rpad('FF'. 20. 'FF'));
insert into Ioo values (6. inbuI );
|..|

Foo table rows
Pkey÷6 Bar÷20 bytes.
All chunk addresses are stored in LOBINDEX.

LOB Performance GuideIines
May 2004
Author: V. Jegraj
Contributing authors: Geoff Lee, Vishy Karra, Krishna Kunchithapadam, CeciIia Gervasio

OracIe Corporation
WorId Headquarters
500 OracIe Parkway
Redwood Shores, CA 94065
U.S.A.

WorIdwide Inquiries:
Phone: +1.650.506.7000
Fax: +1.650.506.7200
www.oracIe.com

OracIe is a registered trademark of OracIe Corporation. Various
product and service names referenced herein may be trademarks
of OracIe Corporation. AII other product and service names
mentioned may be trademarks of their respective owners.

Copyright © 2004 OracIe Corporation
AII rights reserved.

. . =2 . 8 9: 99 99 # ( & * #* # */ & # ' ' * &) # ) ! ( #) #& + * &) #& + . < #% 4 ' ' ' # 1 2 7 ' ' ' 8 5 9: 9: 9: 5. . . .!"#$ % # & ' % ) % & ) ! -# % # & & % # & # -# % # & "% # " 2 # ) #% 4 6 ) ! ' ' ' ' ' 1 1 1 . 0 0 0 0 0 0 0 0 3 5 ) . . < 9? < @ 1) . =2 79 =2 . . > 5. < 5. ..

7B 96 8 = # # ' = # +< = < < #% 4 *< < *< #% 4 6 #* 2 6 #* < @C < ! " # ! ( ) " "# $% " $ * "& # " +* "# ' "# " $ . "" $ D E F ::::::505? ::::?GG *) #% 4 6 #* 7 < @C 8 & $ " /0 ." "' "" $ E F ::::::505? ::::?GG *< = 6 #* < = < < #% 4 - < < 9 9 32 < = 2 < < < -= 2 < 5 - ..*< = = = *< 2 < = < < ' # ) # < < < A < < = < - < .

< . = 3$ 0$ ' 2 7 < < < @ • • ?$ *< " !"#$ < D . .2 34 5 3 3 32 5 *< = 8' < < = < = < - 7 6 47 8 " !"#$ % F " " 4 " < $F H 6 #* • D 9$ *< < < .< < 4 5 4 = < < K ::: =2 7< ) D ' #% 4 = !"#$ . 9 8 53 8 " < @ . = < @ . = < A #) % ) * &) * &) < < < < @ < ' < < 2= 6 #* < < 6 #* = = 2 ?:'=2 < = - < < .< . < @ .< 9 < @ !"#$ 8 *< !"#$ # * < @ . < J "9 9 3 < < " ?$D J : 43 < @ . #& + < ' 1 .:I 7 8 < ?$. < = 28 < < = < ' ' #& + < K ::: =2 . 5 3 .

" " 4 " • ' < < < "#% *< 2 = =L < ' !"#$ < 5:: =2 = < 2 ' .< = # & +< A < < < < A < - < < = 3 6 *4 8 " *< ) ! < = C = < ) ! *< < < < = @ = C C + < < # = " " 4 " @ < C < < • + < < ) ! J A# ) ! < 7 =8ACA M <2 < 7 =8A < =2 < % +& C < 7 =8A M <2 7 =8A M = + < < M .< = @ ' • #) " 7 < * &) ' ' < # ) #& + N% ) " #) ' ' < 3 6 * &) < . = < < < < @ D # & + !"#$ ?$A < < 2."#% # "#% & */ & ' ' 2 < # < 8 =2 @ < ?$ = @ . . =2 < 8 = =2 • +< ' 5. =2 .M% ) < < * &) ?$ . < 5. <& % < • + < ' ' #% 4 < 6 #* < & * #* # -= < < < @C < 7 • %6 . .

• < • • ' < ) ! ) ! ) ! = *< *< # *< =2 < .< < < < < 7 < ' "#% 8 " • • & * #* = */ & #1 #1 = '= '= < ( < ( < < < < " " 4 " • & * #* = F '= J < # @ 2 & * #* < = >*&" < # *< & = */ *< < "#% F& * */ & = < 2 # * #* # 2 5?:: & # & * #* # #* # = & * #* < @C < = < < < 2 2 - • • E */ & # 6 #* #% 4 2= < # # < • O */ & #>:( < 6 #* = < P =2 < < .< < 2 = ) ! 2 C < 2 < = < < < < < < < < 2 < < = = J ) ! < • *< " ) ! N# ) ! = < " " < < < < < : < .=2 < < 2 @ 4 4 5 4 < & 7 &8 = @ & < < 8 *< 2 < < < < = < .

< 28 *< # ) ! ) ! # # 8 = • J " 2 < < 6 #* = 27 #% 4 < < 6 #* # N# # # = 7# " # @ # 2 < = @ = @ # ( 234 8 4 = 38 4 < = ) ( < # < 2 -2 *< =2 < = ) < < < # ) ) < ( ) ( < " " 4 " + ' " " ! .• */ & #>9::( < = =2 < 2 # */ & # =2 • & * #* " = * '= & * #* P < & * #* # #@ 2 # 2= << < C )< < O < */ & 4 *4 8 " 4 # ( # = 7 -< ' < < < 6 #* 8 # ( < < " " 4 " • • *< # ) ! # 2 = @ # < = .

) 4 #% 4 ) 3 " " "+' # &)+ % * 8 &)+ D &)+ &)+ = *< -2 2 2 < * < %6 7 # C Q 7 & R 8 J < < < # &*." %)* # # = E Q *F # = Q *F !& 2 !)&) * & < ( !" ' $$ #$ # %&&% %&&% ' $ ' $$ %( ) % #) $ %* ) % "' + # # # " + "# " $ 0 ? " " " 4 " " " " " $ " $ " " 0 " 0 # &)+ ) 2 ) < # 2 J .< < = < C Q = @ = @ < < ) - % ? ? =L @ 7 5 8 5 ) C Q % @ A *2 S & -% 6 F - D > .

=2 # ) 2 < ' ' ' ' 2 !" #$ # %&&% %&&% .$$.$$/01 2 $ +< < # ) & * #* = # 2 %6 < .< A 8 . ) 4 5 . .$$!" #$ " # #) %&&% " %&&% /01 2 2 # ) /01 3 ) .$$!" #$ " # #) %&&% " %&&% /01 2 ) /01 3 ) 4 5 .< # ) 5.$$.< */ & *< < 7 # 7< 8 ) . =2 ' ' . < < ' L @ = < @ < < 2 < = < < ) 5.< < .3 2 48 " 9 " "9 9 ) "9 9 " 9 / " *< < < 2 .

6 *EF 1/01 # ) # 4 5 !" #$ # %&&% 4 5 %&&% 67// 89:. =2 < ' ' $ /01 /01>6?8@ /01A8B986. =2 < #) * &) # * &) #& + < < < < #% 4 5?: 1 ? = #" .< 1/01 + & : : : / " " " > C /01 / # 1 " 1 " 1 "5 /01>6?8@ ) = 4 5 /01 /01A8B986.$$& : "5 # 1 "5 0 6 ) #$ -= = # 5 %&&% 4 D %&&% < 5. 48 " " *< & + . $+" )@ $+" " "# <1/ ' 1 .$$!" .$ @A . 2 = 9 < < 7 8 = B "# <1 $+" < < % ) 5.3 6 . ) 9 = B C <.

$$- @ 3 =2 .$$& : " # 1 " .$$!" .) 0 ) ) /01 ) $ ) /01 + 5G $ A # /01>6?8@ ) 3 ) # /01>6?8@ "9 9 =3 B + < < ' ' @ - 2 #% 4 < < 1/01 = < @ 6 #* " - # ) . < #& + !" #$ D .$$E # F # & : "D # 1 "G5 $ 0 /01 ) /01A8B986.9 = B " "# @ # D + < ' *< < @ * &) . < = < 9? < @ < #% 4 #) < = < 9? # %&&% %&&% . ) $ /01>6?8@$ #$ # %&&% %&&% @@ .$ .

+ * 3 1A<. # .A0. 0 ' " 0 D ( ?: G@0<..2 + AA1 3 "# : 0 E " $ " ' 6 . 05030 .A<0! AA ' " '+ 3 " ' +$ " #" H AA1 +$ " #" - .A<0!AAA 0 " " " 03 "# D ' 0 D # ' "# " " ' "..A0.0 F : 5# F % "# " " D.AA . : * #+ 7 *7 # 7 # "# ' * - : G@0<.

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->