[db tech showcase tokyo 2014] l35: 100gb クラスの sga を眺めてみよう。oracle database...

66
100GB クラスの SGA を眺めてみよう。 Oracle Database 12c の場合 Japan Oracle User Group Tadashi Yamashita @tadayima_jp #dbts2014 #jpoug db tech showcase Tokyo 2014 2014/11/13

Upload: insight-technology-inc

Post on 02-Jul-2015

801 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合

Japan Oracle User Group

Tadashi Yamashita

@tadayima_jp

#dbts2014 #jpoug

db tech showcase Tokyo 2014

2014/11/13

Page 2: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

Japan Oracle User Group

Home page

www.jpoug.org

Doorkeeperコミュニティ

http://jpoug.doorkeeper.jp/

Facebookページ

http://www.facebook.com/jpougfan?sk=wall

Googleグループ

https://groups.google.com/group/jpoug/

Page 3: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 4: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 5: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

データベースとインスタンス

Oracle Database Online Documentation 12cRelease 1 (12.1) Database Administrationhttps://docs.oracle.com/database/121/CNCPT/startup.htm#CNCPT89033

Oracle Database を学習する順番- SQLの書き方- Oracle Database の構造

- データベースとは- インスタンスとは

- バックアップ・リカバリ- データベースの運用- チューニング

インスタンスとはメモリとプロセス群からなる- Database Buffer Cache ってホントに四角いのか?

- Redo Log Bufferって丸いの?- Shared Poolの断片化ってなに?

<<本日のテーマ>>

実際にメモリ空間をのぞいてみよう!※今回はバッファ・キャッシュだけ

Page 6: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 7: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

OS視点で見る

Page 8: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA

# ps -elf | grep ora_smon

0 S root 20247 27324 0 77 0 - 16357 pipe_w 12:01 pts/2 00:00:00 grep ora_smon

0 S ora121 3357 1 0 75 0 - 26302179 - Nov03 ? 00:00:03 ora_smon_ora121

Oracle関連プロセスのPIDを特定してから、下記のコマンドでメモリ空間をのぞいてみる- pmap -x PID- ipcs- cat /proc/PID/maps

Page 9: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA# pmap -x 33573357: ora_smon_ora121

Address Kbytes RSS Dirty Mode Mapping

0000000000400000 267508 23860 0 r-x-- oracle

0000000010b3d000 2564 268 52 rw--- oracle

0000000010dbe000 196 68 32 rw--- [ anon ]

00000000191d4000 300 0 0 rw--- [ anon ]

0000000060000000 4 0 0 r--s- [ shmid=0xc510008 ]

0000000060001000 4404 496 284 rw-s- [ shmid=0xc510008 ]

0000000070000000 104595456 42280 36580 rw-s- [ shmid=0xc518009 ]

0000001960000000 257736 3428 2964 rw-s- [ shmid=0xc52000a ]

0000001970000000 32 4 0 rw-s- [ shmid=0xc52800b ]

0000003752000000 112 104 0 r-x-- ld-2.5.so

000000375221c000 4 0 0 r---- ld-2.5.so

000000375221d000 4 0 0 rw--- ld-2.5.so

0000003752400000 1340 476 0 r-x-- libc-2.5.so

....

Page 10: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA# ipcs------ 共有メモリセグメント --------

キー shmid 所有者 権限 バイト nattch 状態

0x00000000 4915202 root 644 80 2

0x00000000 4947972 root 644 16384 2

0x00000000 4980741 root 644 280 2

0x00000000 18317319 ora121 600 393216 2 対象

0x00000000 206635016 ora121 640 4513792 162

0x00000000 206667785 ora121 640 107105746944 81

0x00000000 206700554 ora121 640 263921664 81

0x700cc044 206733323 ora121 640 32768 81

0x00000000 18350092 ora121 600 393216 2 対象

0x00000000 18382861 ora121 600 393216 2 対象

0x00000000 18415630 ora121 600 393216 2 対象

