Oracle und Data Striping Wozu überhaupt über I/O Performance ...
Oracle und Data Striping Wozu überhaupt über I/O Performance ...
Oracle und Data Striping Wozu überhaupt über I/O Performance ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
100 000<br />
10 000<br />
1000<br />
100<br />
10<br />
1<br />
Relative<br />
<strong>Performance</strong><br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong><br />
2E03<br />
Hermann Brunner<br />
Angerwiese 15<br />
85567 Grafing<br />
Te l 080 92 / 328 29<br />
Fax 080 92 / 328 42<br />
hermann@brunner-consulting.de<br />
www.brunner-consulting.de<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 1<br />
<strong>Wozu</strong> <strong><strong>über</strong>haupt</strong> <strong>über</strong> I/O<br />
<strong>Performance</strong> nachdenken?<br />
78 80 82 84 86 88 90 92 94<br />
96<br />
98 2000 02<br />
Memory Größe<br />
( 5 000x - 100 000x)<br />
CPU<br />
Geschwindigkeit<br />
( 100x - 1000x)<br />
I/O<br />
Geschwindigkeit<br />
(ca. 5x - 10x)<br />
Jahr<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 2<br />
1
Entwicklung der I/O-<strong>Performance</strong><br />
Kapazität<br />
Avg. Seektime<br />
Drehzahl<br />
Avg Access Time<br />
<strong>Data</strong> Rate<br />
1980 (RM05)<br />
300 MB<br />
45 msec<br />
3600 rpm<br />
55 msec<br />
500 KB/sec<br />
2002 Faktor<br />
36 GB 120<br />
7,5 msec 6<br />
14 400 rpm 4<br />
10-12 msec 5<br />
5-10 MB/sec 10 - 20<br />
Max. I/O-Rate 18 80-100 5<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 3<br />
Die wichtigsten Maßzahlen<br />
Deutsch<br />
Bandbreite<br />
Datenrate<br />
Durchsatz<br />
I/O Leistung<br />
Mittlere Suchzeit<br />
Drehwartezeit<br />
Latenzzeit<br />
Mittlere Zugriffszeit<br />
Mittlere Antwortzeit<br />
Englisch<br />
Bandwidth<br />
<strong>Data</strong> Rate / Throughput<br />
I/O Request Rate<br />
Average Seek Time<br />
Einheit<br />
MB/sec<br />
I/Os/sec<br />
msec<br />
Rotational Latency msec<br />
Average Access Time<br />
Average Response Time<br />
msec<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 4<br />
2
Bandwidth<br />
[MB/sec]<br />
IOs/sec<br />
350<br />
300<br />
250<br />
200<br />
150<br />
100<br />
50<br />
0<br />
Bandbreite versus I/O-Größe<br />
9,1 GB / 10.000 rpm IBM-Disk am Adaptec 2940 VW-Controller<br />
Sequential Reads, EZ-SCSI Benchmark<br />
9<br />
8<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
Random<br />
I/O<br />
Full<br />
Table<br />
Scan<br />
2K 4K 8K 16K 32K 64K 128K 256K 512K<br />
I/O-Durchsatz<br />
RAID5 Array Read I/O Rate<br />
Single Disk Read I/O Rate<br />
I/O Size [KB]<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 5<br />
1 2 3 4 5 6<br />
Queue-Tiefe<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 6<br />
3
12 msec<br />
Zusammensetzung der<br />
Mittleren Zugriffszeit<br />
7,5 msec<br />
3,0 msec<br />
Mittlere<br />
Zugriffszeit<br />
Tolerierbare<br />
Mittlere<br />
Zugriffszeit<br />
IO/s Util Queue Resp<br />
0,00 0,00 0,00 10,00<br />
10,00 0,10 0,11 11,00<br />
20,00 0,20 0,25 12,50<br />
30,00 0,30 0,43 14,30<br />
40,00 0,40 0,66 16,60<br />
50,00 0,50 1,00 20,00<br />
60,00 0,60 1,50 25,00<br />
70,00 0,70 2,33 33,30<br />
80,00 0,80 4,00 50,00<br />
90,00 0,90 9,00 100,00<br />
I/O-Last versus Zugriffszeit<br />
Praktische<br />
Lastgrenze<br />
Das heißt praktisch...<br />
100,00<br />
90,00<br />
80,00<br />
70,00<br />
60,00<br />
50,00<br />
40,00<br />
30,00<br />
20,00<br />
10,00<br />
0,00<br />
Response Time<br />
System-<br />
Kapazität<br />
Last (IOs/sec)<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 9<br />
0,00 0,10 0,20 0,30 0,40 0,50 0,60 0,70 0,80 0,90<br />
Utilization in %<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 10<br />
5
Physikalisch<br />
Logisch<br />
Lesemuster<br />
0<br />
0<br />
100<br />
400<br />
200<br />
800<br />
1<br />
6<br />
11<br />
16<br />
P(17-20)<br />
9 10<br />
9 40<br />
109 110<br />
409 440<br />
209 210<br />
809 840<br />
etc...<br />
19<br />
49<br />
119<br />
449<br />
219<br />
849<br />
0<br />
9 10<br />
10 19 50<br />
100<br />
410<br />
200<br />
810<br />
2<br />
7<br />
12<br />
P(13-16)<br />
17<br />
109 110<br />
419 450<br />
209 210<br />
819 850<br />
19<br />
59<br />
119<br />
459<br />
219<br />
859<br />
RAID 0<br />
Beispiel: Chunk Size = 10 Sectors<br />
Track Size = 100 Sectors<br />
0<br />
9 10<br />
20 29 60<br />
100<br />
420<br />
200<br />
820<br />
109 110<br />
429 460<br />
209 210<br />
829 860<br />
RAID 5<br />
Chunk Size = 1 Track oder größer<br />
Rotierende Parity-Information<br />
3<br />
8<br />
P(9-12)<br />
13<br />
18<br />
19<br />
69<br />
119<br />
469<br />
219<br />
869<br />
0<br />
9 10<br />
30 39 70<br />
100<br />
430<br />
200<br />
830<br />
109 110<br />
439 470<br />
209 210<br />
839 870<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 11<br />
4<br />
P(5-8)<br />
9<br />
14<br />
19<br />
19<br />
79<br />
119<br />
479<br />
219<br />
879<br />
P(1-4)<br />
5<br />
10<br />
15<br />
20<br />
Physikalisch<br />
1GB<br />
Logisch<br />
4GB<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 12<br />
6
Wahrscheinlichkeit gleichzeitiger<br />
Read-Operationen<br />
3/3<br />
2/3<br />
1/3<br />
6/3 = 2,0<br />
1<br />
5/6<br />
4/6<br />
3/6<br />
21/6 = 3,5<br />
1 Read<br />
2 Reads<br />
3 Reads<br />
2/6<br />
1/6<br />
1 Read<br />
2 Reads<br />
3 Reads<br />
4 Reads<br />
5 Reads<br />
6 Reads<br />
4/4<br />
3/4<br />
2/4<br />
5/5<br />
4/5<br />
1/4<br />
10/4 = 2,5<br />
3/5<br />
2/5<br />
15/5 = 3,0<br />
1 Read<br />
2 Reads<br />
3 Reads<br />
4 Reads<br />
1/5<br />
1 Read<br />
2 Reads<br />
3 Reads<br />
4 Reads<br />
5 Reads<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 13<br />
<strong>Performance</strong> der RAID Levels<br />
Transaktions-I/O GroßeFileI/O<br />
Read Write Read Write<br />
JBOD OK OK OK OK<br />
RAID 0 (Strip) Sehr gut Sehr gut Gut Gut<br />
RAID 1 (Shad) Gut OK OK OK<br />
RAID 0+1 Exzellent Sehr gut Gut OK<br />
RAID 3 Schlecht Schlecht Sehr gut Sehr gut<br />
RAID 5 Sehr gut Schlecht OK OK<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 14<br />
7
<strong>Data</strong>file<br />
Einfluß von Read <strong>und</strong> Write<br />
Caches<br />
XACTION I/O (Small) STREAM I/O<br />
Read Write Read Write<br />
JBOD OK Sehr gut<br />
OK<br />
RAID 0 (Strip) Sehr gut Exzellent Gut<br />
RAID 1 (Shad) Gut Sehr gut<br />
OK<br />
RAID 0+1 Exzellent Exzellent Gut<br />
RAID 3 Schlecht Gut<br />
Sehr gut<br />
RAID 5 Sehr gut Sehr gut<br />
OK<br />
Physical Disk<br />
1 4 7 ...<br />
Disk <strong>Striping</strong><br />
Logical Disk<br />
Physical Disk Physical Disk<br />
2 5 8 ...<br />
Gut<br />
Sehr gut<br />
Gut<br />
Sehr gut<br />
Exzellent<br />
Gut<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 15<br />
3 6 9 ...<br />
<strong>Data</strong>file ist aus <strong>Oracle</strong>-Sicht nicht gestriped ...<br />
Auf physikalischer Ebene <strong>Striping</strong> auf CHUNK Grenzen<br />
Also unabhängig von <strong>Oracle</strong>-TS-Parametrisierung!<br />
(Extents, DB-Block-Grenzen)<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 16<br />
8
CHUNK<br />
DB-Block Size CHUNK Size<br />
Logical Disk<br />
Parameter-<br />
Datei<br />
Paßwort-<br />
Datei<br />
DB<br />
Buffer<br />
Cache<br />
CHUNK deutlich größer als DB-<br />
Block<br />
(z.B. CHUNK=200 Blocks, DB-Blocks 2K-8K)<br />
Bei den meisten DB-Blocks<br />
muß zum Lesen nur eine Disk<br />
"angefaßt" werden<br />
CHUNK etwa gleich groß wie<br />
DB-Block<br />
Jeder DB-Block geht <strong>über</strong> 2<br />
Disks (fehlendes Alignment!)<br />
DB-Blocks deutlich größer als<br />
CHUNK<br />
Jeder DB-Block liegt auf<br />
mehreren Disks<br />
<strong>Oracle</strong>-Architektur<br />
LIBR<br />
Cache<br />
Instance<br />
LRU-Liste<br />
Dirty-Liste<br />
Shared Pool<br />
<strong>Data</strong><br />
Dictionary<br />
Cache<br />
DBWR CKPT<br />
LGWR<br />
Daten- Daten-<br />
Dateien dateien<br />
Kontroll-<br />
Dateien<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 17<br />
Redo Log-<br />
Dateien<br />
REDO<br />
Log<br />
Buffer<br />
ARCH<br />
Archivierte<br />
Redo<br />
Log-Dateien<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 18<br />
9
Server<br />
Prozesse<br />
.<br />
.<br />
.<br />
<br />
SGA<br />
I/O-Ströme<br />
DB Buffer Cache REDO-Log Buffer<br />
<br />
DBWR CKPT LGWR ARCH<br />
Daten REDO-Logfiles<br />
RBS<br />
<br />
<br />
<br />
Offline<br />
REDOs<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 19<br />
Es entstehen folgende I/O-Ströme<br />
Viele parallele Server-Prozesse<br />
Lesen aus den <strong>Data</strong>files<br />
(Zeitkritisch geringere Response Time gefragt)<br />
DBWR - schreibt nahezu kontinuierlich in <strong>Data</strong>files<br />
(Daten + RBS-Segmente nicht zeitkritisch)<br />
LGWR - schreibt spätestens bei jedem Commit in die REDO-<br />
Logfile zeitkritisch<br />
ARCH - liest REDO-Log, schreibt archivierte Offline-REDOs <br />
nicht zeitkritisch, aber minimaler Durchsatz muß erfüllt sein<br />
CKPT - schreibt gelegentlich zu CTL-Files ( nicht zeitkritisch)<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 20<br />
10
<strong>Data</strong> Files<br />
Konfigurationsregeln<br />
I/O-Aufkommen hängt von Verhalten der<br />
Anwendungen ab<br />
Last-Verteilung ist wichtig<br />
Häufig werden nicht ausreichend viele<br />
<strong>Data</strong> Files konfiguriert<br />
Faustregel:<br />
Keine <strong>Data</strong> File sollte > 50% der maximalen I/O-Last<br />
der zugr<strong>und</strong>eliegenden Hardware "abbekommen"<br />
Lösungen: "Fleißiger DBA" oder <strong>Striping</strong> / RAID 5<br />
Datenbank-Strukturen<br />
Datenbank<br />
Tablespace Datendatei<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 21<br />
Logisch Segment<br />
Physikalisch<br />
Extent<br />
<strong>Oracle</strong><br />
Block<br />
B/S Block<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 22<br />
11
Tablespaces anlegen<br />
Beispiel<br />
CREATE TABLESPACE app_data<br />
DATAFILE ‘/DISK4/app01.dbf’ SIZE 100M,<br />
‘/DISK5/app02.dbf’ SIZE 100M<br />
MINIMUM EXTENT 500K<br />
DEFAULT STORAGE (INITIAL 500K NEXT 500K<br />
MAXEXTENTS 500 PCTINCREASE 0);<br />
Verteilung der Extents<br />
app_data<br />
app01.dbf app02.dbf<br />
1 3 5<br />
2 4<br />
3<br />
1<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 23<br />
Extents werden ähnlich einem<br />
"<strong>Striping</strong>-Muster" auf <strong>Data</strong> Files verteilt.<br />
Vorteil: Lastbalancierung <br />
Gefahr: Fragmentierung <br />
5<br />
6<br />
4<br />
2<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 24<br />
12
Verteilung der Extents<br />
Aber:<br />
CREATE TABLE XYZ (col1 typ1,...)<br />
TABLESPACE app_data<br />
STORAGE (initial 10M next 10M) <br />
Warum? MINEXTENTS = 1 (=default)<br />
VORSICHT bei EXP/IMP mit "COMPRESS" Option<br />
Generell<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 25<br />
Beide Methoden<br />
(RAID, <strong>Oracle</strong>-TS-<strong>Striping</strong>)<br />
bringen bei richtiger Konfiguration <strong>und</strong><br />
Nutzung eine Lastverteilung<br />
I/O Leistung steigt<br />
Response Time einzelner I/Os bleibt gleich<br />
Es sei denn, wir haben Queuing<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 26<br />
13
Vorteile / Nachteile<br />
Beide <strong>Striping</strong> Methoden<br />
bringen Vorteile bei hoher Durchsatz-<br />
Anforderung, die Einzeldisk <strong>über</strong>fordern<br />
würde<br />
können nur positive Wirkung entfalten,<br />
wenn auch wirklich parallele IOs zur<br />
Ausführung kommen! (Queue >> 1.0)<br />
bringen keine Vorteile bei sequentiellem IO<br />
( FULL TABLE SCAN!)<br />
Unterschiede<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 27<br />
RAID Controller sind "transparent", d.h. auf Operating<br />
System / File System / DB-Ebene ist nichts vom<br />
<strong>Striping</strong> "zu sehen" Kein "Management" nötig<br />
Tablespace <strong>Striping</strong> unterliegt der vollen Kontrolle des<br />
DBA bzw. Entwicklers.<br />
Dynamische Erweiterungen möglich<br />
Effekte auf TS- oder Objekt-Ebene steuerbar<br />
Management-Aufwand<br />
Monitoring nötig<br />
"Arbeit" liegt in "Hardware" bzw. "Software"<br />
Somit theoretisch Auswirkungen auf Systemlast<br />
Jedoch praktisch kaum nachweisbar<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 28<br />
14
Fragen<br />
Was sollte man wählen?<br />
Wo liegt unser Know-How?<br />
Mehr System / HW Know-How RAID<br />
Mehr DBA / DB Know How TS-<strong>Striping</strong><br />
Wie gut "durchblicken" wir<br />
Die Anwendung / Datenbank<br />
Analyse unbedingt notwendig!!!<br />
Faustregeln<br />
HW-<strong>Striping</strong> ist einfacher, HW ist teurer, man kann weniger<br />
falsch machen ("set and forget")<br />
TBSpace-<strong>Striping</strong> muß professionell "gemanaged" werden<br />
( Manpower / Zeitaufwand !)<br />
<strong>Oracle</strong> <strong>und</strong> <strong>Data</strong> <strong>Striping</strong> 29<br />
15