SlideShare una empresa de Scribd logo
1 de 86
Descargar para leer sin conexión
This is the font size used for showing screen output. Be sure this is readable for you. 
©2013 
Enkitec 
Profiling 
the 
logwriter 
and 
database 
writer 
Frits 
Hoogland 
Oaktableworld 
2014 
1 
This is the font used to accentuate text/console output. Make sure this is readable for you too!
`whoami` 
• Frits 
Hoogland 
• Working 
with 
Oracle 
products 
since 
1996 
! 
• Blog: 
hEp://fritshoogland.wordpress.com 
• TwiEer: 
@fritshoogland 
• Email: 
frits.hoogland@enkitec.com 
• Oracle 
ACE 
Director 
• OakTable 
Member 
2
Goals 
& 
prerequisites 
• Goal: 
learn 
about 
typical 
behaviour 
of 
both 
lgwr 
and 
dbwr, 
both 
visible 
(wait 
events) 
and 
inner-­‐ 
working. 
! 
• Prerequisites: 
– Understanding 
of 
(internal) 
execu[on 
of 
C 
programs. 
– Understanding 
of 
Oracle 
tracing 
mechanisms. 
– Understanding 
of 
interac[on 
between 
procs. 
with 
the 
Oracle 
database. 
3
Test 
system 
• The 
tests 
and 
inves[ga[on 
is 
done 
in 
a 
VM: 
– Host: 
Mac 
OSX 
10.9 
/ 
VMWare 
Fusion 
6.0.2. 
– VM: 
Oracle 
Linux 
x86_64 
6u5 
(UEK3 
3.8.13). 
– Oracle 
Grid 
11.2.0.4 
with 
ASM/External 
redundancy. 
– Oracle 
database 
11.2.0.4. 
! 
– Unless 
specified 
otherwise. 
4
Logwriter, 
concepts 
guide 
• From 
the 
concepts 
guide: 
– The 
lgwr 
manages 
the 
redolog 
buffer 
! 
– The 
lgwr 
writes 
all 
redo 
entries 
that 
have 
been 
copied 
in 
the 
buffer 
since 
the 
last 
[me 
it 
wrote 
when: 
• User 
commits. 
• Logswitch. 
• Three 
seconds 
since 
last 
write. 
• Buffer 
1/3th 
full 
or 
1MB 
filled. 
• dbwr 
must 
write 
modified 
(‘dirty’) 
buffers. 
5
Logwriter, 
idle 
• The 
general 
behaviour 
of 
the 
log 
writer 
can 
easily 
be 
shown 
by 
pugng 
a 
10046/8 
on 
lgwr: 
! 
SYS@v11204 AS SYSDBA> @who 
… 
130,1,@1 2243 oracle@ol65-ora11204-asm.local (LGWR) 
… 
SYS@v11204 AS SYSDBA> oradebug setospid 2243 
Oracle pid: 11, Unix process pid: 2243, image: oracle@ol65-ora11204-asm.local (LGWR) 
SYS@v11204 AS SYSDBA> oradebug unlimit 
Statement processed. 
SYS@v11204 AS SYSDBA> oradebug event 10046 trace name context forever, level 8; 
Statement processed. 
6
Logwriter, 
idle 
• The 
10046/8 
trace 
shows: 
! 
*** 2013-12-18 14:12:32.479 
WAIT #0: nam='rdbms ipc message' ela= 2999925 timeout=300 p2=0 p3=0 obj#=-1 
tim=1387372352479352 
! 
*** 2013-12-18 14:12:35.479 
WAIT #0: nam='rdbms ipc message' ela= 3000075 timeout=300 p2=0 p3=0 obj#=-1 
tim=1387372355479531 
! 
*** 2013-12-18 14:12:38.479 
WAIT #0: nam='rdbms ipc message' ela= 2999755 timeout=300 p2=0 p3=0 obj#=-1 
tim=1387372358479381 
! 
*** 2013-12-18 14:12:41.479 
WAIT #0: nam='rdbms ipc message' ela= 3000021 timeout=300 p2=0 p3=0 obj#=-1 
tim=1387372361479499 
7
Logwriter, 
idle 
• “rdbms 
ipc 
message” 
indicates 
a 
sleep/idle 
event 
– There 
isn’t 
an 
indica[on 
lgwr 
writes 
something: 
! 
semtimedop(327683, {{15, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily 
unavailable) 
getrusage(RUSAGE_SELF, {ru_utime={0, 84000}, ru_stime={0, 700000}, ...}) = 0 
getrusage(RUSAGE_SELF, {ru_utime={0, 84000}, ru_stime={0, 700000}, ...}) = 0 
times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 
times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 
times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 
times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 
semtimedop(327683, {{15, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily 
unavailable) 
…etc… 
8
Logwriter, 
idle 
• It 
does 
look 
in 
the 
/proc 
filesystem 
to 
the 
‘stat’ 
file 
of 
a 
certain 
process: 
! 
open("/proc/2218/stat", O_RDONLY) = 21 
read(21, "2218 (oracle) S 1 2218 2218 0 -1"..., 999) = 209 
close(21) 
! 
• It 
does 
so 
every 
20th 
[me 
(20*3)= 
60 
sec. 
• The 
PID 
is 
PMON. 
9
Logwriter, 
idle 
• Recap: 
– In 
an 
idle 
database. 
– The 
lgwr 
sleeps 
on 
a 
semaphore 
for 
3 
seconds. 
• Then 
wakes 
up, 
and 
sets 
up 
the 
semaphore/sleep 
again. 
• Processes 
sleeping 
on 
a 
semaphore 
do 
not 
spend 
CPU 
– Every 
minute, 
lgwr 
reads 
pmon's 
process 
stats. 
– lgwr 
doesn’t 
write 
if 
there’s 
no 
need. 
• But 
what 
happens 
when 
we 
insert 
a 
row 
of 
data, 
and 
commit 
that? 
10
Logwriter, 
commit 
TS@//localhost/v11204 > insert into t values ( 1, 'aaaa', 'bbbb' ); 
! 
1 row created. 
! 
TS@//localhost/v11204 > commit; 
! 
Commit complete. 
11
Logwriter, 
commit 
-­‐ 
expected 
12 
time 
semctl(458755, 15, SETVAL, 0x7fff00000001) 
foreground 
logwriter 
semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) 
semtimedop(458755, {{33, -1, 0}}, 1, {0, 100000000}) 
semctl(458755, 33, SETVAL, 0x1) 
commit; 
io_submit(139981752844288, 1, 
{{0x7f5008e23480, 0, 1, 0, 256}}) 
io_getevents(139981752844288, 1, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{600, 0})
Logwriter, 
commit 
-­‐ 
actual 
13 
time 
semctl(458755, 15, SETVAL, 0x7fff00000001) 
commit; 
foreground 
logwriter 
semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) 
io_submit(139981752844288, 1, 
{{0x7f5008e23480, 0, 1, 0, 256}}) 
no ‘log file sync’ wait! 
No semtimedop() 
No semctl() 
io_getevents(139981752844288, 1, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{600, 0})
Logwriter, 
commit 
• Inves[ga[on 
shows: 
– Foreground 
scans 
log 
writer 
progress 
up 
to 
3 
[mes. 
• kcrf_commit_force() 
> 
kcscur3() 
! 
– If 
its 
data* 
in 
the 
redo 
log 
buffer 
is 
not 
wriEen: 
• It 
no[fies 
the 
lgwr 
that 
it 
is 
going 
to 
sleep 
on 
a 
semaphore. 
• sem[medop() 
for 
100ms, 
un[l 
posted 
by 
lgwr. 
– If 
its 
data* 
has 
been 
wriEen: 
• No 
need 
to 
wait 
on 
it. 
• No 
‘log 
file 
sync’ 
wait. 
14
Logwriter, 
commit 
• Wait!!! 
– This 
(no 
log 
file 
sync) 
turned 
out 
to 
be 
an 
edge 
case. 
• I 
traced 
the 
kcrf_commit_force() 
and 
kcscur3() 
calls 
using 
breaks 
in 
gdb. 
! 
– In 
normal 
situa[ons, 
the 
wait 
will 
appear. 
• Depending 
on 
log 
writer 
and 
FG 
progress. 
• The 
sem[medop() 
call 
in 
the 
FG 
can 
be 
absent. 
– As 
a 
result, 
lgwr 
will 
not 
semctl() 
15
Logwriter, 
commit 
-­‐ 
post-­‐wait 
semtimedop(458755, {{33, -1, 0}}, 1, {0, 100000000}) 
16 
time 
semctl(458755, 15, SETVAL, 0x7fff00000001) 
commit; 
foreground 
logwriter 
kcrf_commit_force() 
kcscur3() 
log file sync Grayed means: optional 
log rdbms ipc message file parallel write 
semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) 
io_submit(139981752844288, 1, 
{{0x7f5008e23480, 0, 1, 0, 256}}) 
io_getevents(139981752844288, 1, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{600, 0})
adap[ve 
log 
file 
sync 
• Feature 
of 
Oracle 
11.2 
– Parameter 
'_use_adap[ve_log_file_sync' 
• Set 
to 
FALSE 
up 
to 
11.2.0.2 
• Set 
to 
TRUE 
star[ng 
from 
11.2.0.3 
• Third 
value 
‘POLLING_ONLY’ 
– Makes 
Oracle 
adap[vely 
switch 
between 
‘post-­‐wait’ 
and 
polling. 
– The 
log 
writer 
writes 
a 
no[fica[on 
in 
its 
logfile 
if 
it 
switches 
between 
modes 
(if 
param 
= 
‘TRUE’) 
17
Logwriter, 
commit 
-­‐ 
polling 
18 
time 
semctl(458755, 15, SETVAL, 0x7fff00000001) 
commit; 
foreground 
logwriter 
kcrf_commit_force 
kcscur3 
log rdbms ipc message file parallel write 
semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) 
io_submit(139981752844288, 1, 
{{0x7f5008e23480, 0, 1, 0, 256}}) 
io_getevents(139981752844288, 1, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{600, 0}) 
log file sync 
nanosleep({0, 9409000}, 0x7fff64725480) 
nanosecs; varies
Logwriter, 
post-­‐wait 
vs. 
polling 
– No 
wait 
event 
‘log 
file 
sync’ 
if: 
• Lgwr 
was 
able 
to 
flush 
the 
commiEed 
data 
before 
the 
foreground 
has 
issued 
kcscur3() 
2/3 
[mes 
in 
kcrf_commit_force(). 
– If 
not, 
the 
foreground 
starts 
a 
‘log 
file 
sync’ 
wait. 
• If 
in 
“post-­‐wait” 
mode 
(default), 
it 
will 
record 
it’s 
wai[ng 
state 
in 
the 
post-­‐wait 
queue, 
sleep 
in 
sem[medop() 
for 
100ms 
at 
a 
[me, 
wai[ng 
to 
be 
posted 
by 
lgwr. 
• If 
in 
“polling” 
mode, 
it 
will 
sleep 
in 
nanosleep() 
for 
computed 
[me*, 
then 
check 
lgwr 
progress, 
if 
lgwr 
write 
has 
progressed 
beyond 
its 
commiEed 
data 
SCN: 
end 
wait, 
else 
start 
sleeping 
in 
nanosleep() 
again. 
19
Logwriter 
• The 
main 
task 
of 
lgwr 
is 
to 
flush 
data 
in 
the 
logbuffer 
to 
disk. 
– The 
lgwr 
is 
idle 
when 
wai[ng 
on 
‘rdbms 
ipc 
message’. 
– There 
are 
two 
main* 
indicators 
of 
lgwr 
business: 
• CPU 
[me. 
• Wait 
event 
‘log 
file 
parallel 
write’. 
! 
! 
• The 
lgwr 
needs 
to 
be 
able 
to 
get 
onto 
the 
CPU 
in 
order 
to 
do 
process! 
20
Logwriter 
-­‐ 
idle 
21 
logwriter 
rdbms ipc message rdbms ipc message rdbms ipc message 
semtimedop(458755, {{15, -1, 0}}, 1, {3, 0})
Logwriter 
-­‐ 
idle 
22 
rdbms ipc message rdbms ipc message 
logwriter
Logwriter 
-­‐ 
idle 
23 
logwriter 
Idle mode latch gets: 
‘messages’ 
‘mostly latch-free SCN’ 
‘lgwr LWN SCN’ 
‘KTF sga latch’ 
‘redo allocation’ 
‘messages’
Logwriter 
-­‐ 
wri[ng 
24 
logwriter 
Write mode latch gets and frees: 
‘messages’ 
‘mostly latch-free SCN’ 
‘lgwr LWN SCN’ 
‘KTF sga latch’ 
‘redo allocation’ 
‘messages’ 
‘redo writing’
Logwriter 
-­‐ 
wri[ng 
25 
logwriter 
log file parallel write 
io_submit(139981752844288, n, 
{{0x7f5008e23480, 0, 1, 0, 256}}) 
io_getevents(139981752844288, n, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{0, 0}) 
io_getevents(139981752844288, n, 128, 
{{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, 
{600, 0}) 
With the linux ‘strace’ utility, 
the non-blocking syscall is visible 
OR 
the blocking one syscall is visible.
• The 
Logwriter 
-­‐ 
wri[ng 
event 
‘log 
file 
parallel 
write’ 
is 
an 
indicator 
of 
IO 
wait 
[me 
for 
the 
lgwr. 
– NOT 
IO 
latency 
[me!! 
26 
io_submit() io_getevents() io_getevents() 
log file parallel write: 9.85ms 
real IO time: 7ms 
real IO time: 10ms
Logwriter 
wait 
events 
• rdbms 
ipc 
message 
– [meout: 
300 
(cen[seconds; 
3 
seconds). 
– process 
sleeping 
~ 
3 
seconds 
on 
semaphore. 
! 
• log 
file 
parallel 
write 
– files: 
number 
of 
log 
file 
members. 
– blocks: 
total 
number 
of 
log 
blocks 
wriEen. 
– requests: 
? 
• I’ve 
seen 
this 
differ 
from 
the 
actual 
numer 
of 
IO 
requests. 
27
Logwriter 
wait 
events 
• Let’s 
switch 
the 
database 
to 
synchronous 
IO. 
– Some 
plaxorms 
have 
difficulty 
with 
AIO 
(HPUX!) 
– Got 
to 
check 
if 
your 
config 
does 
use 
AIO. 
• Found 
out 
by 
accident 
that 
ASM+NFS 
has 
no 
AIO 
by 
default. 
! 
– Good 
to 
understand 
what 
the 
absence 
of 
AIO 
means. 
! 
• If 
you 
can’t 
use 
AIO 
today, 
you 
are 
doing 
it 
WRONG! 
28
log 
file 
parallel 
write 
29 
timeout = 3s 
disk_asynch_io=FALSE 
(no 
AIO) 
! 
kslwtbctx 
semtimedop - 458755 semid, timeout: $62 = {tv_sec = 3, tv_nsec = 0} 
kslwtectx -- Previous wait time: 584208: rdbms ipc message 
! 
pwrite64 - fd, size - 256,512 
pwrite64 - fd, size - 256,512 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 782: log file parallel write 
! 
kslwtbctx 
semtimedop - 458755 semid, timeout: $63 = {tv_sec = 2, tv_nsec = 310000000} 
kslwtectx -- Previous wait time: 2315982: rdbms ipc message 
wait time = 0.584208s 
=> semaphore is posted! 
two sequential writes 
(two logfiles) 
the wait begins AFTER the write (!) 
it’s also suspiciously fast (0.8ms)
log 
file 
parallel 
write 
30 
disk_asynch_io=FALSE 
(no 
AIO) 
Let’s 
add 
100ms 
to 
the 
IOs 
(shell 
sleep 
0.1) 
! 
kslwtbctx 
semtimedop - 458755 semid, timeout: $3 = {tv_sec = 2, tv_nsec = 900000000} 
kslwtectx -- Previous wait time: 2905568: rdbms ipc message 
! 
pwrite64 - fd, size - 256,512 
>sleep 0.1 
pwrite64 - fd, size - 256,512 
>sleep 0.1 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 545: log file parallel write 
Two writes again. 
In the break a sleep of 100ms is 
added. 
This should make the timing at 
least 200’000 
The timing is 545 (0.5ms): 
timing is off.
log 
file 
parallel 
write 
• Conclusion: 
– For 
at 
least 
Oracle 
version 
11.2. 
– When 
synchronous 
IO 
(pwrite64()) 
is 
issued. 
• disk_asynch_io 
= 
FALSE 
(ASM) 
• filesystemio_op[ons 
!= 
“setall” 
or 
“asynch” 
– The 
wait 
event 
does 
not 
[me 
the 
IO 
requests. 
! 
• How 
about 
the 
other 
log 
writer 
wait 
events? 
31
control 
file 
sequen[al 
read 
32 
disk_asynch_io=FALSE 
(no 
AIO) 
! 
kslwtbctx 
pread64 - fd, size - 256,16384 
>sleep 0.1 
kslwtectx -- Previous wait time: 100323: control file sequential read 
! 
This 
event 
is 
correctly 
[med.
control 
file 
parallel 
write 
33 
disk_asynch_io=FALSE 
(no 
AIO) 
! 
pwrite64 - fd, size - 256,16384 
>sleep 0.1 
kslwtbctx 
kslwtectx -- Previous wait time: 705: control file parallel write 
! 
This 
event 
is 
incorrectly 
[med!
log 
file 
single 
write 
34 
disk_asynch_io=FALSE 
(no 
AIO) 
! 
kslwtbctx 
pwrite64 - fd, size - 256,512 
>sleep 0.1 
kslwtectx -- Previous wait time: 104594: log file single write 
! 
This 
event 
is 
correctly 
[med.
Logwriter 
wait 
events 
logswitch 
• Some 
of 
these 
waits 
typically 
show 
up 
during 
a 
logswitch. 
– This 
are 
all 
the 
waits 
which 
are 
normally 
seen: 
• os 
thread 
startup 
(semctl()-­‐sem[medop()) 
• control 
file 
sequen[al 
read 
(pread64()) 
• control 
file 
parallel 
write 
(io_submit()-­‐io_getevents()) 
• log 
file 
sequen[al 
read 
(pread64()) 
• log 
file 
single 
write 
(pwrite64()) 
• KSV 
master 
wait 
(semctl() 
post 
to 
dbwr) 
! 
• This 
is 
with 
AIO 
enabled! 
35
Logwriter, 
[meout 
message 
• Warning: 
! 
Warning: log write elapsed time 523ms, size 2760KB 
! 
• Printed 
in 
logwriter 
tracefile 
(NOT 
alert.log) 
• This 
is 
instrumented 
with 
the 
‘log 
write 
parallel 
write’ 
event. 
• Threshold 
set 
with 
parameter: 
– _side_channel_batch_[meout_ms 
(500ms) 
36
Logwriter, 
[meout 
message 
• Warning 
(RAC!): 
! 
Warning: log write broadcast wait time 2913ms (SCN 0xb86.cd638134) 
! 
• Printed 
in 
logwriter 
tracefile 
(NOT 
alert.log) 
• This 
is 
instrumented 
with 
the 
‘wait 
for 
scn 
ack’ 
event. 
37
Logwriter: 
disable 
logging 
• The 
“forbidden 
switch”: 
_disable_logging 
– Do 
not 
use 
this 
for 
anything 
else 
than 
tests! 
! 
• Everything 
is 
done 
the 
same 
— 
no 
magic 
– Except 
the 
write 
by 
the 
lgwr 
to 
the 
logfiles 
– No 
‘log 
file 
parallel 
write’ 
– Redo/control/data 
files 
are 
synced 
with 
shut 
normal 
! 
• A 
way 
to 
test 
if 
lgwr 
IO 
influences 
db 
processing 
38
Logwriter: 
exadata 
• How 
does 
this 
look 
like 
on 
Exadata? 
39
Logwriter: 
exadata 
kslwtbctx 
semtimedop - 3309577 semid, timeout: $24 = {tv_sec = 2, tv_nsec = 970000000} 
kslwtectx -- Previous wait time: 2973630: rdbms ipc message 
! 
$25 = "oss_write" 
$26 = "oss_write" 
$27 = "oss_write" 
$28 = "oss_write" 
! 
kslwtbctx 
$29 = "oss_wait" 
$30 = "oss_wait" 
$31 = "oss_wait" 
$32 = "oss_wait" 
kslwtectx -- Previous wait time: 2956: log file parallel write 
! 
kslwtbctx 
semtimedop - 3309577 semid, timeout: $33 = {tv_sec = 3, tv_nsec = 0} 
kslwtectx -- Previous wait time: 3004075: rdbms ipc message 
40 
The dbwr semaphore sleep. 
The writes are issued here. 
There is no io_submit like wait. This is not timed. 
The wait is log file parallel write, identical to non-exadata. 
It seems to wait for all issued IOs
Database 
writer 
• From 
the 
Oracle 
11.2 
concepts 
guide: 
– The 
DBWn 
process 
writes 
dirty 
buffers 
to 
disk 
under 
the 
following 
condi[ons: 
• When 
a 
server 
process 
cannot 
find 
a 
clean 
reusable 
buffer 
a|er 
scanning 
a 
threshold 
of 
buffers, 
it 
signals 
DBWn 
to 
write. 
DBWn 
writes 
dirty 
buffers 
to 
disk 
asynchronously 
if 
possible 
while 
performing 
other 
processing. 
• DBWn 
periodically 
writes 
buffers 
to 
advance 
the 
checkpoint, 
which 
is 
the 
posi[on 
in 
the 
redo 
thread 
from 
which 
instance 
recovery 
begins. 
The 
log 
posi[on 
of 
the 
checkpoint 
is 
determined 
by 
the 
oldest 
dirty 
buffer 
in 
the 
buffer 
cache. 
41
Database 
writer, 
idle 
• The 
10046/8 
trace 
shows: 
! 
*** 2013-12-31 00:45:51.088 
WAIT #0: nam='rdbms ipc message' ela= 3006219 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388447151086891 
! 
*** 2013-12-31 00:45:54.142 
WAIT #0: nam='rdbms ipc message' ela= 3005237 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388447154140873 
! 
*** 2013-12-31 00:45:57.197 
WAIT #0: nam='rdbms ipc message' ela= 3005258 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388447157195828 
! 
*** 2013-12-31 00:46:00.255 
WAIT #0: nam='rdbms ipc message' ela= 3005716 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388447160253960 
42
Database 
writer, 
idle 
• “rdbms 
ipc 
message” 
indicates 
a 
sleep/idle 
event 
– There 
isn’t 
an 
indica[on 
dbw0 
writes 
something: 
! 
semtimedop(983043, {{14, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily 
unavailable) 
getrusage(RUSAGE_SELF, {ru_utime={0, 31000}, ru_stime={0, 89000}, ...}) = 0 
getrusage(RUSAGE_SELF, {ru_utime={0, 31000}, ru_stime={0, 89000}, ...}) = 0 
times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 
times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 
times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 
semtimedop(983043, {{14, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily 
unavailable) 
…etc… 
43
Database 
writer, 
idle 
• It 
does 
look 
in 
the 
/proc 
filesystem 
to 
the 
‘stat’ 
file 
of 
a 
certain 
process: 
! 
open("/proc/2218/stat", O_RDONLY) = 21 
read(21, "2218 (oracle) S 1 2218 2218 0 -1"..., 999) = 209 
close(21) 
! 
• It 
does 
so 
every 
20th 
[me 
(20*3)= 
60 
sec. 
• The 
PID 
is 
PMON. 
44
Database 
writer, 
idle 
• Recap: 
– In 
an 
idle 
database. 
– The 
dbwr 
sleeps 
on 
a 
semaphore 
for 
3 
seconds. 
• Then 
wakes 
up, 
and 
sets 
up 
the 
semaphore/sleep 
again. 
• Processes 
sleeping 
on 
a 
semaphore 
do 
not 
spend 
CPU 
– Every 
minute, 
dbwr 
reads 
pmon's 
process 
stats. 
– dbwr 
doesn’t 
write 
if 
there’s 
no 
need. 
45
Database 
writer, 
force 
write 
• We 
can 
force 
the 
dbwr 
to 
write: 
– Dirty 
some 
blocks 
(insert 
a 
row 
into 
a 
table). 
– Force 
a 
thread 
checkpoint 
(alter 
system 
checkpoint). 
! 
! 
! 
! 
! 
* 
There 
are 
mul[ple 
ways, 
this 
is 
one 
of 
them. 
46
Database 
writer, 
force 
write 
10046/8 
trace: 
*** 2014-01-03 03:37:47.473 
WAIT #0: nam='rdbms ipc message' ela= 3000957 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388716667473024 
! 
*** 2014-01-03 03:37:49.735 
WAIT #0: nam='rdbms ipc message' ela= 2261867 timeout=300 p2=0 p3=0 obj#=-1 
tim=1388716669735046 
WAIT #0: nam='db file async I/O submit' ela= 0 requests=3 interrupt=0 timeout=0 
obj#=-1 tim=1388716669735493 
WAIT #0: nam='db file parallel write' ela= 21 requests=1 interrupt=0 
timeout=2147483647 obj#=-1 tim=1388716669735566 
! 
*** 2014-01-03 03:37:50.465 
WAIT #0: nam='rdbms ipc message' ela= 729110 timeout=73 p2=0 p3=0 obj#=-1 
tim=1388716670464967 
47 
elapsed time = 2.26 sec. 
So the dbwr is posted! 
db file async I/O submit?! 
It looks like the io_submit() call is instrumented for the dbwr! 
But what does ‘requests=3’ mean for a single row update 
checkpoint? 
And the write, via the event ‘db file parallel write’.
dbwr, 
sql_trace 
+ 
strace 
• Let’s 
take 
a 
look 
at 
the 
Oracle 
wait 
events, 
together 
with 
the 
actual 
system 
calls. 
! 
• That 
is: 
– Segng 
a 
10046/8 
event 
for 
trace 
and 
waits. 
– Execute 
strace 
with 
‘-­‐e 
write=all 
-­‐e 
all’ 
48
dbwr, 
sql_trace 
+ 
strace 
io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 
1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 
write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | 
| 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | 
| 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | 
| 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | 
| 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | 
| 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | 
io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, 
{0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 
0}}, {600, 0}) = 3 
write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | 
| 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | 
| 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | 
| 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | 
| 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | 
| 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | 
| 00070 34 35 37 39 4579 | 
49
dbwr, 
sql_trace 
+ 
strace 
io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 
1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 
write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | 
| 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | 
| 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | 
| 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | 
| 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | 
| 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | 
io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, 
{0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 
0}}, {600, 0}) = 3 
write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | 
| 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | 
| 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | 
| 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | 
| 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | 
| 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | 
| 00070 34 35 37 39 4579 | 
50
dbwr, 
sql_trace 
+ 
strace 
io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 
1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 
write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | 
| 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | 
| 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | 
| 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | 
| 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | 
| 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | 
io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, 
{0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 
0}}, {600, 0}) = 3 
write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | 
| 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | 
| 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | 
| 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | 
| 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | 
| 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | 
| 00070 34 35 37 39 4579 | 
51 
This is the MINIMAL number of requests to reap before successful. 
(min_nr - see man io_getevents) ? 
? 
? 
The timeout for io_getevents() is set to 600 seconds. 
struct timespec { sec, nsec } 
Despite only needing 1 request, this call returned all 3. 
This information is NOT EXTERNALISED (!!)
dbwr, 
db 
file 
async 
I/O 
submit 
• Let’s 
take 
a 
look 
at 
the 
what 
the 
documenta;on 
says 
about 
“db 
file 
async 
I/O 
submit”: 
! 
52 
(That’s 
right…nothing) 
!
dbwr, 
db 
file 
async 
I/O 
submit 
• My 
Oracle 
Support 
on 
“db 
file 
async 
I/O 
submit”: 
! 
'db file async I/O submit' when FILESYSTEMIO_OPTIONS=NONE 
[Article ID 1274737.1] 
How To Address High Wait Times for the 'Direct Path Write Temp ' Wait Event 
[Article ID 1576956.1] 
! 
• Both 
don’t 
describe 
what 
this 
event 
is. 
• 1st 
note 
is 
only 
for 
filesystemio_op;ons=NONE 
and 
describes 
the 
event 
not 
being 
tracked 
prior 
to 
version 
11.2.0.2. 
53
dbwr, 
db 
file 
async 
I/O 
submit 
• So 
the 
ques;on 
is: 
! 
– What 
DOES 
the 
event 
“db 
file 
async 
I/O 
submit” 
mean? 
! 
54 
• The 
obvious 
answer 
is: 
– Instrumenta;on 
of 
the 
io_submit() 
call. 
• My 
answer 
is: 
– Don’t 
know. 
– But 
NOT 
the 
instrumenta;on 
of 
io_submit().
dbwr, 
db 
file 
async 
I/O 
submit 
• This 
is 
a 
trace 
of 
the 
relevant 
C 
func;ons: 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 236317: rdbms ipc message 
! 
io_submit - 3,45e5a000 - nr,ctx 
kslwtbctx 
kslwtectx -- Previous wait time: 688: db file async I/O submit 
! 
kslwtbctx 
io_getevents - 1,45e5a000 - minnr,ctx,timeout: $3 = {tv_sec = 600, tv_nsec = 0} 
skgfr_return64 - 3 IOs returned 
kslwtectx -- Previous wait time: 9604: db file parallel write 
55 
Waiting on a semaphore to be posted. 
io_submit() for 3 IOs 
The begin of the wait starts AFTER the io_submit()? 
io_getevevents() is properly timed. min_nr=1, got 3 IOs
dbwr, 
db 
file 
async 
I/O 
submit 
• Trace 
with 
sleep 
0.1 
in 
the 
break 
on 
io_submit() 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 385794: rdbms ipc message 
! 
io_submit - 3,45e5a000 - nr,ctx 
> sleep 0.1 
kslwtbctx 
kslwtectx -- Previous wait time: 428: db file async I/O submit 
! 
kslwtbctx 
io_getevents - 1,45e5a000 - minnr,ctx,timeout: $37 = {tv_sec = 600, tv_nsec = 0} 
skgfr_return64 - 3 IOs returned 
kslwtectx -- Previous wait time: 8053: db file parallel write 
56 
Waiting on a semaphore to be posted. 
io_submit() for 3 IOs + sleep of 100’000 
Wait time too low. io_submit() is not timed.
dbwr, 
db 
file 
parallel 
write 
• Let’s 
look 
at 
the 
“db 
file 
parallel 
write” 
event. 
57
dbwr, 
db 
file 
parallel 
write 
• Descrip;on 
from 
the 
Reference 
Guide: 
! 
db file parallel write 
This event occurs in the DBWR. It indicates that the DBWR is performing a parallel write to 
files and blocks. When the last I/O has gone to disk, the wait ends. 
Wait Time: Wait until all of the I/Os are completed 
Parameter 
Description 
requests: This indicates the total number of I/O requests, which will be the same as blocks 
interrupt: 
timeout: This indicates the timeout value in hundredths of a second to wait for the I/O 
completion. 
58 
Correct Correct…but only if AIO is enabled. 
Incorrect 
Incorrect 
Incorrect 
Empty? 
Probably incorrect. 
Or does a timeout of 
2’147’483’647 
/100/60/60/24= 
248.55 days 
Make sense to 
*anybody*?
dbwr, 
db 
file 
parallel 
write 
• Recap 
of 
previous 
traced 
calls: 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 236317: rdbms ipc message 
! 
io_submit - 3,45e5a000 - nr,ctx 
kslwtbctx 
kslwtectx -- Previous wait time: 688: db file async I/O submit 
! 
kslwtbctx 
io_getevents - 1,45e5a000 - minnr,ctx,timeout: $3 = {tv_sec = 600, tv_nsec = 0} 
skgfr_return64 - 3 IOs returned 
kslwtectx -- Previous wait time: 9604: db file parallel write 
59 
So….how about severely limiting OS IO capacity and see what happens?
dbwr, 
db 
file 
parallel 
write 
• Database 
writer 
— 
severely 
limited 
IO 
( 
1 
IOPS) 
io_submit - 366,45e5a000 - nr,ctx 
kslwtbctx 
kslwtectx -- Previous wait time: 1070: db file async I/O submit 
! 
kslwtbctx 
io_getevents - 100,45e5a000 - minnr,ctx,timeout: $7 = {tv_sec = 600, tv_nsec = 0} 
skgfr_return64 - 100 IOs returned 
kslwtectx -- Previous wait time: 109334845: db file parallel write 
! 
io_getevents - 128,45e5a000 - minnr,ctx,timeout: $8 = {tv_sec = 0, tv_nsec = 0} 
io_getevents - 128,45e5a000 - minnr,ctx,timeout: $9 = {tv_sec = 0, tv_nsec = 0} 
! 
io_submit - 73,45e5a000 - nr,ctx 
kslwtbctx 
kslwtectx -- Previous wait time: 486: db file async I/O submit 
60 
366 IO requests are submitted onto the OS. 
But only 100 IOs are needed to satisfy io_getevents() 
Which it does in this case… leaving outstanding IOs 
The dbwr starts issuing non-blocking calls to reap IOs! 
It seems to be always 2 if outstanding IOs remain. 
Minnr = # outstanding IOs, max 128.
dbwr, 
db 
file 
parallel 
write 
• This 
got 
me 
thinking… 
• The 
dbwr 
submits 
the 
IOs 
it 
needs 
to 
write. 
! 
• But 
it 
waits 
for 
a 
variable 
amount 
of 
IOs 
to 
finish. 
– Wait 
event 
‘db 
file 
parallel 
write’. 
– Amount 
seems 
33-­‐25% 
of 
submifed 
IOs* 
– Aher 
that, 
2 
tries 
to 
reap 
the 
remaining 
IOs* 
– Then 
either 
submit 
again, 
DFPW 
un;l 
IOs 
reaped 
or 
back 
to 
sleeping 
on 
semaphore. 
61
dbwr, 
db 
file 
parallel 
write 
• This 
means 
‘db 
file 
parallel 
write’ 
is 
not: 
– Physical 
IO 
indicator. 
– IO 
latency 
;ming 
! 
• I’ve 
come 
to 
the 
conclusion 
that 
the 
blocking 
io_getevents 
call 
for 
a 
number 
of 
IOs 
of 
the 
dbwr 
is 
an 
IO 
limiter. 
• …and 
’db 
file 
parallel 
write’ 
is 
the 
;ming 
of 
it. 
62
dbwr, 
synchronous 
IO 
• Let’s 
turn 
AIO 
off 
again. 
– To 
simulate 
this, 
I’ve 
set 
disk_asynch_io 
to 
FALSE. 
! 
• And 
set 
a 
10046/8 
trace 
and 
strace 
on 
the 
dbwr. 
• And 
issue 
the 
SQLs 
as 
before: 
– insert 
into 
followed 
by 
commit 
– alter 
system 
checkpoint 
63
dbwr, 
synchronous 
IO 
pwrite(256, "62420020726100hG1700020063R001000009U10[G170"..., 
8192, 8053121024) = 8192 
pwrite(256, "22420024603000hG1700014220T0030r0j 
30020301717"..., 8192, 7443103744) = 8192 
pwrite(256, "&2420024003000hG 
170002437221600000000000000"..., 8192, 7443054592) = 8192 
write(11, "WAIT #0: nam='db file parallel w"..., 107) = 107 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | 
| 00020 72 69 74 65 27 20 65 6c 61 3d 20 32 30 20 72 65 rite' el a= 20 re | 
| 00030 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 75 quests=3 interru | 
| 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 6f pt=0 tim eout=0 o | 
| 00050 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 39 38 bj#=-1 t im=13898 | 
| 00060 30 32 32 38 31 34 35 36 37 34 30 02281456 740 | 
write(11, "WAIT #0: nam='db file parallel w"..., 106) = 106 
| 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | 
| 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | 
| 00020 72 69 74 65 27 20 65 6c 61 3d 20 31 20 72 65 71 rite' el a= 1 req | 
| 00030 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 75 70 uests=3 interrup | 
| 00040 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 6f 62 t=0 time out=0 ob | 
| 00050 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 39 38 30 j#=-1 ti m=138980 | 
| 00060 32 32 38 31 34 35 38 34 39 32 22814584 92 | 
64 
3 pwrite() calls. This is synchronous IO! 
The db file parallel write wait event shows 3 requests! 
But why a second db file parallel write wait event?
dbwr, 
synchronous 
IO 
• There’s 
no 
‘db 
file 
async 
I/O 
submit’ 
wait 
anymore. 
– Which 
is 
good, 
because 
SIO 
has 
no 
submit 
phase. 
• The 
‘db 
file 
parallel 
write’ 
waits 
seem 
suspicious. 
– It 
seems 
like 
the 
wait 
for 
DFPW 
is 
issued 
twice. 
– Further 
inves;ga;on 
shows 
that 
it 
does. 
• My 
guess 
this 
is 
a 
bug 
in 
the 
sync. 
IO 
implementa;on. 
• Let’s 
look 
a 
level 
deeper 
and 
see 
if 
there’s 
more 
to 
see. 
65
dbwr, 
synchronous 
IO 
kslwtbctx 
semtimedop - 458755 semid, timeout: $18 = {tv_sec = 3, tv_nsec = 0} 
kslwtectx -- Previous wait time: 1239214: rdbms ipc message 
! 
pwrite64 - fd, size - 256,8192 
pwrite64 - fd, size - 256,8192 
pwrite64 - fd, size - 256,8192 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 949: db file parallel write 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 650: db file parallel write 
! 
kslwtbctx 
semtimedop - 458755 semid, timeout: $19 = {tv_sec = 1, tv_nsec = 620000000} 
66 
This is clearly the semaphore being posted: timeout=3s, 
wait time = 1239,2ms 
3 IO’s in serial using pwrite(). 
The only possibility if there isn’t AIO of course. 
Two db file parallel write (which aren’t parallel) for which 
both the begin of the waits are started AFTER the IO (!!) 
After the IOs are done, the dbwr continues sleeping.
dbwr, 
synchronous 
IO 
• Let’s 
do 
the 
same 
trick 
as 
done 
earlier: 
– In 
gdb, 
add 
“shell 
sleep 
0.1” 
to 
the 
pwrite 
call. 
– This 
makes 
the 
execu;on 
of 
this 
call 
take 
100ms 
longer. 
– To 
see 
if 
there’s 
s;ll 
some 
way 
Oracle 
;mes 
it 
properly. 
67
dbwr, 
synchronous 
IO 
kslwtbctx 
semtimedop - 458755 semid, timeout: $23 = {tv_sec = 3, tv_nsec = 0} 
kslwtectx -- Previous wait time: 92080: rdbms ipc message 
! 
pwrite64 - fd, size - 256,8192 
> shell sleep 0.1 
pwrite64 - fd, size - 256,8192 
> shell sleep 0.1 
pwrite64 - fd, size - 256,8192 
> shell sleep 0.1 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 478: db file parallel write 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 495: db file parallel write 
! 
kslwtbctx 
semtimedop - 458755 semid, timeout: $24 = {tv_sec = 2, tv_nsec = 460000000} 
68 
The 3 IOs again, each sleeps in pwrite() for 100ms (0.1s) 
Yet the ‘db file parallel write’ wait shows a waiting time of 478; 
which is 0.478ms: the timing is wrong.
dbwr, 
synchronous 
IO 
• So, 
my 
conclusion 
on 
the 
wait 
events 
for 
the 
dbwr 
with 
synchronous 
IO: 
– The 
events 
are 
not 
properly 
;med 
– It 
seems 
like 
the 
wait 
for 
DFPW 
is 
issued 
twice. 
– Further 
inves;ga;on 
shows 
that 
it 
does. 
• My 
guess 
this 
is 
a 
bug 
in 
the 
sync. 
IO 
implementa;on. 
69
dbwr: 
exadata 
• How 
does 
this 
look 
like 
on 
Exadata? 
70
dbwr: 
exadata 
kslwtbctx 
semtimedop - 3309577 semid, timeout: $389 = {tv_sec = 3, tv_nsec = 0} 
kslwtectx -- Previous wait time: 1266041: rdbms ipc message 
$390 = "oss_write" 
$391 = "oss_write" 
$392 = "oss_write" 
$393 = "oss_write" 
$394 = "oss_write" 
$395 = "oss_write" 
! 
kslwtbctx 
kslwtectx -- Previous wait time: 684: db file async I/O submit 
! 
kslwtbctx 
$396 = "oss_wait" 
$397 = "oss_wait" 
kslwtectx -- Previous wait time: 2001: db file parallel write 
$398 = "oss_wait" 
$399 = "oss_wait" 
$400 = "oss_wait" 
$401 = "oss_wait" 
! 
semctl - 3309577,23,16 - semid, semnum, cmd 
kslwtbctx 
semtimedop - 3309577 semid, timeout: $402 = {tv_sec = 1, tv_nsec = 630000000} 
kslwtectx -- Previous wait time: 1634299: rdbms ipc message 
71 
The dbwr semaphore sleep. 
The writes are issued here. 
This is not timed. 
There is the db file async I/O submit. 
Again, it doesn’t seem to time any of the typical IO calls! 
And there we got the db file parallel write. 
It does seem to always time two oss_wait() calls… 
But it looks for more IOs to finish, alike the trailing io_getevents() calls. 
I am quite sure oss_wait() is a blocking call…
Conclusion 
• Logwriter: 
– When 
idle, 
is 
sleeping 
on 
a 
semaphore/rdbms 
ipc 
message 
– Gets 
posted 
with 
semctl() 
to 
do 
work. 
– Only 
writes 
when 
it 
needs 
to 
do 
so. 
– Version 
11.2.0.3: 
two 
methods 
for 
pos;ng 
FGs: 
– Polling 
and 
post/wait. 
– Post/wait 
is 
default, 
might 
switch 
to 
polling. 
– No;fica;on 
of 
switch 
is 
in 
log 
writer 
trace 
file. 
– Polling/nanosleep() 
;me 
is 
variable. 
72
Conclusion 
• Logwriter: 
– Log 
file 
parallel 
write 
– AIO: 
two 
io_getevents() 
calls. 
– AIO: 
;me 
wai;ng 
for 
all 
lgwr 
submifed 
IOs 
to 
finish. 
– Not 
IO 
latency 
-me! 
– SIO: 
does 
not 
do 
parallel 
writes, 
but 
serial. 
– SIO: 
does 
not 
;me 
IO. 
73
Conclusion 
• Logwriter: 
– Wait 
event 
IO 
;ming: 
– All 
the 
‘* 
parallel 
read’ 
and 
‘* 
parallel 
write’ 
events 
do 
not 
seem 
to 
;me 
IO 
correctly 
with 
synchronous 
IO. 
– All 
the 
events 
which 
cover 
single 
block 
IOs 
do 
use 
synchronous 
IO 
calls, 
even 
with 
asynchronous 
IO 
set. 
– Logwriter 
writes 
a 
warning 
when 
IO 
;me 
and 
SCN 
broadcast 
ack 
;me 
exceeds 
500ms 
in 
the 
log 
writer 
trace 
file. 
– _disable_logging 
*only* 
disables 
write 
to 
logs. 
74
Conclusion 
• Database 
writer: 
– When 
idle, 
is 
sleeping 
on 
a 
semaphore/rdbms 
ipc 
message 
– Gets 
posted 
with 
semctl() 
to 
do 
work. 
– Only 
writes 
when 
it 
needs 
to 
do 
so. 
– Since 
version 
11.2.0.2, 
event 
‘db 
file 
async 
I/O 
submit’: 
– Is 
not 
shown 
with 
synchronous 
I/O. 
– Shows 
the 
actual 
amount 
of 
IOs 
submifed. 
– Does 
not 
;me 
io_submit() 
– Unknown 
what 
or 
if 
it 
;mes 
something. 
75
Conclusion 
• Database 
writer: 
– Event 
‘db 
file 
parallel 
write’: 
– Shows 
the 
minimal 
number 
io_getevents() 
waits 
for. 
– The 
number 
of 
requests 
it 
waits 
for 
varies, 
but 
mostly 
seems 
to 
be 
~ 
25-­‐33% 
of 
submifed 
IOs. 
– Aher 
the 
;med, 
blocking, 
io_getevents() 
call, 
it 
issues 
two 
non-­‐blocking 
io_getevents() 
calls 
for 
the 
remaining 
non-­‐reaped 
IOs, 
if 
any. 
– My 
current 
idea 
is 
the 
blocking 
io_getevents() 
call 
is 
an 
IO 
throfle 
mechanism. 
76
Conclusion 
• Database 
writer: 
– Event 
‘db 
file 
parallel 
write’, 
with 
synchronous 
IO: 
– pwrite64() 
calls 
are 
issued 
serially. 
– These 
are 
not 
;med. 
– The 
event 
is 
triggered 
twice. 
! 
– On 
exadata, 
two 
out 
of 
the 
total 
number 
of 
oss_wait() 
calls 
are 
;med 
with 
the 
event 
‘db 
file 
parallel 
write’. 
77
Update: 
Oracle 
12.1.0.2 
• I 
tried 
to 
present 
this 
findings 
to 
Oracle 
Support 
– With 
no 
effect… 
! 
• Luckily 
I 
could 
to 
raise 
awareness 
of 
the 
IO 
;ming 
inefficiencies 
inside 
Oracle. 
– With 
as 
result 
that 
the 
IO 
;ming 
changed 
with 
12.1.0.2. 
– I 
like 
to 
think 
I 
am 
responsible 
for 
that, 
but 
it 
might 
be 
just 
coincidence. 
78
log 
file 
parallel 
write, 
AIO 
12.1.0.2 
! 
kslwtbctx 
io_submit - 2,fe614000 - nr,ctx 
fd: 256, nbytes: 512 
fd: 256, nbytes: 512 
io_getevents (libaio) - min_nr: 2, ctx: fe614000, timeout { 0,0 } 
skgfr_return64 - 0 IOs returned 
skgfr_return64 - 32 IOs returned 
kslwtectx -> event=log file parallel write, wait_time=48873, files=2, blocks=2, 
requests=2 
! 
• Change: 
• Wait 
includes 
io_submit(). 
• Wait 
;me: 
• Time 
for 
all 
log 
writer 
IOs 
to 
finish, 
total 
latency 
;me 
of 
slowest 
IO. 
79
log 
file 
parallel 
write, 
SIO 
12.1.0.2 
! 
kslwtbctx 
pwrite64 - fd, size - 256,512 
pwrite64 - fd, size - 256,512 
kslwtectx -> event=log file parallel write, wait_time=3968, files=2, blocks=2, 
requests=2 
! 
• Change: 
• Wait 
includes 
pwrite(). 
• Wait 
;me: 
• Total 
;me 
of 
both 
pwrite() 
calls, 
executed 
sequen;ally. 
80
db 
file 
async 
IO 
submit, 
AIO 
12.1.0.2 
! 
io_submit - 1,ef59000 - nr,ctx 
fd: 256, nbytes: 8192 
kslwtbctx 
kslwtectx -> event=db file async I/O submit, wait_time=616, requests=1, interrupt=0, 
timeout=0 
!! 
• Change: 
• Nothing. 
Wait 
(s;ll) 
excludes 
io_submit(). 
• Wait 
;me: 
• ? 
81
db 
file 
parallel 
write, 
AIO 
12.1.0.2 
! 
kslwtbctx 
io_getevents (libaio) - min_nr: 1, ctx: ef59000, timeout { 600,0 } 
skgfr_return64 - 0 IOs returned 
kslwtectx -> event=db file parallel write, wait_time=15012, requests=1, interrupt=0, 
timeout=2147483647 
! 
• Change: 
• Nothing. 
• Wait 
;me: 
• Time 
spend 
in 
io_getevents() 
in 
blocking 
mode, 
wai;ng 
for 
min_nr 
IO 
requests 
to 
finish. 
82
db 
file 
parallel 
write, 
SIO 
12.1.0.2 
! 
kslwtbctx 
pwrite64 - fd, size - 256,8192 
kslwtectx -> event=db file parallel write, wait_time=59805, requests=1, interrupt=0, 
timeout=0 
kslwtbctx 
kslwtectx -> event=db file parallel write, wait_time=512, requests=1, interrupt=0, 
timeout=0 
kslwtbctx 
! 
• Change: 
• pwrite() 
calls 
are 
included 
in 
first 
wait. 
• Wait 
;me: 
• Total 
;me 
of 
pwrite() 
calls 
executed 
sequen;ally. 
Second 
wait 
s;ll 
there, 
with 
no 
IO 
calls, 
same 
# 
of 
requests. 
83
others, 
SIO 
12.1.0.2 
! 
• I 
haven’t 
spend 
a 
lot 
of 
;me 
looking 
for 
others. 
! 
• I 
have 
looked 
at 
‘direct 
path 
read’ 
however. 
! 
• This 
wait 
with 
synchronous 
IO 
now 
includes 
the 
actual 
pread64() 
call. 
84
! 
! 
! 
! 
Q 
& 
A 
85
Thanks 
& 
Links 
86 
• Enkitec 
• Tanel 
Poder, 
Mar;n 
Bach, 
Klaas-­‐Jan 
Jongsma, 
Jeremy 
Schneider, 
Karl 
Arao, 
Michael 
Fontana, 
Luca 
Canali. 
• hfp://www.pythian.com/blog/adap;ve-­‐log-­‐file-­‐ 
sync-­‐oracle-­‐please-­‐dont-­‐do-­‐that-­‐again/ 
• hfp://files.e2sn.com/slides/ 
Tanel_Poder_log_file_sync.pdf

Más contenido relacionado

La actualidad más candente

Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Kristofferson A
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingTanel Poder
 
AWR Ambiguity: Performance reasoning when the numbers don't add up
AWR Ambiguity: Performance reasoning when the numbers don't add upAWR Ambiguity: Performance reasoning when the numbers don't add up
AWR Ambiguity: Performance reasoning when the numbers don't add upJohn Beresniewicz
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneEnkitec
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTanel Poder
 
Oaktable World 2014 Kevin Closson: SLOB – For More Than I/O!
Oaktable World 2014 Kevin Closson:  SLOB – For More Than I/O!Oaktable World 2014 Kevin Closson:  SLOB – For More Than I/O!
Oaktable World 2014 Kevin Closson: SLOB – For More Than I/O!Kyle Hailey
 
Oracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aasOracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aasKyle Hailey
 
Awr1page - Sanity checking time instrumentation in AWR reports
Awr1page - Sanity checking time instrumentation in AWR reportsAwr1page - Sanity checking time instrumentation in AWR reports
Awr1page - Sanity checking time instrumentation in AWR reportsJohn Beresniewicz
 
How to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraHow to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraSveta Smirnova
 
Wait Events 10g
Wait Events 10gWait Events 10g
Wait Events 10gsagai
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder
 
Average Active Sessions RMOUG2007
Average Active Sessions RMOUG2007Average Active Sessions RMOUG2007
Average Active Sessions RMOUG2007John Beresniewicz
 
Oracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueuesOracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueuesKyle Hailey
 
Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder
 
Drilling Deep Into Exadata Performance
Drilling Deep Into Exadata PerformanceDrilling Deep Into Exadata Performance
Drilling Deep Into Exadata PerformanceEnkitec
 
Out of the box replication in postgres 9.4(pg confus)
Out of the box replication in postgres 9.4(pg confus)Out of the box replication in postgres 9.4(pg confus)
Out of the box replication in postgres 9.4(pg confus)Denish Patel
 
Using Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisUsing Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisSveta Smirnova
 

La actualidad más candente (20)

Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
Hotsos 2011: Mining the AWR repository for Capacity Planning, Visualization, ...
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention Troubleshooting
 
AWR Ambiguity: Performance reasoning when the numbers don't add up
AWR Ambiguity: Performance reasoning when the numbers don't add upAWR Ambiguity: Performance reasoning when the numbers don't add up
AWR Ambiguity: Performance reasoning when the numbers don't add up
 
Rmoug ashmaster
Rmoug ashmasterRmoug ashmaster
Rmoug ashmaster
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry Osborne
 
Troubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contentionTroubleshooting Complex Performance issues - Oracle SEG$ contention
Troubleshooting Complex Performance issues - Oracle SEG$ contention
 
Oaktable World 2014 Kevin Closson: SLOB – For More Than I/O!
Oaktable World 2014 Kevin Closson:  SLOB – For More Than I/O!Oaktable World 2014 Kevin Closson:  SLOB – For More Than I/O!
Oaktable World 2014 Kevin Closson: SLOB – For More Than I/O!
 
Oracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aasOracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aas
 
Awr1page - Sanity checking time instrumentation in AWR reports
Awr1page - Sanity checking time instrumentation in AWR reportsAwr1page - Sanity checking time instrumentation in AWR reports
Awr1page - Sanity checking time instrumentation in AWR reports
 
How to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraHow to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with Galera
 
Wait Events 10g
Wait Events 10gWait Events 10g
Wait Events 10g
 
AWR reports-Measuring CPU
AWR reports-Measuring CPUAWR reports-Measuring CPU
AWR reports-Measuring CPU
 
Tanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools shortTanel Poder - Scripts and Tools short
Tanel Poder - Scripts and Tools short
 
Average Active Sessions RMOUG2007
Average Active Sessions RMOUG2007Average Active Sessions RMOUG2007
Average Active Sessions RMOUG2007
 
Oracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueuesOracle 10g Performance: chapter 09 enqueues
Oracle 10g Performance: chapter 09 enqueues
 
Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder Oracle Scripts and Tools (2010)
 
Drilling Deep Into Exadata Performance
Drilling Deep Into Exadata PerformanceDrilling Deep Into Exadata Performance
Drilling Deep Into Exadata Performance
 
Out of the box replication in postgres 9.4(pg confus)
Out of the box replication in postgres 9.4(pg confus)Out of the box replication in postgres 9.4(pg confus)
Out of the box replication in postgres 9.4(pg confus)
 
Using Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data AnalysisUsing Apache Spark and MySQL for Data Analysis
Using Apache Spark and MySQL for Data Analysis
 

Destacado

Indexes: Structure, Splits and Free Space Management Internals
Indexes: Structure, Splits and Free Space Management InternalsIndexes: Structure, Splits and Free Space Management Internals
Indexes: Structure, Splits and Free Space Management InternalsChristian Antognini
 
Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Ontico
 
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学Hiroshi Sekiguchi
 
Dan Norris: Exadata security
Dan Norris: Exadata securityDan Norris: Exadata security
Dan Norris: Exadata securityKyle Hailey
 
OakTable World Sep14 clonedb
OakTable World Sep14 clonedb OakTable World Sep14 clonedb
OakTable World Sep14 clonedb Connor McDonald
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...Marco Gralike
 
ARC202 Architecting for High Availability - AWS re: Invent 2012
ARC202 Architecting for High Availability - AWS re: Invent 2012ARC202 Architecting for High Availability - AWS re: Invent 2012
ARC202 Architecting for High Availability - AWS re: Invent 2012Amazon Web Services
 
How to find and fix your Oracle application performance problem
How to find and fix your Oracle application performance problemHow to find and fix your Oracle application performance problem
How to find and fix your Oracle application performance problemCary Millsap
 
Oaktable World 2014 Toon Koppelaars: database constraints polite excuse
Oaktable World 2014 Toon Koppelaars: database constraints polite excuseOaktable World 2014 Toon Koppelaars: database constraints polite excuse
Oaktable World 2014 Toon Koppelaars: database constraints polite excuseKyle Hailey
 
Oracle Database on ACFS: a perfect marriage?
Oracle Database on ACFS: a perfect marriage?Oracle Database on ACFS: a perfect marriage?
Oracle Database on ACFS: a perfect marriage?Ludovico Caldara
 
Oracle Database Security: Top 10 Things You Could & Should Be Doing Differently
Oracle Database Security: Top 10 Things You Could & Should Be Doing DifferentlyOracle Database Security: Top 10 Things You Could & Should Be Doing Differently
Oracle Database Security: Top 10 Things You Could & Should Be Doing DifferentlyPythian
 
Worst Practices in Data Warehouse Design
Worst Practices in Data Warehouse DesignWorst Practices in Data Warehouse Design
Worst Practices in Data Warehouse DesignKent Graziano
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 ToolCarlos Sierra
 
DBaaS- Database as a Service in a DBAs World
DBaaS- Database as a Service in a DBAs WorldDBaaS- Database as a Service in a DBAs World
DBaaS- Database as a Service in a DBAs WorldKellyn Pot'Vin-Gorman
 
Getting Started with Managed Database Services on AWS
Getting Started with Managed Database Services on AWSGetting Started with Managed Database Services on AWS
Getting Started with Managed Database Services on AWSAmazon Web Services
 
Oracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsOracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsGokhan Atil
 
Connecting Hadoop and Oracle
Connecting Hadoop and OracleConnecting Hadoop and Oracle
Connecting Hadoop and OracleTanel Poder
 
History of database monitoring
History of database monitoringHistory of database monitoring
History of database monitoringKyle Hailey
 
DevOps and its impact
DevOps and its impactDevOps and its impact
DevOps and its impactCisco DevNet
 

Destacado (20)

Indexes: Structure, Splits and Free Space Management Internals
Indexes: Structure, Splits and Free Space Management InternalsIndexes: Structure, Splits and Free Space Management Internals
Indexes: Structure, Splits and Free Space Management Internals
 
Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)
 
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学
DB Tech Showcase 2016 - E35 - SQLチューニング総合診療所的予防医学
 
Dan Norris: Exadata security
Dan Norris: Exadata securityDan Norris: Exadata security
Dan Norris: Exadata security
 
OakTable World Sep14 clonedb
OakTable World Sep14 clonedb OakTable World Sep14 clonedb
OakTable World Sep14 clonedb
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
 
ARC202 Architecting for High Availability - AWS re: Invent 2012
ARC202 Architecting for High Availability - AWS re: Invent 2012ARC202 Architecting for High Availability - AWS re: Invent 2012
ARC202 Architecting for High Availability - AWS re: Invent 2012
 
How to find and fix your Oracle application performance problem
How to find and fix your Oracle application performance problemHow to find and fix your Oracle application performance problem
How to find and fix your Oracle application performance problem
 
Data control
Data controlData control
Data control
 
Oaktable World 2014 Toon Koppelaars: database constraints polite excuse
Oaktable World 2014 Toon Koppelaars: database constraints polite excuseOaktable World 2014 Toon Koppelaars: database constraints polite excuse
Oaktable World 2014 Toon Koppelaars: database constraints polite excuse
 
Oracle Database on ACFS: a perfect marriage?
Oracle Database on ACFS: a perfect marriage?Oracle Database on ACFS: a perfect marriage?
Oracle Database on ACFS: a perfect marriage?
 
Oracle Database Security: Top 10 Things You Could & Should Be Doing Differently
Oracle Database Security: Top 10 Things You Could & Should Be Doing DifferentlyOracle Database Security: Top 10 Things You Could & Should Be Doing Differently
Oracle Database Security: Top 10 Things You Could & Should Be Doing Differently
 
Worst Practices in Data Warehouse Design
Worst Practices in Data Warehouse DesignWorst Practices in Data Warehouse Design
Worst Practices in Data Warehouse Design
 
Introducing the eDB360 Tool
Introducing the eDB360 ToolIntroducing the eDB360 Tool
Introducing the eDB360 Tool
 
DBaaS- Database as a Service in a DBAs World
DBaaS- Database as a Service in a DBAs WorldDBaaS- Database as a Service in a DBAs World
DBaaS- Database as a Service in a DBAs World
 
Getting Started with Managed Database Services on AWS
Getting Started with Managed Database Services on AWSGetting Started with Managed Database Services on AWS
Getting Started with Managed Database Services on AWS
 
Oracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAsOracle Enterprise Manager Cloud Control 13c for DBAs
Oracle Enterprise Manager Cloud Control 13c for DBAs
 
Connecting Hadoop and Oracle
Connecting Hadoop and OracleConnecting Hadoop and Oracle
Connecting Hadoop and Oracle
 
History of database monitoring
History of database monitoringHistory of database monitoring
History of database monitoring
 
DevOps and its impact
DevOps and its impactDevOps and its impact
DevOps and its impact
 

Similar a Profiling the logwriter and database writer

Profiling the logwriter and database writer
Profiling the logwriter and database writerProfiling the logwriter and database writer
Profiling the logwriter and database writerEnkitec
 
Application Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.keyApplication Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.keyTim Bunce
 
Demystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyDemystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyJean-François Gagné
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and ArchitectureSidney Chen
 
Logging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqLogging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqDoruk Uluçay
 
Super scaling singleton inserts
Super scaling singleton insertsSuper scaling singleton inserts
Super scaling singleton insertsChris Adkin
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek PROIDEA
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackJakub Hajek
 
ELK stack at weibo.com
ELK stack at weibo.comELK stack at weibo.com
ELK stack at weibo.com琛琳 饶
 
Demystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyDemystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyJean-François Gagné
 
FPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchFPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchYutaka Yasuda
 
Riding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication StreamRiding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication StreamJean-François Gagné
 
MySQL Tuning using digested slow-logs
MySQL Tuning using digested slow-logsMySQL Tuning using digested slow-logs
MySQL Tuning using digested slow-logsBob Burgess
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamCodemotion
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRoberto Franchini
 
Experiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah WatkinsExperiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah WatkinsCeph Community
 
Fine grained monitoring
Fine grained monitoringFine grained monitoring
Fine grained monitoringIben Rodriguez
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWRpasalapudi
 
You Can't Correlate what you don't have - ArcSight Protect 2011
You Can't Correlate what you don't have - ArcSight Protect 2011You Can't Correlate what you don't have - ArcSight Protect 2011
You Can't Correlate what you don't have - ArcSight Protect 2011Scott Carlson
 

Similar a Profiling the logwriter and database writer (20)

Profiling the logwriter and database writer
Profiling the logwriter and database writerProfiling the logwriter and database writer
Profiling the logwriter and database writer
 
Application Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.keyApplication Logging in the 21st century - 2014.key
Application Logging in the 21st century - 2014.key
 
Haproxy - zastosowania
Haproxy - zastosowaniaHaproxy - zastosowania
Haproxy - zastosowania
 
Demystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyDemystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash Safety
 
Oracle Basics and Architecture
Oracle Basics and ArchitectureOracle Basics and Architecture
Oracle Basics and Architecture
 
Logging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, SeqLogging, Serilog, Structured Logging, Seq
Logging, Serilog, Structured Logging, Seq
 
Super scaling singleton inserts
Super scaling singleton insertsSuper scaling singleton inserts
Super scaling singleton inserts
 
Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek Docker Logging and analysing with Elastic Stack - Jakub Hajek
Docker Logging and analysing with Elastic Stack - Jakub Hajek
 
Docker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic StackDocker Logging and analysing with Elastic Stack
Docker Logging and analysing with Elastic Stack
 
ELK stack at weibo.com
ELK stack at weibo.comELK stack at weibo.com
ELK stack at weibo.com
 
Demystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash SafetyDemystifying MySQL Replication Crash Safety
Demystifying MySQL Replication Crash Safety
 
FPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow SwitchFPGA based 10G Performance Tester for HW OpenFlow Switch
FPGA based 10G Performance Tester for HW OpenFlow Switch
 
Riding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication StreamRiding the Binlog: an in Deep Dissection of the Replication Stream
Riding the Binlog: an in Deep Dissection of the Replication Stream
 
MySQL Tuning using digested slow-logs
MySQL Tuning using digested slow-logsMySQL Tuning using digested slow-logs
MySQL Tuning using digested slow-logs
 
Redis - for duplicate detection on real time stream
Redis - for duplicate detection on real time streamRedis - for duplicate detection on real time stream
Redis - for duplicate detection on real time stream
 
Redis for duplicate detection on real time stream
Redis for duplicate detection on real time streamRedis for duplicate detection on real time stream
Redis for duplicate detection on real time stream
 
Experiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah WatkinsExperiences building a distributed shared log on RADOS - Noah Watkins
Experiences building a distributed shared log on RADOS - Noah Watkins
 
Fine grained monitoring
Fine grained monitoringFine grained monitoring
Fine grained monitoring
 
Analyzing and Interpreting AWR
Analyzing and Interpreting AWRAnalyzing and Interpreting AWR
Analyzing and Interpreting AWR
 
You Can't Correlate what you don't have - ArcSight Protect 2011
You Can't Correlate what you don't have - ArcSight Protect 2011You Can't Correlate what you don't have - ArcSight Protect 2011
You Can't Correlate what you don't have - ArcSight Protect 2011
 

Más de Kyle Hailey

Hooks in postgresql by Guillaume Lelarge
Hooks in postgresql by Guillaume LelargeHooks in postgresql by Guillaume Lelarge
Hooks in postgresql by Guillaume LelargeKyle Hailey
 
Performance insights twitch
Performance insights twitchPerformance insights twitch
Performance insights twitchKyle Hailey
 
Successfully convince people with data visualization
Successfully convince people with data visualizationSuccessfully convince people with data visualization
Successfully convince people with data visualizationKyle Hailey
 
Virtual Data : Eliminating the data constraint in Application Development
Virtual Data :  Eliminating the data constraint in Application DevelopmentVirtual Data :  Eliminating the data constraint in Application Development
Virtual Data : Eliminating the data constraint in Application DevelopmentKyle Hailey
 
DBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentDBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentKyle Hailey
 
Accelerate Develoment with VIrtual Data
Accelerate Develoment with VIrtual DataAccelerate Develoment with VIrtual Data
Accelerate Develoment with VIrtual DataKyle Hailey
 
Delphix and Pure Storage partner
Delphix and Pure Storage partnerDelphix and Pure Storage partner
Delphix and Pure Storage partnerKyle Hailey
 
Martin Klier : Volkswagen for Oracle Guys
Martin Klier : Volkswagen for Oracle GuysMartin Klier : Volkswagen for Oracle Guys
Martin Klier : Volkswagen for Oracle GuysKyle Hailey
 
Data as a Service
Data as a Service Data as a Service
Data as a Service Kyle Hailey
 
Data Virtualization: Revolutionizing data cloning
Data Virtualization: Revolutionizing data cloningData Virtualization: Revolutionizing data cloning
Data Virtualization: Revolutionizing data cloning Kyle Hailey
 
BGOUG "Agile Data: revolutionizing database cloning'
BGOUG  "Agile Data: revolutionizing database cloning'BGOUG  "Agile Data: revolutionizing database cloning'
BGOUG "Agile Data: revolutionizing database cloning'Kyle Hailey
 
Denver devops : enabling DevOps with data virtualization
Denver devops : enabling DevOps with data virtualizationDenver devops : enabling DevOps with data virtualization
Denver devops : enabling DevOps with data virtualizationKyle Hailey
 
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]Kyle Hailey
 
Jonathan Lewis explains Delphix
Jonathan Lewis explains Delphix Jonathan Lewis explains Delphix
Jonathan Lewis explains Delphix Kyle Hailey
 
DevOps, Databases and The Phoenix Project UGF4042 from OOW14
DevOps, Databases and The Phoenix Project UGF4042 from OOW14DevOps, Databases and The Phoenix Project UGF4042 from OOW14
DevOps, Databases and The Phoenix Project UGF4042 from OOW14Kyle Hailey
 
Delphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisDelphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisKyle Hailey
 
Kscope 14 Presentation : Virtual Data Platform
Kscope 14 Presentation : Virtual Data PlatformKscope 14 Presentation : Virtual Data Platform
Kscope 14 Presentation : Virtual Data PlatformKyle Hailey
 
Data Virtualization: revolutionizing database cloning
Data Virtualization: revolutionizing database cloningData Virtualization: revolutionizing database cloning
Data Virtualization: revolutionizing database cloningKyle Hailey
 
Delphix and DBmaestro
Delphix and DBmaestroDelphix and DBmaestro
Delphix and DBmaestroKyle Hailey
 

Más de Kyle Hailey (20)

Hooks in postgresql by Guillaume Lelarge
Hooks in postgresql by Guillaume LelargeHooks in postgresql by Guillaume Lelarge
Hooks in postgresql by Guillaume Lelarge
 
Performance insights twitch
Performance insights twitchPerformance insights twitch
Performance insights twitch
 
Successfully convince people with data visualization
Successfully convince people with data visualizationSuccessfully convince people with data visualization
Successfully convince people with data visualization
 
Virtual Data : Eliminating the data constraint in Application Development
Virtual Data :  Eliminating the data constraint in Application DevelopmentVirtual Data :  Eliminating the data constraint in Application Development
Virtual Data : Eliminating the data constraint in Application Development
 
DBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application DevelopmentDBTA Data Summit : Eliminating the data constraint in Application Development
DBTA Data Summit : Eliminating the data constraint in Application Development
 
Accelerate Develoment with VIrtual Data
Accelerate Develoment with VIrtual DataAccelerate Develoment with VIrtual Data
Accelerate Develoment with VIrtual Data
 
Delphix and Pure Storage partner
Delphix and Pure Storage partnerDelphix and Pure Storage partner
Delphix and Pure Storage partner
 
Martin Klier : Volkswagen for Oracle Guys
Martin Klier : Volkswagen for Oracle GuysMartin Klier : Volkswagen for Oracle Guys
Martin Klier : Volkswagen for Oracle Guys
 
What is DevOps
What is DevOpsWhat is DevOps
What is DevOps
 
Data as a Service
Data as a Service Data as a Service
Data as a Service
 
Data Virtualization: Revolutionizing data cloning
Data Virtualization: Revolutionizing data cloningData Virtualization: Revolutionizing data cloning
Data Virtualization: Revolutionizing data cloning
 
BGOUG "Agile Data: revolutionizing database cloning'
BGOUG  "Agile Data: revolutionizing database cloning'BGOUG  "Agile Data: revolutionizing database cloning'
BGOUG "Agile Data: revolutionizing database cloning'
 
Denver devops : enabling DevOps with data virtualization
Denver devops : enabling DevOps with data virtualizationDenver devops : enabling DevOps with data virtualization
Denver devops : enabling DevOps with data virtualization
 
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]
Oracle Open World 2014: Lies, Damned Lies, and I/O Statistics [ CON3671]
 
Jonathan Lewis explains Delphix
Jonathan Lewis explains Delphix Jonathan Lewis explains Delphix
Jonathan Lewis explains Delphix
 
DevOps, Databases and The Phoenix Project UGF4042 from OOW14
DevOps, Databases and The Phoenix Project UGF4042 from OOW14DevOps, Databases and The Phoenix Project UGF4042 from OOW14
DevOps, Databases and The Phoenix Project UGF4042 from OOW14
 
Delphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan LewisDelphix for DBAs by Jonathan Lewis
Delphix for DBAs by Jonathan Lewis
 
Kscope 14 Presentation : Virtual Data Platform
Kscope 14 Presentation : Virtual Data PlatformKscope 14 Presentation : Virtual Data Platform
Kscope 14 Presentation : Virtual Data Platform
 
Data Virtualization: revolutionizing database cloning
Data Virtualization: revolutionizing database cloningData Virtualization: revolutionizing database cloning
Data Virtualization: revolutionizing database cloning
 
Delphix and DBmaestro
Delphix and DBmaestroDelphix and DBmaestro
Delphix and DBmaestro
 

Último

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durbanmasabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...Nitya salvi
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburgmasabamasaba
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 

Último (20)

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...Chinsurah Escorts ☎️8617697112  Starting From 5K to 15K High Profile Escorts ...
Chinsurah Escorts ☎️8617697112 Starting From 5K to 15K High Profile Escorts ...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 

Profiling the logwriter and database writer

  • 1. This is the font size used for showing screen output. Be sure this is readable for you. ©2013 Enkitec Profiling the logwriter and database writer Frits Hoogland Oaktableworld 2014 1 This is the font used to accentuate text/console output. Make sure this is readable for you too!
  • 2. `whoami` • Frits Hoogland • Working with Oracle products since 1996 ! • Blog: hEp://fritshoogland.wordpress.com • TwiEer: @fritshoogland • Email: frits.hoogland@enkitec.com • Oracle ACE Director • OakTable Member 2
  • 3. Goals & prerequisites • Goal: learn about typical behaviour of both lgwr and dbwr, both visible (wait events) and inner-­‐ working. ! • Prerequisites: – Understanding of (internal) execu[on of C programs. – Understanding of Oracle tracing mechanisms. – Understanding of interac[on between procs. with the Oracle database. 3
  • 4. Test system • The tests and inves[ga[on is done in a VM: – Host: Mac OSX 10.9 / VMWare Fusion 6.0.2. – VM: Oracle Linux x86_64 6u5 (UEK3 3.8.13). – Oracle Grid 11.2.0.4 with ASM/External redundancy. – Oracle database 11.2.0.4. ! – Unless specified otherwise. 4
  • 5. Logwriter, concepts guide • From the concepts guide: – The lgwr manages the redolog buffer ! – The lgwr writes all redo entries that have been copied in the buffer since the last [me it wrote when: • User commits. • Logswitch. • Three seconds since last write. • Buffer 1/3th full or 1MB filled. • dbwr must write modified (‘dirty’) buffers. 5
  • 6. Logwriter, idle • The general behaviour of the log writer can easily be shown by pugng a 10046/8 on lgwr: ! SYS@v11204 AS SYSDBA> @who … 130,1,@1 2243 oracle@ol65-ora11204-asm.local (LGWR) … SYS@v11204 AS SYSDBA> oradebug setospid 2243 Oracle pid: 11, Unix process pid: 2243, image: oracle@ol65-ora11204-asm.local (LGWR) SYS@v11204 AS SYSDBA> oradebug unlimit Statement processed. SYS@v11204 AS SYSDBA> oradebug event 10046 trace name context forever, level 8; Statement processed. 6
  • 7. Logwriter, idle • The 10046/8 trace shows: ! *** 2013-12-18 14:12:32.479 WAIT #0: nam='rdbms ipc message' ela= 2999925 timeout=300 p2=0 p3=0 obj#=-1 tim=1387372352479352 ! *** 2013-12-18 14:12:35.479 WAIT #0: nam='rdbms ipc message' ela= 3000075 timeout=300 p2=0 p3=0 obj#=-1 tim=1387372355479531 ! *** 2013-12-18 14:12:38.479 WAIT #0: nam='rdbms ipc message' ela= 2999755 timeout=300 p2=0 p3=0 obj#=-1 tim=1387372358479381 ! *** 2013-12-18 14:12:41.479 WAIT #0: nam='rdbms ipc message' ela= 3000021 timeout=300 p2=0 p3=0 obj#=-1 tim=1387372361479499 7
  • 8. Logwriter, idle • “rdbms ipc message” indicates a sleep/idle event – There isn’t an indica[on lgwr writes something: ! semtimedop(327683, {{15, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) getrusage(RUSAGE_SELF, {ru_utime={0, 84000}, ru_stime={0, 700000}, ...}) = 0 getrusage(RUSAGE_SELF, {ru_utime={0, 84000}, ru_stime={0, 700000}, ...}) = 0 times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 times({tms_utime=8, tms_stime=70, tms_cutime=0, tms_cstime=0}) = 431286151 semtimedop(327683, {{15, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) …etc… 8
  • 9. Logwriter, idle • It does look in the /proc filesystem to the ‘stat’ file of a certain process: ! open("/proc/2218/stat", O_RDONLY) = 21 read(21, "2218 (oracle) S 1 2218 2218 0 -1"..., 999) = 209 close(21) ! • It does so every 20th [me (20*3)= 60 sec. • The PID is PMON. 9
  • 10. Logwriter, idle • Recap: – In an idle database. – The lgwr sleeps on a semaphore for 3 seconds. • Then wakes up, and sets up the semaphore/sleep again. • Processes sleeping on a semaphore do not spend CPU – Every minute, lgwr reads pmon's process stats. – lgwr doesn’t write if there’s no need. • But what happens when we insert a row of data, and commit that? 10
  • 11. Logwriter, commit TS@//localhost/v11204 > insert into t values ( 1, 'aaaa', 'bbbb' ); ! 1 row created. ! TS@//localhost/v11204 > commit; ! Commit complete. 11
  • 12. Logwriter, commit -­‐ expected 12 time semctl(458755, 15, SETVAL, 0x7fff00000001) foreground logwriter semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) semtimedop(458755, {{33, -1, 0}}, 1, {0, 100000000}) semctl(458755, 33, SETVAL, 0x1) commit; io_submit(139981752844288, 1, {{0x7f5008e23480, 0, 1, 0, 256}}) io_getevents(139981752844288, 1, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {600, 0})
  • 13. Logwriter, commit -­‐ actual 13 time semctl(458755, 15, SETVAL, 0x7fff00000001) commit; foreground logwriter semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) io_submit(139981752844288, 1, {{0x7f5008e23480, 0, 1, 0, 256}}) no ‘log file sync’ wait! No semtimedop() No semctl() io_getevents(139981752844288, 1, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {600, 0})
  • 14. Logwriter, commit • Inves[ga[on shows: – Foreground scans log writer progress up to 3 [mes. • kcrf_commit_force() > kcscur3() ! – If its data* in the redo log buffer is not wriEen: • It no[fies the lgwr that it is going to sleep on a semaphore. • sem[medop() for 100ms, un[l posted by lgwr. – If its data* has been wriEen: • No need to wait on it. • No ‘log file sync’ wait. 14
  • 15. Logwriter, commit • Wait!!! – This (no log file sync) turned out to be an edge case. • I traced the kcrf_commit_force() and kcscur3() calls using breaks in gdb. ! – In normal situa[ons, the wait will appear. • Depending on log writer and FG progress. • The sem[medop() call in the FG can be absent. – As a result, lgwr will not semctl() 15
  • 16. Logwriter, commit -­‐ post-­‐wait semtimedop(458755, {{33, -1, 0}}, 1, {0, 100000000}) 16 time semctl(458755, 15, SETVAL, 0x7fff00000001) commit; foreground logwriter kcrf_commit_force() kcscur3() log file sync Grayed means: optional log rdbms ipc message file parallel write semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) io_submit(139981752844288, 1, {{0x7f5008e23480, 0, 1, 0, 256}}) io_getevents(139981752844288, 1, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {600, 0})
  • 17. adap[ve log file sync • Feature of Oracle 11.2 – Parameter '_use_adap[ve_log_file_sync' • Set to FALSE up to 11.2.0.2 • Set to TRUE star[ng from 11.2.0.3 • Third value ‘POLLING_ONLY’ – Makes Oracle adap[vely switch between ‘post-­‐wait’ and polling. – The log writer writes a no[fica[on in its logfile if it switches between modes (if param = ‘TRUE’) 17
  • 18. Logwriter, commit -­‐ polling 18 time semctl(458755, 15, SETVAL, 0x7fff00000001) commit; foreground logwriter kcrf_commit_force kcscur3 log rdbms ipc message file parallel write semtimedop(458755, {{15, -1, 0}}, 1, {3, 0}) io_submit(139981752844288, 1, {{0x7f5008e23480, 0, 1, 0, 256}}) io_getevents(139981752844288, 1, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {600, 0}) log file sync nanosleep({0, 9409000}, 0x7fff64725480) nanosecs; varies
  • 19. Logwriter, post-­‐wait vs. polling – No wait event ‘log file sync’ if: • Lgwr was able to flush the commiEed data before the foreground has issued kcscur3() 2/3 [mes in kcrf_commit_force(). – If not, the foreground starts a ‘log file sync’ wait. • If in “post-­‐wait” mode (default), it will record it’s wai[ng state in the post-­‐wait queue, sleep in sem[medop() for 100ms at a [me, wai[ng to be posted by lgwr. • If in “polling” mode, it will sleep in nanosleep() for computed [me*, then check lgwr progress, if lgwr write has progressed beyond its commiEed data SCN: end wait, else start sleeping in nanosleep() again. 19
  • 20. Logwriter • The main task of lgwr is to flush data in the logbuffer to disk. – The lgwr is idle when wai[ng on ‘rdbms ipc message’. – There are two main* indicators of lgwr business: • CPU [me. • Wait event ‘log file parallel write’. ! ! • The lgwr needs to be able to get onto the CPU in order to do process! 20
  • 21. Logwriter -­‐ idle 21 logwriter rdbms ipc message rdbms ipc message rdbms ipc message semtimedop(458755, {{15, -1, 0}}, 1, {3, 0})
  • 22. Logwriter -­‐ idle 22 rdbms ipc message rdbms ipc message logwriter
  • 23. Logwriter -­‐ idle 23 logwriter Idle mode latch gets: ‘messages’ ‘mostly latch-free SCN’ ‘lgwr LWN SCN’ ‘KTF sga latch’ ‘redo allocation’ ‘messages’
  • 24. Logwriter -­‐ wri[ng 24 logwriter Write mode latch gets and frees: ‘messages’ ‘mostly latch-free SCN’ ‘lgwr LWN SCN’ ‘KTF sga latch’ ‘redo allocation’ ‘messages’ ‘redo writing’
  • 25. Logwriter -­‐ wri[ng 25 logwriter log file parallel write io_submit(139981752844288, n, {{0x7f5008e23480, 0, 1, 0, 256}}) io_getevents(139981752844288, n, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {0, 0}) io_getevents(139981752844288, n, 128, {{0x7f5008e23480, 0x7f5008e23480, 3584, 0}}, {600, 0}) With the linux ‘strace’ utility, the non-blocking syscall is visible OR the blocking one syscall is visible.
  • 26. • The Logwriter -­‐ wri[ng event ‘log file parallel write’ is an indicator of IO wait [me for the lgwr. – NOT IO latency [me!! 26 io_submit() io_getevents() io_getevents() log file parallel write: 9.85ms real IO time: 7ms real IO time: 10ms
  • 27. Logwriter wait events • rdbms ipc message – [meout: 300 (cen[seconds; 3 seconds). – process sleeping ~ 3 seconds on semaphore. ! • log file parallel write – files: number of log file members. – blocks: total number of log blocks wriEen. – requests: ? • I’ve seen this differ from the actual numer of IO requests. 27
  • 28. Logwriter wait events • Let’s switch the database to synchronous IO. – Some plaxorms have difficulty with AIO (HPUX!) – Got to check if your config does use AIO. • Found out by accident that ASM+NFS has no AIO by default. ! – Good to understand what the absence of AIO means. ! • If you can’t use AIO today, you are doing it WRONG! 28
  • 29. log file parallel write 29 timeout = 3s disk_asynch_io=FALSE (no AIO) ! kslwtbctx semtimedop - 458755 semid, timeout: $62 = {tv_sec = 3, tv_nsec = 0} kslwtectx -- Previous wait time: 584208: rdbms ipc message ! pwrite64 - fd, size - 256,512 pwrite64 - fd, size - 256,512 ! kslwtbctx kslwtectx -- Previous wait time: 782: log file parallel write ! kslwtbctx semtimedop - 458755 semid, timeout: $63 = {tv_sec = 2, tv_nsec = 310000000} kslwtectx -- Previous wait time: 2315982: rdbms ipc message wait time = 0.584208s => semaphore is posted! two sequential writes (two logfiles) the wait begins AFTER the write (!) it’s also suspiciously fast (0.8ms)
  • 30. log file parallel write 30 disk_asynch_io=FALSE (no AIO) Let’s add 100ms to the IOs (shell sleep 0.1) ! kslwtbctx semtimedop - 458755 semid, timeout: $3 = {tv_sec = 2, tv_nsec = 900000000} kslwtectx -- Previous wait time: 2905568: rdbms ipc message ! pwrite64 - fd, size - 256,512 >sleep 0.1 pwrite64 - fd, size - 256,512 >sleep 0.1 ! kslwtbctx kslwtectx -- Previous wait time: 545: log file parallel write Two writes again. In the break a sleep of 100ms is added. This should make the timing at least 200’000 The timing is 545 (0.5ms): timing is off.
  • 31. log file parallel write • Conclusion: – For at least Oracle version 11.2. – When synchronous IO (pwrite64()) is issued. • disk_asynch_io = FALSE (ASM) • filesystemio_op[ons != “setall” or “asynch” – The wait event does not [me the IO requests. ! • How about the other log writer wait events? 31
  • 32. control file sequen[al read 32 disk_asynch_io=FALSE (no AIO) ! kslwtbctx pread64 - fd, size - 256,16384 >sleep 0.1 kslwtectx -- Previous wait time: 100323: control file sequential read ! This event is correctly [med.
  • 33. control file parallel write 33 disk_asynch_io=FALSE (no AIO) ! pwrite64 - fd, size - 256,16384 >sleep 0.1 kslwtbctx kslwtectx -- Previous wait time: 705: control file parallel write ! This event is incorrectly [med!
  • 34. log file single write 34 disk_asynch_io=FALSE (no AIO) ! kslwtbctx pwrite64 - fd, size - 256,512 >sleep 0.1 kslwtectx -- Previous wait time: 104594: log file single write ! This event is correctly [med.
  • 35. Logwriter wait events logswitch • Some of these waits typically show up during a logswitch. – This are all the waits which are normally seen: • os thread startup (semctl()-­‐sem[medop()) • control file sequen[al read (pread64()) • control file parallel write (io_submit()-­‐io_getevents()) • log file sequen[al read (pread64()) • log file single write (pwrite64()) • KSV master wait (semctl() post to dbwr) ! • This is with AIO enabled! 35
  • 36. Logwriter, [meout message • Warning: ! Warning: log write elapsed time 523ms, size 2760KB ! • Printed in logwriter tracefile (NOT alert.log) • This is instrumented with the ‘log write parallel write’ event. • Threshold set with parameter: – _side_channel_batch_[meout_ms (500ms) 36
  • 37. Logwriter, [meout message • Warning (RAC!): ! Warning: log write broadcast wait time 2913ms (SCN 0xb86.cd638134) ! • Printed in logwriter tracefile (NOT alert.log) • This is instrumented with the ‘wait for scn ack’ event. 37
  • 38. Logwriter: disable logging • The “forbidden switch”: _disable_logging – Do not use this for anything else than tests! ! • Everything is done the same — no magic – Except the write by the lgwr to the logfiles – No ‘log file parallel write’ – Redo/control/data files are synced with shut normal ! • A way to test if lgwr IO influences db processing 38
  • 39. Logwriter: exadata • How does this look like on Exadata? 39
  • 40. Logwriter: exadata kslwtbctx semtimedop - 3309577 semid, timeout: $24 = {tv_sec = 2, tv_nsec = 970000000} kslwtectx -- Previous wait time: 2973630: rdbms ipc message ! $25 = "oss_write" $26 = "oss_write" $27 = "oss_write" $28 = "oss_write" ! kslwtbctx $29 = "oss_wait" $30 = "oss_wait" $31 = "oss_wait" $32 = "oss_wait" kslwtectx -- Previous wait time: 2956: log file parallel write ! kslwtbctx semtimedop - 3309577 semid, timeout: $33 = {tv_sec = 3, tv_nsec = 0} kslwtectx -- Previous wait time: 3004075: rdbms ipc message 40 The dbwr semaphore sleep. The writes are issued here. There is no io_submit like wait. This is not timed. The wait is log file parallel write, identical to non-exadata. It seems to wait for all issued IOs
  • 41. Database writer • From the Oracle 11.2 concepts guide: – The DBWn process writes dirty buffers to disk under the following condi[ons: • When a server process cannot find a clean reusable buffer a|er scanning a threshold of buffers, it signals DBWn to write. DBWn writes dirty buffers to disk asynchronously if possible while performing other processing. • DBWn periodically writes buffers to advance the checkpoint, which is the posi[on in the redo thread from which instance recovery begins. The log posi[on of the checkpoint is determined by the oldest dirty buffer in the buffer cache. 41
  • 42. Database writer, idle • The 10046/8 trace shows: ! *** 2013-12-31 00:45:51.088 WAIT #0: nam='rdbms ipc message' ela= 3006219 timeout=300 p2=0 p3=0 obj#=-1 tim=1388447151086891 ! *** 2013-12-31 00:45:54.142 WAIT #0: nam='rdbms ipc message' ela= 3005237 timeout=300 p2=0 p3=0 obj#=-1 tim=1388447154140873 ! *** 2013-12-31 00:45:57.197 WAIT #0: nam='rdbms ipc message' ela= 3005258 timeout=300 p2=0 p3=0 obj#=-1 tim=1388447157195828 ! *** 2013-12-31 00:46:00.255 WAIT #0: nam='rdbms ipc message' ela= 3005716 timeout=300 p2=0 p3=0 obj#=-1 tim=1388447160253960 42
  • 43. Database writer, idle • “rdbms ipc message” indicates a sleep/idle event – There isn’t an indica[on dbw0 writes something: ! semtimedop(983043, {{14, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) getrusage(RUSAGE_SELF, {ru_utime={0, 31000}, ru_stime={0, 89000}, ...}) = 0 getrusage(RUSAGE_SELF, {ru_utime={0, 31000}, ru_stime={0, 89000}, ...}) = 0 times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 times({tms_utime=3, tms_stime=8, tms_cutime=0, tms_cstime=0}) = 431915044 semtimedop(983043, {{14, -1, 0}}, 1, {3, 0}) = -1 EAGAIN (Resource temporarily unavailable) …etc… 43
  • 44. Database writer, idle • It does look in the /proc filesystem to the ‘stat’ file of a certain process: ! open("/proc/2218/stat", O_RDONLY) = 21 read(21, "2218 (oracle) S 1 2218 2218 0 -1"..., 999) = 209 close(21) ! • It does so every 20th [me (20*3)= 60 sec. • The PID is PMON. 44
  • 45. Database writer, idle • Recap: – In an idle database. – The dbwr sleeps on a semaphore for 3 seconds. • Then wakes up, and sets up the semaphore/sleep again. • Processes sleeping on a semaphore do not spend CPU – Every minute, dbwr reads pmon's process stats. – dbwr doesn’t write if there’s no need. 45
  • 46. Database writer, force write • We can force the dbwr to write: – Dirty some blocks (insert a row into a table). – Force a thread checkpoint (alter system checkpoint). ! ! ! ! ! * There are mul[ple ways, this is one of them. 46
  • 47. Database writer, force write 10046/8 trace: *** 2014-01-03 03:37:47.473 WAIT #0: nam='rdbms ipc message' ela= 3000957 timeout=300 p2=0 p3=0 obj#=-1 tim=1388716667473024 ! *** 2014-01-03 03:37:49.735 WAIT #0: nam='rdbms ipc message' ela= 2261867 timeout=300 p2=0 p3=0 obj#=-1 tim=1388716669735046 WAIT #0: nam='db file async I/O submit' ela= 0 requests=3 interrupt=0 timeout=0 obj#=-1 tim=1388716669735493 WAIT #0: nam='db file parallel write' ela= 21 requests=1 interrupt=0 timeout=2147483647 obj#=-1 tim=1388716669735566 ! *** 2014-01-03 03:37:50.465 WAIT #0: nam='rdbms ipc message' ela= 729110 timeout=73 p2=0 p3=0 obj#=-1 tim=1388716670464967 47 elapsed time = 2.26 sec. So the dbwr is posted! db file async I/O submit?! It looks like the io_submit() call is instrumented for the dbwr! But what does ‘requests=3’ mean for a single row update checkpoint? And the write, via the event ‘db file parallel write’.
  • 48. dbwr, sql_trace + strace • Let’s take a look at the Oracle wait events, together with the actual system calls. ! • That is: – Segng a 10046/8 event for trace and waits. – Execute strace with ‘-­‐e write=all -­‐e all’ 48
  • 49. dbwr, sql_trace + strace io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | | 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | | 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | | 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | | 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | | 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, {0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 0}}, {600, 0}) = 3 write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | | 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | | 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | | 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | | 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | | 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | | 00070 34 35 37 39 4579 | 49
  • 50. dbwr, sql_trace + strace io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | | 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | | 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | | 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | | 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | | 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, {0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 0}}, {600, 0}) = 3 write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | | 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | | 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | | 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | | 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | | 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | | 00070 34 35 37 39 4579 | 50
  • 51. dbwr, sql_trace + strace io_submit(140195085938688, 3, {{0x7f81b622ab10, 0, 1, 0, 256}, {0x7f81b622a8a0, 0, 1, 0, 256}, {0x7f81b622a630, 0, 1, 0, 256}}) = 3 write(13, "WAIT #0: nam='db file async I/O "..., 108) = 108 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 61 73 79 6e 63 20 49 2f 4f 20 file as ync I/O | | 00020 73 75 62 6d 69 74 27 20 65 6c 61 3d 20 31 20 72 submit' ela= 1 r | | 00030 65 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 equests= 3 interr | | 00040 75 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 upt=0 ti meout=0 | | 00050 6f 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 38 obj#=-1 tim=1388 | | 00060 39 37 37 36 35 31 38 30 34 32 36 31 97765180 4261 | io_getevents(140195085938688, 1, 128, {{0x7f81b622ab10, 0x7f81b622ab10, 8192, 0}, {0x7f81b622a8a0, 0x7f81b622a8a0, 8192, 0}, {0x7f81b622a630, 0x7f81b622a630, 8192, 0}}, {600, 0}) = 3 write(13, "WAIT #0: nam='db file parallel w"..., 116) = 116 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | | 00020 72 69 74 65 27 20 65 6c 61 3d 20 35 38 20 72 65 rite' el a= 58 re | | 00030 71 75 65 73 74 73 3d 31 20 69 6e 74 65 72 72 75 quests=1 interru | | 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 32 31 34 pt=0 tim eout=214 | | 00050 37 34 38 33 36 34 37 20 6f 62 6a 23 3d 2d 31 20 7483647 obj#=-1 | | 00060 74 69 6d 3d 31 33 38 38 39 37 37 36 35 31 38 30 tim=1388 97765180 | | 00070 34 35 37 39 4579 | 51 This is the MINIMAL number of requests to reap before successful. (min_nr - see man io_getevents) ? ? ? The timeout for io_getevents() is set to 600 seconds. struct timespec { sec, nsec } Despite only needing 1 request, this call returned all 3. This information is NOT EXTERNALISED (!!)
  • 52. dbwr, db file async I/O submit • Let’s take a look at the what the documenta;on says about “db file async I/O submit”: ! 52 (That’s right…nothing) !
  • 53. dbwr, db file async I/O submit • My Oracle Support on “db file async I/O submit”: ! 'db file async I/O submit' when FILESYSTEMIO_OPTIONS=NONE [Article ID 1274737.1] How To Address High Wait Times for the 'Direct Path Write Temp ' Wait Event [Article ID 1576956.1] ! • Both don’t describe what this event is. • 1st note is only for filesystemio_op;ons=NONE and describes the event not being tracked prior to version 11.2.0.2. 53
  • 54. dbwr, db file async I/O submit • So the ques;on is: ! – What DOES the event “db file async I/O submit” mean? ! 54 • The obvious answer is: – Instrumenta;on of the io_submit() call. • My answer is: – Don’t know. – But NOT the instrumenta;on of io_submit().
  • 55. dbwr, db file async I/O submit • This is a trace of the relevant C func;ons: ! kslwtbctx kslwtectx -- Previous wait time: 236317: rdbms ipc message ! io_submit - 3,45e5a000 - nr,ctx kslwtbctx kslwtectx -- Previous wait time: 688: db file async I/O submit ! kslwtbctx io_getevents - 1,45e5a000 - minnr,ctx,timeout: $3 = {tv_sec = 600, tv_nsec = 0} skgfr_return64 - 3 IOs returned kslwtectx -- Previous wait time: 9604: db file parallel write 55 Waiting on a semaphore to be posted. io_submit() for 3 IOs The begin of the wait starts AFTER the io_submit()? io_getevevents() is properly timed. min_nr=1, got 3 IOs
  • 56. dbwr, db file async I/O submit • Trace with sleep 0.1 in the break on io_submit() ! kslwtbctx kslwtectx -- Previous wait time: 385794: rdbms ipc message ! io_submit - 3,45e5a000 - nr,ctx > sleep 0.1 kslwtbctx kslwtectx -- Previous wait time: 428: db file async I/O submit ! kslwtbctx io_getevents - 1,45e5a000 - minnr,ctx,timeout: $37 = {tv_sec = 600, tv_nsec = 0} skgfr_return64 - 3 IOs returned kslwtectx -- Previous wait time: 8053: db file parallel write 56 Waiting on a semaphore to be posted. io_submit() for 3 IOs + sleep of 100’000 Wait time too low. io_submit() is not timed.
  • 57. dbwr, db file parallel write • Let’s look at the “db file parallel write” event. 57
  • 58. dbwr, db file parallel write • Descrip;on from the Reference Guide: ! db file parallel write This event occurs in the DBWR. It indicates that the DBWR is performing a parallel write to files and blocks. When the last I/O has gone to disk, the wait ends. Wait Time: Wait until all of the I/Os are completed Parameter Description requests: This indicates the total number of I/O requests, which will be the same as blocks interrupt: timeout: This indicates the timeout value in hundredths of a second to wait for the I/O completion. 58 Correct Correct…but only if AIO is enabled. Incorrect Incorrect Incorrect Empty? Probably incorrect. Or does a timeout of 2’147’483’647 /100/60/60/24= 248.55 days Make sense to *anybody*?
  • 59. dbwr, db file parallel write • Recap of previous traced calls: ! kslwtbctx kslwtectx -- Previous wait time: 236317: rdbms ipc message ! io_submit - 3,45e5a000 - nr,ctx kslwtbctx kslwtectx -- Previous wait time: 688: db file async I/O submit ! kslwtbctx io_getevents - 1,45e5a000 - minnr,ctx,timeout: $3 = {tv_sec = 600, tv_nsec = 0} skgfr_return64 - 3 IOs returned kslwtectx -- Previous wait time: 9604: db file parallel write 59 So….how about severely limiting OS IO capacity and see what happens?
  • 60. dbwr, db file parallel write • Database writer — severely limited IO ( 1 IOPS) io_submit - 366,45e5a000 - nr,ctx kslwtbctx kslwtectx -- Previous wait time: 1070: db file async I/O submit ! kslwtbctx io_getevents - 100,45e5a000 - minnr,ctx,timeout: $7 = {tv_sec = 600, tv_nsec = 0} skgfr_return64 - 100 IOs returned kslwtectx -- Previous wait time: 109334845: db file parallel write ! io_getevents - 128,45e5a000 - minnr,ctx,timeout: $8 = {tv_sec = 0, tv_nsec = 0} io_getevents - 128,45e5a000 - minnr,ctx,timeout: $9 = {tv_sec = 0, tv_nsec = 0} ! io_submit - 73,45e5a000 - nr,ctx kslwtbctx kslwtectx -- Previous wait time: 486: db file async I/O submit 60 366 IO requests are submitted onto the OS. But only 100 IOs are needed to satisfy io_getevents() Which it does in this case… leaving outstanding IOs The dbwr starts issuing non-blocking calls to reap IOs! It seems to be always 2 if outstanding IOs remain. Minnr = # outstanding IOs, max 128.
  • 61. dbwr, db file parallel write • This got me thinking… • The dbwr submits the IOs it needs to write. ! • But it waits for a variable amount of IOs to finish. – Wait event ‘db file parallel write’. – Amount seems 33-­‐25% of submifed IOs* – Aher that, 2 tries to reap the remaining IOs* – Then either submit again, DFPW un;l IOs reaped or back to sleeping on semaphore. 61
  • 62. dbwr, db file parallel write • This means ‘db file parallel write’ is not: – Physical IO indicator. – IO latency ;ming ! • I’ve come to the conclusion that the blocking io_getevents call for a number of IOs of the dbwr is an IO limiter. • …and ’db file parallel write’ is the ;ming of it. 62
  • 63. dbwr, synchronous IO • Let’s turn AIO off again. – To simulate this, I’ve set disk_asynch_io to FALSE. ! • And set a 10046/8 trace and strace on the dbwr. • And issue the SQLs as before: – insert into followed by commit – alter system checkpoint 63
  • 64. dbwr, synchronous IO pwrite(256, "62420020726100hG1700020063R001000009U10[G170"..., 8192, 8053121024) = 8192 pwrite(256, "22420024603000hG1700014220T0030r0j 30020301717"..., 8192, 7443103744) = 8192 pwrite(256, "&2420024003000hG 170002437221600000000000000"..., 8192, 7443054592) = 8192 write(11, "WAIT #0: nam='db file parallel w"..., 107) = 107 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | | 00020 72 69 74 65 27 20 65 6c 61 3d 20 32 30 20 72 65 rite' el a= 20 re | | 00030 71 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 75 quests=3 interru | | 00040 70 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 6f pt=0 tim eout=0 o | | 00050 62 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 39 38 bj#=-1 t im=13898 | | 00060 30 32 32 38 31 34 35 36 37 34 30 02281456 740 | write(11, "WAIT #0: nam='db file parallel w"..., 106) = 106 | 00000 57 41 49 54 20 23 30 3a 20 6e 61 6d 3d 27 64 62 WAIT #0: nam='db | | 00010 20 66 69 6c 65 20 70 61 72 61 6c 6c 65 6c 20 77 file pa rallel w | | 00020 72 69 74 65 27 20 65 6c 61 3d 20 31 20 72 65 71 rite' el a= 1 req | | 00030 75 65 73 74 73 3d 33 20 69 6e 74 65 72 72 75 70 uests=3 interrup | | 00040 74 3d 30 20 74 69 6d 65 6f 75 74 3d 30 20 6f 62 t=0 time out=0 ob | | 00050 6a 23 3d 2d 31 20 74 69 6d 3d 31 33 38 39 38 30 j#=-1 ti m=138980 | | 00060 32 32 38 31 34 35 38 34 39 32 22814584 92 | 64 3 pwrite() calls. This is synchronous IO! The db file parallel write wait event shows 3 requests! But why a second db file parallel write wait event?
  • 65. dbwr, synchronous IO • There’s no ‘db file async I/O submit’ wait anymore. – Which is good, because SIO has no submit phase. • The ‘db file parallel write’ waits seem suspicious. – It seems like the wait for DFPW is issued twice. – Further inves;ga;on shows that it does. • My guess this is a bug in the sync. IO implementa;on. • Let’s look a level deeper and see if there’s more to see. 65
  • 66. dbwr, synchronous IO kslwtbctx semtimedop - 458755 semid, timeout: $18 = {tv_sec = 3, tv_nsec = 0} kslwtectx -- Previous wait time: 1239214: rdbms ipc message ! pwrite64 - fd, size - 256,8192 pwrite64 - fd, size - 256,8192 pwrite64 - fd, size - 256,8192 ! kslwtbctx kslwtectx -- Previous wait time: 949: db file parallel write ! kslwtbctx kslwtectx -- Previous wait time: 650: db file parallel write ! kslwtbctx semtimedop - 458755 semid, timeout: $19 = {tv_sec = 1, tv_nsec = 620000000} 66 This is clearly the semaphore being posted: timeout=3s, wait time = 1239,2ms 3 IO’s in serial using pwrite(). The only possibility if there isn’t AIO of course. Two db file parallel write (which aren’t parallel) for which both the begin of the waits are started AFTER the IO (!!) After the IOs are done, the dbwr continues sleeping.
  • 67. dbwr, synchronous IO • Let’s do the same trick as done earlier: – In gdb, add “shell sleep 0.1” to the pwrite call. – This makes the execu;on of this call take 100ms longer. – To see if there’s s;ll some way Oracle ;mes it properly. 67
  • 68. dbwr, synchronous IO kslwtbctx semtimedop - 458755 semid, timeout: $23 = {tv_sec = 3, tv_nsec = 0} kslwtectx -- Previous wait time: 92080: rdbms ipc message ! pwrite64 - fd, size - 256,8192 > shell sleep 0.1 pwrite64 - fd, size - 256,8192 > shell sleep 0.1 pwrite64 - fd, size - 256,8192 > shell sleep 0.1 ! kslwtbctx kslwtectx -- Previous wait time: 478: db file parallel write ! kslwtbctx kslwtectx -- Previous wait time: 495: db file parallel write ! kslwtbctx semtimedop - 458755 semid, timeout: $24 = {tv_sec = 2, tv_nsec = 460000000} 68 The 3 IOs again, each sleeps in pwrite() for 100ms (0.1s) Yet the ‘db file parallel write’ wait shows a waiting time of 478; which is 0.478ms: the timing is wrong.
  • 69. dbwr, synchronous IO • So, my conclusion on the wait events for the dbwr with synchronous IO: – The events are not properly ;med – It seems like the wait for DFPW is issued twice. – Further inves;ga;on shows that it does. • My guess this is a bug in the sync. IO implementa;on. 69
  • 70. dbwr: exadata • How does this look like on Exadata? 70
  • 71. dbwr: exadata kslwtbctx semtimedop - 3309577 semid, timeout: $389 = {tv_sec = 3, tv_nsec = 0} kslwtectx -- Previous wait time: 1266041: rdbms ipc message $390 = "oss_write" $391 = "oss_write" $392 = "oss_write" $393 = "oss_write" $394 = "oss_write" $395 = "oss_write" ! kslwtbctx kslwtectx -- Previous wait time: 684: db file async I/O submit ! kslwtbctx $396 = "oss_wait" $397 = "oss_wait" kslwtectx -- Previous wait time: 2001: db file parallel write $398 = "oss_wait" $399 = "oss_wait" $400 = "oss_wait" $401 = "oss_wait" ! semctl - 3309577,23,16 - semid, semnum, cmd kslwtbctx semtimedop - 3309577 semid, timeout: $402 = {tv_sec = 1, tv_nsec = 630000000} kslwtectx -- Previous wait time: 1634299: rdbms ipc message 71 The dbwr semaphore sleep. The writes are issued here. This is not timed. There is the db file async I/O submit. Again, it doesn’t seem to time any of the typical IO calls! And there we got the db file parallel write. It does seem to always time two oss_wait() calls… But it looks for more IOs to finish, alike the trailing io_getevents() calls. I am quite sure oss_wait() is a blocking call…
  • 72. Conclusion • Logwriter: – When idle, is sleeping on a semaphore/rdbms ipc message – Gets posted with semctl() to do work. – Only writes when it needs to do so. – Version 11.2.0.3: two methods for pos;ng FGs: – Polling and post/wait. – Post/wait is default, might switch to polling. – No;fica;on of switch is in log writer trace file. – Polling/nanosleep() ;me is variable. 72
  • 73. Conclusion • Logwriter: – Log file parallel write – AIO: two io_getevents() calls. – AIO: ;me wai;ng for all lgwr submifed IOs to finish. – Not IO latency -me! – SIO: does not do parallel writes, but serial. – SIO: does not ;me IO. 73
  • 74. Conclusion • Logwriter: – Wait event IO ;ming: – All the ‘* parallel read’ and ‘* parallel write’ events do not seem to ;me IO correctly with synchronous IO. – All the events which cover single block IOs do use synchronous IO calls, even with asynchronous IO set. – Logwriter writes a warning when IO ;me and SCN broadcast ack ;me exceeds 500ms in the log writer trace file. – _disable_logging *only* disables write to logs. 74
  • 75. Conclusion • Database writer: – When idle, is sleeping on a semaphore/rdbms ipc message – Gets posted with semctl() to do work. – Only writes when it needs to do so. – Since version 11.2.0.2, event ‘db file async I/O submit’: – Is not shown with synchronous I/O. – Shows the actual amount of IOs submifed. – Does not ;me io_submit() – Unknown what or if it ;mes something. 75
  • 76. Conclusion • Database writer: – Event ‘db file parallel write’: – Shows the minimal number io_getevents() waits for. – The number of requests it waits for varies, but mostly seems to be ~ 25-­‐33% of submifed IOs. – Aher the ;med, blocking, io_getevents() call, it issues two non-­‐blocking io_getevents() calls for the remaining non-­‐reaped IOs, if any. – My current idea is the blocking io_getevents() call is an IO throfle mechanism. 76
  • 77. Conclusion • Database writer: – Event ‘db file parallel write’, with synchronous IO: – pwrite64() calls are issued serially. – These are not ;med. – The event is triggered twice. ! – On exadata, two out of the total number of oss_wait() calls are ;med with the event ‘db file parallel write’. 77
  • 78. Update: Oracle 12.1.0.2 • I tried to present this findings to Oracle Support – With no effect… ! • Luckily I could to raise awareness of the IO ;ming inefficiencies inside Oracle. – With as result that the IO ;ming changed with 12.1.0.2. – I like to think I am responsible for that, but it might be just coincidence. 78
  • 79. log file parallel write, AIO 12.1.0.2 ! kslwtbctx io_submit - 2,fe614000 - nr,ctx fd: 256, nbytes: 512 fd: 256, nbytes: 512 io_getevents (libaio) - min_nr: 2, ctx: fe614000, timeout { 0,0 } skgfr_return64 - 0 IOs returned skgfr_return64 - 32 IOs returned kslwtectx -> event=log file parallel write, wait_time=48873, files=2, blocks=2, requests=2 ! • Change: • Wait includes io_submit(). • Wait ;me: • Time for all log writer IOs to finish, total latency ;me of slowest IO. 79
  • 80. log file parallel write, SIO 12.1.0.2 ! kslwtbctx pwrite64 - fd, size - 256,512 pwrite64 - fd, size - 256,512 kslwtectx -> event=log file parallel write, wait_time=3968, files=2, blocks=2, requests=2 ! • Change: • Wait includes pwrite(). • Wait ;me: • Total ;me of both pwrite() calls, executed sequen;ally. 80
  • 81. db file async IO submit, AIO 12.1.0.2 ! io_submit - 1,ef59000 - nr,ctx fd: 256, nbytes: 8192 kslwtbctx kslwtectx -> event=db file async I/O submit, wait_time=616, requests=1, interrupt=0, timeout=0 !! • Change: • Nothing. Wait (s;ll) excludes io_submit(). • Wait ;me: • ? 81
  • 82. db file parallel write, AIO 12.1.0.2 ! kslwtbctx io_getevents (libaio) - min_nr: 1, ctx: ef59000, timeout { 600,0 } skgfr_return64 - 0 IOs returned kslwtectx -> event=db file parallel write, wait_time=15012, requests=1, interrupt=0, timeout=2147483647 ! • Change: • Nothing. • Wait ;me: • Time spend in io_getevents() in blocking mode, wai;ng for min_nr IO requests to finish. 82
  • 83. db file parallel write, SIO 12.1.0.2 ! kslwtbctx pwrite64 - fd, size - 256,8192 kslwtectx -> event=db file parallel write, wait_time=59805, requests=1, interrupt=0, timeout=0 kslwtbctx kslwtectx -> event=db file parallel write, wait_time=512, requests=1, interrupt=0, timeout=0 kslwtbctx ! • Change: • pwrite() calls are included in first wait. • Wait ;me: • Total ;me of pwrite() calls executed sequen;ally. Second wait s;ll there, with no IO calls, same # of requests. 83
  • 84. others, SIO 12.1.0.2 ! • I haven’t spend a lot of ;me looking for others. ! • I have looked at ‘direct path read’ however. ! • This wait with synchronous IO now includes the actual pread64() call. 84
  • 85. ! ! ! ! Q & A 85
  • 86. Thanks & Links 86 • Enkitec • Tanel Poder, Mar;n Bach, Klaas-­‐Jan Jongsma, Jeremy Schneider, Karl Arao, Michael Fontana, Luca Canali. • hfp://www.pythian.com/blog/adap;ve-­‐log-­‐file-­‐ sync-­‐oracle-­‐please-­‐dont-­‐do-­‐that-­‐again/ • hfp://files.e2sn.com/slides/ Tanel_Poder_log_file_sync.pdf