.......

Page 11: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA# cat /proc/3357/maps

00400000-1093d000 r-xp 00000000 08:03 81433700 /home/ora121/app/ora121/product/12.1.0/dbhome_1/bin/oracle

10b3d000-10dbe000 rw-p 1053d000 08:03 81433700 /home/ora121/app/ora121/product/12.1.0/dbhome_1/bin/oracle

10dbe000-10def000 rw-p 10dbe000 00:00 0

191d4000-1921f000 rw-p 191d4000 00:00 0 [heap]

60000000-60001000 r--s 00000000 00:09 206635016 /SYSV00000000 (deleted)

60001000-6044e000 rw-s 00001000 00:09 206635016 /SYSV00000000 (deleted)

70000000-1960000000 rw-s 00000000 00:09 206667785 /SYSV00000000 (deleted)

1960000000-196fbb2000 rw-s 00000000 00:09 206700554 /SYSV00000000 (deleted)

1970000000-1970008000 rw-s 00000000 00:09 206733323 /SYSV700cc044 (deleted)

3752000000-375201c000 r-xp 00000000 08:03 20250947 /lib64/ld-2.5.so

375221c000-375221d000 r--p 0001c000 08:03 20250947 /lib64/ld-2.5.so

375221d000-375221e000 rw-p 0001d000 08:03 20250947 /lib64/ld-2.5.so

3752400000-375254f000 r-xp 00000000 08:03 20250948 /lib64/libc-2.5.so.............

Page 12: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Oracle関連共有メモリのアドレスをマッピング※カッコ内は先頭アドレスからのバイト位置

Page 13: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGASQL> oradebug setmypid

SQL> oradebug ipc Oracle視点で見る

Page 14: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGAProcessing Oradebug command 'ipc'

Dump of unix-generic skgm context

areaflags 00001fb7

………

Handle: 0x28a14740 `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121'

Dump of unix-generic realm handle `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121', flags = 00000010

key 1879883844 actual_key 1879883844 num_areas 4 num_subareas 4

primary shmid: 206733323 primary sanum 3 version 3

deferred alloc: FALSE (0) def_post_create: FALSE (0) exp_memlock: 100G

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

0 2 206635016 0x00000060000000 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect Cur_protect

000000000044e000 000000000044e000 default readwrite

Area #1 `Variable Size' containing Subareas 0-0

Total size 00000018f0000000 Minimum Subarea size 10000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

1 0 206667785 0x00000070000000 0x00000070000000 0x00000070000000

Subarea size Segment size Req_Protect Cur_protect

00000018f0000000 00000018f0000000 default readwrite

………

Fixed SizeActual Addr : 0x00000060000000

Variable SizeActual Addr : 0x00000070000000

Page 15: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA………

Area #2 `Redo Buffers' containing Subareas 1-1

Total size 000000000fbb2000 Minimum Subarea size 00001000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

2 1 206700554 0x00001960000000 0x00001960000000 0x00001960000000

Subarea size Segment size Req_Protect Cur_protect

000000000fbb2000 000000000fbb2000 default readwrite

Area #3 `skgm overhead' containing Subareas 3-3

Total size 0000000000008000 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

3 3 206733323 0x00001970000000 0x00001970000000 0x00001970000000

Subarea size Segment size Req_Protect Cur_protect

0000000000008000 0000000000008000 default readwrite

*********************** Dumping process map ********************

00400000-1093d000 r-xp 00000000 08:03 81433700 /home/ora121/app/ora121/product/12.1.0/dbhome_1/bin/oracle

10b3d000-10dbe000 rw-p 1053d000 08:03 81433700 /home/ora121/app/ora121/product/12.1.0/dbhome_1/bin/oracle

10dbe000-10def000 rw-p 10dbe000 00:00 0

28a10000-28a5b000 rw-p 28a10000 00:00 0 [heap]

60000000-60001000 r--s 00000000 00:09 206635016 /SYSV00000000 (deleted)

