Welcome to the Real World‘Real’means simply electrical signals on a computer                                Oracle Corpora...
日本オラクル株式会社畔勝洋平blog:http://d.hatena.ne.jp/yohei-a/twitter: yoheia
検証環境
本日は、ちょっと変わった視点からOracle Database を見てみたいと思います
“We’re just ordinary people who apply the scientificmethod to the things we can observe and measure”    Author: Jonathan L...
Oracle Database のアーキテクチャ      出典:Oracle Database Concepts 11g Release 2 (11.2) Part Number E25789-01
Oracle Database の世界へ
$ sqlplus neo/follow_the_white_rabbitSQL*Plus: Release 11.2.0.2.0 Production on Tue Oct 16 09:56:00 2012Copyright (c) 1982...
SQL> create table agent(id number(10),name char(10));Table created.SQL> begin     for i in 1..10000000 loop            ins...
SQL> set autotrace onSQL> alter session set events 10046 trace name context forever, level 12;Session altered.SQL> select ...
$ tkprof orcl_ora_3331.trc orcl_ora_3331_tkprof.txt$ less orcl_ora_3331_tkprof.txt…SQL ID: guxtdnm3w68gr Plan Hash: 257170...
待機イベントとは?
誰が   待何   機を   。待   待つ   つの   。か?
サーバープロセスが 1. OSカーネル 2. Oracle Database の他のプロセスを待つ
Oracle Database                        他のプロセスを待つ         サーバープロセス     サーバー                                          バックグラウ...
乱暴に言うと、”direct path read” はOSカーネルがディスクからデータの読み出しを待つこと
Oracle Database           enqueue                          latch, mutex                          log file sync         サーバ...
ITシステムの開発プロジェクトで、要件定義、設計、開発、テストなどの工程で工数を管理するのと同じように、 Oracle Databaseは何にどれだけ時間を使ったか記録している
「推測するな、計測せよ」     by ロバート・C・パイク出典:Cプログラミングに関する覚え書き(Notes on Programming in C)
「汝の時間を知れ」「成果をあげる者は仕事からスタートしない。時間からス          タートする」       by P.F.ドラッカー          出典:経営者の条件(The Effective Executive)
外の世界から見てみる
strace コマンドでサーバープロセスから発行されたシステムコールを調べる$ strace -tt -o strace.log -p 3331
$ ls -l /proc/3331/fd...lrwx------ 1 oracle oracle ... 257 users01.dbflrwx------ 1 oracle oracle ... 258 temp01.dbf$ grep ...
$ grep direct path read orcl_ora_3331.trc|wc -l97$ grep pread64(257 strace.log|wc -l97
Oracle Database           enqueue                          latch, mutex                          log file sync         サーバ...
システムコールとは?
「システムコール」とは「カーネルに仕事を依頼する方法」を指す。OSではプログラムを安全に実行するために、プロセッサの提供する機能を使用して「特権モードで動作するカーネル」と、「非特権モードで動作するそれ以外のプログラム」というように「カーネル」...
システムコールのおかげで、ディスクI/O、ネットワーク通信などハードウェアの制御が必要な処理を、ハードウェアを意識せずに安全に行うことができる                          ユーザー空間                アプリ...
ユ          ー          ザ   アプリケーション          ー          空           glibc          間          カ        sys_pread64         ...
システムコールの先を捕まえる
crash コマンドでカーネルのコールスタックを見る  # crash  crash> set scroll off  crash> repeat bt -l 3331
#0 [e2694a6c] schedule at c061d348    /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/kernel/sched.c: 2056 #1 [e2694ae4] io...
全てはCPU命令
crash> set 3331PID: 3511 TASK: f58c3550 CPU: 0 COMMAND: "oracle" #0 [e70b4e90] schedule at c061d348 #1 [e70b4f08] pipe_wai...
Free your mind
ご清聴ありがとうございました
最新書籍情報
Amazonベストセラー商品ランキング  コンピューターサイエンス部門          第1位      (10/16 17:30頃)
あの「絵で見てわかる」シリーズの     小田圭二監修
日本オラクルのコンサルタント陣が執筆 (私も書かせていただきました)
絵で見てわかるITインフラの仕組           み           翔泳社           価格:¥ 2,499           ITインフラにおける、普遍的な概念や仕組みを           絵を使って説明しています。イン...
Upcoming SlideShare
Loading in...5
×

Dbts2012 unconference wttrw_yazekatsu_publish

1,091

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,091
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
16
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Dbts2012 unconference wttrw_yazekatsu_publish

  1. 1. Welcome to the Real World‘Real’means simply electrical signals on a computer Oracle Corporation Japan Yohei AZEKATSU
  2. 2. 日本オラクル株式会社畔勝洋平blog:http://d.hatena.ne.jp/yohei-a/twitter: yoheia
  3. 3. 検証環境
  4. 4. 本日は、ちょっと変わった視点からOracle Database を見てみたいと思います
  5. 5. “We’re just ordinary people who apply the scientificmethod to the things we can observe and measure” Author: Jonathan Lewis Technical reviewer: Tanel Poder 出典:Oracle Core: Essential Internals for DBAs and Developers
  6. 6. Oracle Database のアーキテクチャ 出典:Oracle Database Concepts 11g Release 2 (11.2) Part Number E25789-01
  7. 7. Oracle Database の世界へ
  8. 8. $ sqlplus neo/follow_the_white_rabbitSQL*Plus: Release 11.2.0.2.0 Production on Tue Oct 16 09:56:00 2012Copyright (c) 1982, 2010, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL>
  9. 9. SQL> create table agent(id number(10),name char(10));Table created.SQL> begin for i in 1..10000000 loop insert into agent(id, name) values(i, smith); end loop;end;/ 2 3 4 5 6PL/SQL procedure successfully completed.SQL> commit;Commit complete.SQL>
  10. 10. SQL> set autotrace onSQL> alter session set events 10046 trace name context forever, level 12;Session altered.SQL> select count(1) from agent; COUNT(1)---------- 1000000Execution Plan----------------------------------------------------------Plan hash value: 2571700340--------------------------------------------------------------------| Id | Operation | Name | Rows | Cost (%CPU)| Time |--------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 789 (1)| 00:00:10 || 1 | SORT AGGREGATE | | 1| | || 2 | TABLE ACCESS FULL| AGENT | 873K| 789 (1)| 00:00:10 |--------------------------------------------------------------------
  11. 11. $ tkprof orcl_ora_3331.trc orcl_ora_3331_tkprof.txt$ less orcl_ora_3331_tkprof.txt…SQL ID: guxtdnm3w68gr Plan Hash: 2571700340select count(1)from agent…Elapsed times include waiting on following events: Event waited on Times Max. Wait Total Waited ---------------------------------------- Waited ---------- ------------ SQL*Net message to client 2 0.00 0.00 Disk file operations I/O 1 0.00 0.00 asynch descriptor resize 2 0.00 0.00 direct path read 97 0.00 0.03 SQL*Net message from client 2 0.00 0.00
  12. 12. 待機イベントとは?
  13. 13. 誰が 待何 機を 。待 待つ つの 。か?
  14. 14. サーバープロセスが 1. OSカーネル 2. Oracle Database の他のプロセスを待つ
  15. 15. Oracle Database 他のプロセスを待つ サーバープロセス サーバー バックグラウンドプロ プロセス セス 暇なのでOSカーネルが起こしてくれるのを 待つ ネットワーク通信でデータが届いてOS カーネル が起こしてくれるのを待つ OSカーネルに処理を依 頼して終わるのを待つOSカーネル システム 割込み コール ハンドラハードウェア HDD NIC
  16. 16. 乱暴に言うと、”direct path read” はOSカーネルがディスクからデータの読み出しを待つこと
  17. 17. Oracle Database enqueue latch, mutex log file sync サーバープロセス サーバー バックグラウンドプロ プロセス セス direct path read db file scattered read db file sequential readOSカーネル システム 割込み コール ハンドラハードウェア HDD NIC
  18. 18. ITシステムの開発プロジェクトで、要件定義、設計、開発、テストなどの工程で工数を管理するのと同じように、 Oracle Databaseは何にどれだけ時間を使ったか記録している
  19. 19. 「推測するな、計測せよ」 by ロバート・C・パイク出典:Cプログラミングに関する覚え書き(Notes on Programming in C)
  20. 20. 「汝の時間を知れ」「成果をあげる者は仕事からスタートしない。時間からス タートする」 by P.F.ドラッカー 出典:経営者の条件(The Effective Executive)
  21. 21. 外の世界から見てみる
  22. 22. strace コマンドでサーバープロセスから発行されたシステムコールを調べる$ strace -tt -o strace.log -p 3331
  23. 23. $ ls -l /proc/3331/fd...lrwx------ 1 oracle oracle ... 257 users01.dbflrwx------ 1 oracle oracle ... 258 temp01.dbf$ grep direct path orcl_ora_3331.trc|head -5WAIT #5597196: nam=direct path read ela= 233 ...tim=1350521557206427WAIT #5597196: nam=direct path read ela= 211 ...tim=1350521557206820WAIT #5597196: nam=direct path read ela= 632 ...tim=1350521557208596WAIT #5597196: nam=direct path read ela= 225 ...tim=1350521557210469WAIT #5597196: nam=direct path read ela= 203 ...tim=1350521557213599$ grep pread64(257 strace.log|head -517:52:37.206294 pread64(257, ..., 40960, 26632192) = 4096017:52:37.206677 pread64(257, ..., 65536, 26738688) = 6553617:52:37.208032 pread64(257, ..., 122880, 26812416) = 12288017:52:37.210311 pread64(257, ..., 122880, 182657024) = 12288017:52:37.213464 pread64(257, ..., 122880, 182788096) = 122880
  24. 24. $ grep direct path read orcl_ora_3331.trc|wc -l97$ grep pread64(257 strace.log|wc -l97
  25. 25. Oracle Database enqueue latch, mutex log file sync サーバープロセス サーバー バックグラウンドプロ プロセス セス direct path read db file scattered read db file sequential readOSカーネル pread64() システム 割込み コール ハンドラハードウェア HDD NIC
  26. 26. システムコールとは?
  27. 27. 「システムコール」とは「カーネルに仕事を依頼する方法」を指す。OSではプログラムを安全に実行するために、プロセッサの提供する機能を使用して「特権モードで動作するカーネル」と、「非特権モードで動作するそれ以外のプログラム」というように「カーネル」と「それ以外のプログラム」をそれぞれ実行する世界を分けている。 出典:
  28. 28. システムコールのおかげで、ディスクI/O、ネットワーク通信などハードウェアの制御が必要な処理を、ハードウェアを意識せずに安全に行うことができる ユーザー空間 アプリケーション カーネル空間システムコールを システムコール発行するとアプリ メモリケーションの実行状態等の情報がレジスタからメモリに退避され、カーネルのコードが ハードウェアロードされて(コンテキストスイッチ)実行される。 HDD NIC
  29. 29. ユ ー ザ アプリケーション ー 空 glibc 間 カ sys_pread64 ー上から順番に ネ ル VFSCPUで命令が 空実行される 間 ファイルシステム 汎用ブロック層 メモリ I/Oスケジューラ デバイスドライバ ハードウェア HDD NIC
  30. 30. システムコールの先を捕まえる
  31. 31. crash コマンドでカーネルのコールスタックを見る # crash crash> set scroll off crash> repeat bt -l 3331
  32. 32. #0 [e2694a6c] schedule at c061d348 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/kernel/sched.c: 2056 #1 [e2694ae4] io_schedule at c061d9f9 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/kernel/sched.c: 4879 #2 [e2694af0] sync_buffer at c04788c6 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/fs/buffer.c: 67 #3 [e2694af4] __wait_on_bit at c061dbd2 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/kernel/wait.c: 169 #4 [e2694b0c] out_of_line_wait_on_bit at c061dc57 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/kernel/wait.c: 182 #5 [e2694b44] __wait_on_buffer at c0478843 include/linux/wait.h: 434 #6 [e2694b50] __bread at c04799d6 include/linux/buffer_head.h: 318 #7 [e2694b58] ext3_get_branch at f8882927 #8 [e2694b78] ext3_get_blocks_handle at f8882ba4 ファイルシステム #9 [e2694c34] ext3_get_block at f888369b#10 [e2694c6c] do_mpage_readpage at c0495a48...#20 [e2694f8c] vfs_read at c0476536 VFS /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/fs/read_write.c: 264#21 [e2694fa4] sys_pread64 at c0476a4f sys_pread64 /usr/src/debug/kernel-2.6.18/linux-2.6.18.i686/fs/read_write.c: 393#22 [e2694fb8] system_call at c0404f10 pread64
  33. 33. 全てはCPU命令
  34. 34. crash> set 3331PID: 3511 TASK: f58c3550 CPU: 0 COMMAND: "oracle" #0 [e70b4e90] schedule at c061d348 #1 [e70b4f08] pipe_wait at c0481408 #2 [e70b4f28] pipe_readv at c0481b16 #3 [e70b4f74] pipe_read at c0481ba2 #4 [e70b4f84] vfs_read at c0476536 #5 [e70b4f9c] sys_read at c0476981 #6 [e70b4fb8] system_call at c0404f10 EAX: ffffffda EBX: 00000009 ECX: 117efa5e EDX: 00002010 DS: 007b ESI: 117e6c28 ES: 007b EDI: bf923454 SS: 007b ESP: bf923414 EBP: bf923434 CS: 0073 EIP: 00c05402 ERR: 00000003 EFLAGS: 00000246 crash> dis e70b4fb8 10dis: WARNING: e70b4fb8: no associated kernel symbol found0xe70b4fb8: pop %ss0xe70b4fb9: dec %edi0xe70b4fba: inc %eax ニーモニック、アセンブラコード0xe70b4fbb: rorb $0x0,(%ecx)0xe70b4fbe: add %al,(%eax)0xe70b4fc0: pop %esi コンピュータが実行可能な機械語(マ0xe70b4fc1: cli シン語)のプログラムを、人間が理0xe70b4fc2: jle 0xe70b4fd5 解・記述しやすいように簡略化した英0xe70b4fc4: adc %ah,(%eax) 単語や記号の組み合わせに置き換えた0xe70b4fc6: add %al,(%eax) もの
  35. 35. Free your mind
  36. 36. ご清聴ありがとうございました
  37. 37. 最新書籍情報
  38. 38. Amazonベストセラー商品ランキング コンピューターサイエンス部門 第1位 (10/16 17:30頃)
  39. 39. あの「絵で見てわかる」シリーズの 小田圭二監修
  40. 40. 日本オラクルのコンサルタント陣が執筆 (私も書かせていただきました)
  41. 41. 絵で見てわかるITインフラの仕組 み 翔泳社 価格:¥ 2,499 ITインフラにおける、普遍的な概念や仕組みを 絵を使って説明しています。インフラエンジニ ア向けの本ですが、アプリケーションを設計・ 開発しているエンジニアやプログラマの方にも 役に立つ本ではないかと思います。 好評につき増刷決定!カバーを裏返すとシステムの全貌がわかる解剖図
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×