10.10.2013 Aufrufe

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 ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!