60001000-6044e000 rw-s 00001000 00:09 206635016 /SYSV00000000 (deleted)

70000000-1960000000 rw-s 00000000 00:09 206667785 /SYSV00000000 (deleted)

1960000000-196fbb2000 rw-s 00000000 00:09 206700554 /SYSV00000000 (deleted)

1970000000-1970008000 rw-s 00000000 00:09 206733323 /SYSV700cc044 (deleted)………

Redo BuffersActual Addr : 0x00001960000000

Skgm overheadActual Addr : 0x00001970000000

Page 16: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Fixed Area

Variable Area

Redo Buffer

skgm overhead

256MB

99.75GB

256MB

Oracle視点で見る

Page 17: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGASQL> select * from v$sga;

NAME VALUE CON_ID

----------------- ------------- -------------

Fixed Size 4512424 0

Variable Size 6710887768 0

Database Buffers 100394860544 0

Redo Buffers 263921664 0

V$SGAで確認

Page 18: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA

NAME VALUE SIZE from ADDRESS

Fixed Size 4512424 256MB=268435456

Variable Size(a) 6710887768 (a)+(b)=107105748312 99.75GB=107105746944

Database Buffers(b) 100394860544

Redo Buffers 263921664 256MB=268435456

V$SGAの結果とADDRESSでは少し差分がある

Page 19: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA

NAME VALUE SIZE from ADDRESS

Fixed Size 4512424 256MB=268435456

Variable Size(a) 6710887768 (a)+(b)=107105748312△1368

99.75GB=107105746944

Database Buffers(b) 100394860544

Redo Buffers 263921664 256MB=268435456

Variable Sizeで1368byteの違い…

Page 20: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGAProcessing Oradebug command 'ipc'

Dump of unix-generic skgm context

areaflags 00001fb7

………

Handle: 0x28a14740 `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121'

Dump of unix-generic realm handle `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121', flags = 00000010

key 1879883844 actual_key 1879883844 num_areas 4 num_subareas 4

primary shmid: 206733323 primary sanum 3 version 3

deferred alloc: FALSE (0) def_post_create: FALSE (0) exp_memlock: 100G

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

0 2 206635016 0x00000060000000 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect Cur_protect

000000000044e000 000000000044e000 default readwrite

Area #1 `Variable Size' containing Subareas 0-0

Total size 00000018f0000000 Minimum Subarea size 10000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

1 0 206667785 0x00000070000000 0x00000070000000 0x00000070000000

Subarea size Segment size Req_Protect Cur_protect

00000018f0000000 00000018f0000000 default readwrite

………

Fixed SizeActual Addr : 0x00000060000000

Variable SizeActual Addr : 0x00000070000000

Page 21: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGAProcessing Oradebug command 'ipc'

Dump of unix-generic skgm context

areaflags 00001fb7

………

Handle: 0x28a14740 `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121'

Dump of unix-generic realm handle `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121', flags = 00000010

key 1879883844 actual_key 1879883844 num_areas 4 num_subareas 4

primary shmid: 206733323 primary sanum 3 version 3

deferred alloc: FALSE (0) def_post_create: FALSE (0) exp_memlock: 100G

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

0 2 206635016 0x00000060000000 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect Cur_protect

000000000044e000 000000000044e000 default readwrite

Area #1 `Variable Size' containing Subareas 0-0

Total size 00000018f0000000 Minimum Subarea size 10000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

1 0 206667785 0x00000070000000 0x00000070000000 0x00000070000000

Subarea size Segment size Req_Protect Cur_protect

00000018f0000000 00000018f0000000 default readwrite

………

Fixed SizeActual Addr : 0x00000060000000

Variable SizeActual Addr : 0x00000070000000

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr

0 2 206635016 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect

000000000044e000 000000000044e000

1368

Page 22: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGASQL> select * from v$sgainfo ;

NAME BYTES RESIZEABL CON_ID

------------------------ ------------- --------- -------------

Fixed SGA Size 4512424 No 0

Redo Buffers 263921664 No 0

Buffer Cache Size 100394860544 Yes 0

In-Memory Area Size 0 No 0

Shared Pool Size 5368709120 Yes 0

Large Pool Size 536870912 Yes 0

Java Pool Size 805306368 Yes 0

.....

Shared IO Pool Size 536870912 Yes 0

Data Transfer Cache Size 0 Yes 0

Granule Size 268435456 No 0

Maximum SGA Size 107374182400 No 0

.....

sum(6710886400)!= v$sga.value[Variable Size] (6710887768)

△1368

= v$sga.value [Database Buffers]

V$SGAとV$SGAINFOの結果も少しちがう

Page 23: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA

NAME VALUE SIZE from ADDRESS

Fixed Size 4512424 256MB=268435456

Variable Size(a) 6710887768 (a)+(b)=107105748312△1368

99.75GB=107105746944

Database Buffers(b) 100394860544

Redo Buffers 263921664△4513792(4408K)

256MB=268435456

初期化パラメータlog_buffer = 255819776

Redo Bufferの割り当てサイズも、ちと違う

Page 24: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGALOG_BUFFER

特性 説明

パラメータ・タイプ 大整数

デフォルト値 5 MBから32 MB(SGAのサイズ、CPUの数、およびオペレーティング・システムが32ビット版と64ビット版のどちらかに応じて異なる)

変更可能 いいえ

値の範囲 2MB以上。上限は、オペレーティング・システム依存。

基本 いいえ

LOG_BUFFERには、REDOエントリをREDOログ・ファイルにバッファリングするときに使用されるメモリー容量を、バイト単位で指定します。REDOログ・エントリには、データベース・ブロック・バッファに加えられた変更の記録が含まれています。REDOログ・エントリは、LGWRプロセスによってログ・バッファからREDOログ・ファイルに書き込まれます。

ログ・バッファ・サイズはシステム内のREDOストランドの数に応じて異なります。REDOストランドは16個のCPUごとに1つ割り当てられ、そのデフォルト・サイズは2MBです。Oracleによってインスタンスごとに2つ以上のREDOストランドが割り当てられます。ログ・バッファ・サイズが指定されていない場合には、REDOグラニュル内の残りのメモリーがログ・バッファに提供されます。

Oracle® Databaseリファレンス 12c リリース1 (12.1) https://docs.oracle.com/cd/E57425_01/121/REFRN/refrn10094.htm#CHDFGEAF

Page 25: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGAProcessing Oradebug command 'ipc'

Dump of unix-generic skgm context

areaflags 00001fb7

………

Handle: 0x28a14740 `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121'

Dump of unix-generic realm handle `/home/ora121/app/ora121/product/12.1.0/dbhome_1ora121', flags = 00000010

key 1879883844 actual_key 1879883844 num_areas 4 num_subareas 4

primary shmid: 206733323 primary sanum 3 version 3

deferred alloc: FALSE (0) def_post_create: FALSE (0) exp_memlock: 100G

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

0 2 206635016 0x00000060000000 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect Cur_protect

000000000044e000 000000000044e000 default readwrite

Area #1 `Variable Size' containing Subareas 0-0

Total size 00000018f0000000 Minimum Subarea size 10000000

Area Subarea Shmid Segment Addr Stable Addr Actual Addr

1 0 206667785 0x00000070000000 0x00000070000000 0x00000070000000

Subarea size Segment size Req_Protect Cur_protect

00000018f0000000 00000018f0000000 default readwrite

………

Fixed SizeActual Addr : 0x00000060000000

Variable SizeActual Addr : 0x00000070000000

Area #0 `Fixed Size' containing Subareas 2-2

Total size 000000000044daa8 Minimum Subarea size 00000000

Area Subarea Shmid Segment Addr Stable Addr

0 2 206635016 0x00000060000000 0x00000060000000

Subarea size Segment size Req_Protect

000000000044e000 000000000044e000

4513792(4408K)

Page 26: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Fixed Area

Variable Area

Redo Buffer

skgm overhead

256MB

99.75GB

256MB

Database Buffer = 100394860544(93.5GB)

Shared Pool + Large Pool + Java Pool = 6710886400(6.25GB)

Oracle視点で確認した内訳

Page 27: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA動的パラメータ

PARAMETER VALUE

-------------------------- ---------------

__db_cache_size 99857989632

__java_pool_size 805306368

__large_pool_size 536870912

__pga_aggregate_target 16106127360

__shared_io_pool_size 536870912

__shared_pool_size 5368709120

__streams_pool_size 0

.....

Database Bufferのサイズ

が動的パラメータの値と違う…

Page 28: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA動的パラメータ

PARAMETER VALUE

-------------------------- ---------------

__db_cache_size 99857989632

__java_pool_size 805306368

__large_pool_size 536870912

__pga_aggregate_target 16106127360

__shared_io_pool_size 536870912

__shared_pool_size 5368709120

__streams_pool_size 0

.....

99857989632(93GB)+536870912(512MB)= 100394860544(93.5GB)

でも、Oracleが自動割り当てするshared_io_pool_size

分を考慮して…

Page 29: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 30: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

使用量を測ってみる

• Database Buffer

• X$BH.BA

SQL> desc x$bh

名前 NULL? 型

----------------- -------- ----------------------------

ADDR RAW(8)

INDX NUMBER

……

FLAG NUMBER

……

LRU_FLAG NUMBER

……

DBABLK NUMBER

CLASS NUMBER

STATE NUMBER

……

OBJ NUMBER

BA RAW(8)

.....

Page 31: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

使用量を測ってみるSQL> select count(*),min(BA),max(BA) from x$bh

COUNT(*) MIN(BA) MAX(BA)

------------- ------------------- ----------------------

10471 00000008D1484000 00000017CF628000

SQL> select round((to_number(max(BA),'XXXXXXXXXXXXXXXX')

2 -to_number(min(BA),'XXXXXXXXXXXXXXXX'))/1024/1024/1024,2) GB

3 from x$bh;

GB

-------------

59.97 レンジで見ると約60GB…

Page 32: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Fixed Area

Variable Area

Redo Buffer

skgm overhead

256MB

256MB

Database Buffer

0x00000008D1484000

0x00000017CF628000

59.97GB

99.75GB

Page 33: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

使用量を測ってみるSQL> select round(count(*) * 8192 /1024 /1024 /1024 ,2) GB from x$bh;

GB

-------------

.08

キャッシュされているデータ・ブロックの数を数えると

約80MB…

Page 34: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 35: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

地図を描いてみる

がらがら

Page 36: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

地図を描いてみる

拡大しても、がらがら1セルは1MB分の領域に相当よって、8192bytesのデー

タ・ブロックは最大128block格納できる

Page 37: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

地図を描いてみる0 1 2 3 16 ・・・ 98 99

361 (A) (B)

362

363

・・・

820 69(c)

128 9

・・・

974

975

(A) = 361 * 100 * 1024 * 1024 = 37853593600 = 0x00000008D0400000(B) = 361 * 100 * 1024 * 1024 + 16 * 1024 * 1024 = 37870370816 = 0x00000008D1400000(C) = 820 * 100 * 1024 * 1024 = 85983232000 = 0x0000001405000000

1cell : 1MB

各セルを1MBの領域で表現しています

各セルに相対する仮想メモリアドレス上の先頭アドレスは下記のように算出できます

Page 38: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

地図を描いてみるSQL> select owner,object_name,object_type

2 from dba_objects,x$bh

3 where trunc(to_number(ba,'XXXXXXXXXXXXXXXX')/1024/1024,0) = 820*100

4 and ( obj=object_id or obj = data_object_id)

5 group by owner,object_name,object_type;

OWNER OBJECT_NAME OBJECT_TYP

---------- -------------------- ----------

TTT T1 TABLE

各セルに相当する仮想メモリアドレス上に存在するオブジェクトを確認する

Page 39: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

地図を描いてみるset linesize 500col val for a400set pagesize 10

with ba_base(i) as( select trunc(trunc(to_number(min(ba),'XXXXXXXXXXXXXXXX')/1024/1024,0)/100,0)*100 from x$bhunion allselect i+1

from ba_basewhere i+1 <= ( select ceil(to_number(max(ba),'XXXXXXXXXXXXXXXX')/1024/1024) from x$bh)

)select ba_range2

, sys_connect_by_path(decode(count_no,null,' ',to_char(count_no,'FM000')),'-') valfrom (

select trunc(ba_base.i/100,0) ba_range2, count_no, row_number() over ( partition by trunc(ba_base.i/100,0) order by ba_base.i) ba_range2_order, count(*) over ( partition by trunc(ba_base.i/100,0)) cnt

from ( select trunc(to_number(bh.ba,'XXXXXXXXXXXXXXXX')/1024/1024,0) ba_range, count(bh.ba) count_no

from x$bh bhgroup by trunc(to_number(bh.ba,'XXXXXXXXXXXXXXXX')/1024/1024,0)order by ba_range

) bh, ba_base

where ba_base.i = bh.ba_range(+))

where level = cntstart with ba_range2_order = 1connect by prior ba_range2 = ba_range2

and prior ba_range2_order = ba_range2_order-1

SGA MAP(X$BH)用のSQL

Page 40: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Fixed Area

Variable Area

Redo Buffer

skgm overhead

256MB

256MB

Database Buffer

0x00000008D1484000

0x00000017CF628000

59.97GB

99.75GB

Page 41: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 42: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

今度は、めいっぱい詰め込む

Page 43: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

バッファ・キャッシュをフルに埋めてみた

Page 44: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

ブロックサイズ 8192 bytes の環境なので1セル(1MB)あたり、128 blocks 収まっている

Page 45: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

これなに?

これなに?

Page 46: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

すみません。

よくわかりません。

これなに?

Page 47: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

Buffer Cache : 246MB + Blank : 10MBBuffer Cache : 246MB + Blank : 10MBBuffer Cache : 246MB + Blank : 10MB

(repeat)

白い縞模様は一定間隔で現れています

Page 48: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

SQL> select * from v$sgainfo ;

NAME BYTES RESIZEABL CON_ID

------------------------ ------------- --------- -------------

.....

Granule Size 268435456 No 0

.....

Buffer Cache : 246MB + Blank : 10MB ・・・ GranuleBuffer Cache : 246MB + Blank : 10MB ・・・ GranuleBuffer Cache : 246MB + Blank : 10MB ・・・ Granule

(repeat)

どうやら Granule 単位…

Page 49: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみるSQL> select avg(

2 (length( ADDR ))+

3 (length( INDX ))+

4 (length( INST_ID ))+

5 (length( CON_ID ))+

6 (length( HLADDR ))+

7 (length( BLSIZ ))+

.......

58 (length( TCH ))+

59 (length( TIM ))+

60 (length( CR_RFCNT ))+

61 (length( SHR_RFCNT ))) avg_len_bh

62 ,count(*)

63 from x$bh where rownum < 1000;

AVG_LEN_BH COUNT(*)

------------- -------------

348.690690691 999

Buffer Header Length≒ 350 bytes

Page 50: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみるBuffer Header Size / Granule

-128 blocks / 1 MB * 246 MB = 31488 blocks

-31488 blocks * 350 bytes = 11020800 bytes(≒10.5MB)

上記より、、- 246MB内に格納されるデータ・ブロックは31488 blocks- データ・ブロックの管理情報であるバッファ・ヘッダは1データ・ブロックあたり約 350

bytes- よって、246MB分のデータ・ブロック(31488 blocks)に対して、約10.5MBのバッファ・ヘッダが必要

- これらが1Granule(当該環境では256MB)に収まっていると考えられる

Page 51: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

もう一度地図を描いてみる

すみません。

よくわかりません。バッファ・

ヘッダみたいです。

Page 52: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

仮想メモリとSGA0x0000000000000000

0xffffffffffffffff

0x0000000000400000text

data

BSS

heap・・・

shared memory

stack

・・・

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

0x0000000060000000 ( 1.5 GB)

0x0000000070000000 ( 1.75GB)

0x0000001960000000 (101.5 GB)

0x0000001970000000 (101.75GB)

Fixed Area

Variable Area

Redo Buffer

skgm overhead

256MB

256MB

Database Buffer

0x0000000080002000

0x00000017CF628000

93.24GB

99.75GB

Page 53: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

コンテンツ

•データベースとインスタンス•仮想メモリとSGA•使用量を測ってみる•地図を描いてみる•もう一度地図を描いてみる•SGA Heat Map

Page 54: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

Before Data Load80MB

データがあまりキャッシュされていない状態60GB弱のレンジ内に、80MB程度しかキャッシュさ

れておらず、データ・ブロックはまばらに配置されている

データ・ブロックがバッファ・キャッシュを埋め尽くすまでの途中経過を見てみると、、、

Page 55: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

40GB

40GB程度キャッシュされている状態

データ・ブロックは仮想メモリアドレスの高い方(図の下方)から徐々に埋まってくる

Page 56: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

50GB

50GB程度キャッシュされている状態当初の60GB弱のレンジが少しずつ広がり始めている状態

Page 57: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

80GB

80GB程度キャッシュされている状態仮想メモリアドレスの高い方から埋まりつつある

データ・ブロックが埋まった領域において、バッファ・ヘッダが格納されているとみられる白いスリット上の領域が確認できる

Page 58: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

Buffer Cache Full93GB

90GB程度キャッシュされている状態

バッファ・キャッシュがほぼ埋まった状態で、赤い領域(Hot Buffer)が発生していることが確認できる

Page 59: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

Buffer Rewrite 93GB

90GB程度キャッシュされている状態

バッファ・キャッシュがほぼ埋まった状態で、データのロード処理を継続していると、赤い領域(Hot Buffer)がバッファ・キャッシュのメモリ空間のほぼ中段の位置で発生していることが確認できる

LRUリストのCOLD領域に位置するデータ・ブロック

がちょうどこの位置にはキャッシュされていると推測される

Page 60: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

End of Data Load93GB

90GB程度キャッシュされている状態データのロード処理を停止すると、赤い領域(Hot Buffer)が消える

メモリ上の激しいバッファの書き換えが収まったためと考えられる

Page 61: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat Map

•幼児

同一BAのBHレコード

1MB / 8192 bytes = 128 blocks128 blocks 以上表示されるエリアを”赤いセル”で表現

実際には、1MBのエリアに8192 bytes のブロックが 128 blocks 以上存在するはずはない。X$BHを検索中にダーティーリードが発生した結果、バッファー・キャッシュ内の書き換えが激しいアドレスのブロックが複数現れてしまうことで、見かけ上128 blocks以上存在するように見える。つまり、ホット・バッファ。

赤い領域(Hot Buffer)の拡大イメージ

Page 62: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

SGA Heat MapSQL> select ADDR,INDX,BA,NXT_HASH,PRV_HASH2 from x$bh3 where ba in ( select ba4 from x$bh5 where trunc(to_number(ba,'XXXXXXXXXXXXXXXX')/1024/1024,0) = 639*100+166 group by ba7 having count(ba) > 28 )9 order by ba;

ADDR INDX BA NXT_HASH PRV_HASH------------------------------ ------------- ------------------- --------------------- --------------------00002B4D0CC34E60 9353301 0000000F9ACAE000 000000193D50AF78 000000193D50AF7800002B4D0CC35518 8077473 0000000F9ACAE000 000000195B920E80 000000195B920E8000002B4D0CC35268 11432377 0000000F9ACAE000 0000001920DAA7B8 0000001920DAA7B800002B4D0CC35518 8113471 0000000F9ACC6000 000000193BB8CB98 000000193BB8CB9800002B4D0CC34FB8 9389297 0000000F9ACC6000 000000194D700710 000000194D70071000002B4D0CC35110 11069055 0000000F9ACC6000 000000195F5B9720 000000195F5B972000002B4D0CC34FB8 9425309 0000000F9ACDE000 000000195D424540 000000195D42454000002B4D0CC34E60 10705717 0000000F9ACDE000 000000193F042E78 000000193F042E7800002B4D0CC34FB8 8149442 0000000F9ACDE000 000000193BD23C88 000000193BD23C8800002B4D0CC34FB8 9461313 0000000F9ACF6000 000000195D5BB630 000000195D5BB63000002B4D0CC35518 10342351 0000000F9ACF6000 000000194EA56040 000000194EA5604000002B4D0CC34FB8 8185434 0000000F9ACF6000 000000194BF19430 000000194BF19430

12行が選択されました。

バッファ・アドレスが重複している(ように見える)ケース

Page 63: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

おさらい

- OracleのSGAがOS視点でメモリ空間のどの位置に存在しているかを確認してみた

- 今回は、さらにSGA内のバッファ・キャッシュがどのように配置されているかをイメージで確認できるようにトライしてみた

- その結果、バッファ・キャッシュにキャッシュされるデータ・ブロックはデータ量が少ないときはまばらにキャッシュされ、必ずしも連続してキャッシュされるわけではないことが判明

- また、データ・ブロックがキャッシュされていく場合、仮想メモリアドレスの上位側から徐々に埋まっていくことを把握

- バッファ・キャッシュがほぼデータ・ブロックで埋まった状態では、データ・ブロック以外にバッファ・ヘッダの領域が仮想メモリアドレス上で一定間隔で確保されていることが明らかに

- この間隔はGranule単位であると思われる (当環境では256MB)

Page 64: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

おさらい2

- このバッファ・ヘッダは1データ・ブロックあたり約350bytesであると見込まれる

- この領域を確保するため、バッファ・キャッシュ上におよそ4%程度(今回の結果から導出)のバッファ・ヘッダ領域が必要

- つまり、100GBのバッファ・キャッシュを設定した場合、実際にキャッシュされるデータ・ブロックはおよそ96GB程度になると思われる

- バッファ・キャッシュがほぼ埋まった状態で、さらに新しいデータ・ブロックをキャッシュする場合は、仮想メモリ上でもバッファの書き換えが発生する

- 書き換え対象になるデータ・ブロックは、Oracle Database のバッファ・キャッシュ用のLRU管理により選択される

Page 65: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

おさらい3

- 書き換え対象になるバッファはLRUリストのCOLD側にあるデータ・ブロックを格納しているバッファになる

- バッファ・キャッシュがほぼ未使用の状態から開始した今回の検証では、前半にキャッシュされたデータ・ブロックはLRUリストのHOT側で管理され、後半にキャッシュされたデータ・ブロックはCOLD側にキャッシュされた可能性がある

- よって、バッファ・キャッシュがほぼ100%埋まったあと、バッファ・キャッシュからの追い出しが行われるデータ・ブロックは、仮想メモリアドレス上の下位のアドレス(資料中の図の上側)に位置していた可能性が高い

- そのため、資料中では赤い領域(Hot Buffer)が中段より上方で発生していたと考えられる(※)

※当資料ではバッファ・キャッシュの下位アドレス側のイメージを載せている為、絵的に下の方が赤くなっているように見えますが、実際の Hot Buffer は全体の上側(仮想メモリアドレスの下位側)に偏っています。

Page 66: [db tech showcase Tokyo 2014] L35: 100GB クラスの SGA を眺めてみよう。Oracle Database 12c の場合  by Japan Oracle User Group 山下正

Thank you for your time!!