SlideShare a Scribd company logo
Welcome to the Real World
‘Real’means simply electrical signals on a computer




                                Oracle Corporation Japan
                                       Yohei AZEKATSU
日
本
オ
ラ
ク
ル
株
式
会
社
畔
勝
洋
平
blog:
http://d.hatena.ne.jp/yohei-a/
twitter: yoheia
検
証
環
境
本日は、ちょっと変わった視点から
Oracle Database を見てみたいと思います
“We’re just ordinary people who apply the scientific
method to the things we can observe and measure”




    Author: Jonathan Lewis
    Technical reviewer: Tanel Poder



                               出典:Oracle Core: Essential Internals for DBAs and Developers
Oracle Database のアーキテクチャ




      出典:Oracle Database Concepts 11g Release 2 (11.2) Part Number E25789-01
Oracle Database の世界へ
$ sqlplus neo/follow_the_white_rabbit

SQL*Plus: Release 11.2.0.2.0 Production on Tue Oct 16 09:56:00 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>
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 6

PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

SQL>
SQL> set autotrace on
SQL> alter session set events '10046 trace name context forever, level 12';

Session altered.

SQL> select count(1) from agent;

  COUNT(1)
----------
  1000000


Execution 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 |
--------------------------------------------------------------------
$ tkprof orcl_ora_3331.trc orcl_ora_3331_tkprof.txt
$ less orcl_ora_3331_tkprof.txt

…

SQL ID: guxtdnm3w68gr Plan Hash: 2571700340

select 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
待
機
イ
ベ
ン
ト
と
は
?
誰
が   待
何   機
を   。
待   待
つ   つ
の   。
か
?
サーバープロセスが
 1. OSカーネル
 2. Oracle Database の他のプロセス
を待つ
Oracle Database

                        他のプロセスを待つ         サーバープロセス
     サーバー
                                          バックグラウンドプロ
     プロセス
                                          セス
                 暇なのでOSカーネルが起こしてくれるのを
                 待つ
                   ネットワーク通信でデータが届いてOS
                 カーネル
                       が起こしてくれるのを待つ
         OSカーネルに処理を依
         頼して終わるのを待つ

OSカーネル

     システム                                  割込み
      コール                                 ハンドラ


ハードウェア

                  HDD               NIC
乱暴に言うと、”direct path read” はOS
カーネルがディスクからデータの読み出しを
待つこと
Oracle Database           enqueue
                          latch, mutex
                          log file sync         サーバープロセス
     サーバー
                                                バックグラウンドプロ
     プロセス
                                                セス



         direct path read
         db file scattered
         read
         db file sequential
         read
OSカーネル

     システム                                        割込み
      コール                                       ハンドラ


ハードウェア

                  HDD                     NIC
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.dbf
lrwx------ 1 oracle oracle ... 258 temp01.dbf

$ grep 'direct path' orcl_ora_3331.trc|head -5
WAIT #5597196: nam='direct path read' ela= 233 ...tim=1350521557206427
WAIT #5597196: nam='direct path read' ela= 211 ...tim=1350521557206820
WAIT #5597196: nam='direct path read' ela= 632 ...tim=1350521557208596
WAIT #5597196: nam='direct path read' ela= 225 ...tim=1350521557210469
WAIT #5597196: nam='direct path read' ela= 203 ...tim=1350521557213599


$ grep 'pread64(257' strace.log|head -5
17:52:37.206294 pread64(257, ..., 40960, 26632192) = 40960
17:52:37.206677 pread64(257, ..., 65536, 26738688) = 65536
17:52:37.208032 pread64(257, ..., 122880, 26812416) = 122880
17:52:37.210311 pread64(257, ..., 122880, 182657024) = 122880
17:52:37.213464 pread64(257, ..., 122880, 182788096) = 122880
$ grep 'direct path read' orcl_ora_3331.trc|wc -l
97
$ grep 'pread64(257' strace.log|wc -l
97
Oracle Database           enqueue
                          latch, mutex
                          log file sync         サーバープロセス
     サーバー
                                                バックグラウンドプロ
     プロセス
                                                セス



         direct path read
         db file scattered
         read
         db file sequential
         read
OSカーネル    pread64()

     システム                                        割込み
      コール                                       ハンドラ


ハードウェア

                  HDD                     NIC
シ
ス
テ
ム
コ
ー
ル
と
は
?
「システムコール」とは「カーネルに仕事を
依頼する方法」を指す。

OSではプログラムを安全に実行するために、
プロセッサの提供する機能を使用して「特権
モードで動作するカーネル」と、「非特権
モードで動作するそれ以外のプログラム」と
いうように「カーネル」と「それ以外のプロ
グラム」をそれぞれ実行する世界を分けてい
る。

                    出典:
システムコールのおかげで、ディスクI/O、ネットワーク通信などハード
ウェアの制御が必要な処理を、ハードウェアを意識せずに安全に行うこと
ができる

                          ユーザー空間
                アプリケーション



                          カーネル空間

システムコールを        システムコール
発行するとアプリ                           メモリ
ケーションの実行
状態等の情報がレ
ジスタからメモリ
に退避され、カー
ネルのコードが    ハードウェア
ロードされて(コ
ンテキストスイッ
チ)実行される。
                    HDD   NIC
ユ
          ー
          ザ   アプリケーション
          ー
          空           glibc
          間

          カ        sys_pread64
          ー
上から順番に    ネ
          ル              VFS
CPUで命令が   空
実行される     間   ファイルシステム

               汎用ブロック層
                                       メモリ
               I/Oスケジューラ

              デバイスドライバ


          ハードウェア



                   HDD           NIC
システムコールの先を捕まえる
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_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
全てはCPU命令
crash> set 3331
PID: 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 10
dis: WARNING: e70b4fb8: no associated kernel symbol found
0xe70b4fb8: pop %ss
0xe70b4fb9: dec %edi
0xe70b4fba: 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)                  もの
Free your mind
ご
清
聴
あ
り
が
と
う
ご
ざ
い
ま
し
た
最新書籍情報
Amazonベストセラー商品ランキング
  コンピューターサイエンス部門
          第1位
      (10/16 17:30頃)
あの「絵で見てわかる」シリーズの
     小田圭二監修
日本オラクルのコンサルタント陣が執筆
 (私も書かせていただきました)
絵で見てわかるITインフラの仕組
           み
           翔泳社
           価格:¥ 2,499

           ITインフラにおける、普遍的な概念や仕組みを
           絵を使って説明しています。インフラエンジニ
           ア向けの本ですが、アプリケーションを設計・
           開発しているエンジニアやプログラマの方にも
           役に立つ本ではないかと思います。

           好評につき増刷決定!

カバーを裏返すと
システムの全貌が
わかる解剖図

More Related Content

PDF
シンプルでシステマチックな Linux 性能分析方法
PDF
簡単!AWRをEXCELピボットグラフで分析しよう♪
PDF
シンプルでシステマチックな Oracle Database, Exadata 性能分析
PPTX
Linux Performance Analysis in 15 minutes
PDF
まずやっとくPostgreSQLチューニング
PDF
明日から使えるPostgre sql運用管理テクニック(監視編)
PDF
Vacuum徹底解説
PDF
いまさら聞けないPostgreSQL運用管理
シンプルでシステマチックな Linux 性能分析方法
簡単!AWRをEXCELピボットグラフで分析しよう♪
シンプルでシステマチックな Oracle Database, Exadata 性能分析
Linux Performance Analysis in 15 minutes
まずやっとくPostgreSQLチューニング
明日から使えるPostgre sql運用管理テクニック(監視編)
Vacuum徹底解説
いまさら聞けないPostgreSQL運用管理

What's hot (20)

PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
PostgreSQL運用管理入門
PDF
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
PDF
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
PDF
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
PDF
Hackers Champloo 2016 postgresql-9.6
PDF
PostgreSQL 9.6 新機能紹介
PDF
PostgreSQLアーキテクチャ入門
PDF
「今そこにある危機」を捉える ~ pg_stat_statements revisited
PDF
MySQLを割と一人で300台管理する技術
PDF
SQL大量発行処理をいかにして高速化するか
PDF
あなたの知らないPostgreSQL監視の世界
PDF
Osc2015 hokkaido postgresql-semi-stuructured-datatype
PDF
PostgreSQLバックアップの基本
PPTX
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
PDF
Kof2016 postgresql-9.6
PDF
外部データラッパによる PostgreSQL の拡張
PDF
20130203 OSS-DB Exam Silver 技術解説無料セミナー
PDF
Postgre sql9.3 newlockmode_and_etc
PDF
PostgreSQL10徹底解説
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQL運用管理入門
「Oracle Database + Java + Linux」 環境における性能問題の調査手法 ~ミッションクリティカルシステムの現場から~ Part.1
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
バックアップことはじめ JPUG第29回しくみ+アプリケーション分科会(2014-05-31)
Hackers Champloo 2016 postgresql-9.6
PostgreSQL 9.6 新機能紹介
PostgreSQLアーキテクチャ入門
「今そこにある危機」を捉える ~ pg_stat_statements revisited
MySQLを割と一人で300台管理する技術
SQL大量発行処理をいかにして高速化するか
あなたの知らないPostgreSQL監視の世界
Osc2015 hokkaido postgresql-semi-stuructured-datatype
PostgreSQLバックアップの基本
MySQLメインの人がPostgreSQLのベンチマークをしてみた話
Kof2016 postgresql-9.6
外部データラッパによる PostgreSQL の拡張
20130203 OSS-DB Exam Silver 技術解説無料セミナー
Postgre sql9.3 newlockmode_and_etc
PostgreSQL10徹底解説
Ad

Similar to Dbts2012 unconference wttrw_yazekatsu_publish (20)

PPT
HandlerSocket plugin for MySQL
PDF
オペレーティングシステム 第1回-公開用
PDF
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
PDF
Exploring the x64
PDF
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
PDF
PEZY-SC programming overview
PPT
Linux/DB Tuning (DevSumi2010, Japanese)
PPT
Maatkit で MySQL チューニング
PPTX
Statically detecting vulnerability under memory pressure using exhaustive search
PPT
Handlersocket 20110517
PDF
seccamp2012 チューター発表
PDF
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
PPTX
Cloudstack user group meeting in osaka
PDF
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
PDF
Apache cloudstack4.0インストール
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
PDF
Share pointを支えるsql server2014最新情報
PDF
Oracle xeインストール(linux環境)
PDF
Using Kubernetes on Google Container Engine
PPTX
システムパフォーマンス勉強会#5
HandlerSocket plugin for MySQL
オペレーティングシステム 第1回-公開用
[db tech showcase Tokyo 2017] D21: ついに Red Hat Enterprise Linuxで SQL Serverが使...
Exploring the x64
OOW Tokyo 2012 Unconference つまらない STATSPACK をさらにややこしく解説してみよう
PEZY-SC programming overview
Linux/DB Tuning (DevSumi2010, Japanese)
Maatkit で MySQL チューニング
Statically detecting vulnerability under memory pressure using exhaustive search
Handlersocket 20110517
seccamp2012 チューター発表
A24 SQL Server におけるパフォーマンスチューニング手法 - 注目すべきポイントを簡単に by 多田典史
Cloudstack user group meeting in osaka
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
Apache cloudstack4.0インストール
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
Share pointを支えるsql server2014最新情報
Oracle xeインストール(linux環境)
Using Kubernetes on Google Container Engine
システムパフォーマンス勉強会#5
Ad

More from Yohei Azekatsu (7)

PPTX
SIGMOD 2022 Amazon Redshift Re-invented を読んで
PPTX
Using Lightweight Formal Methods to Validate a Key-Value Storage Node in Amaz...
PPTX
Linux Process Snapper Introduction
PPTX
CloudTrail ログの検索を爆速化してみた
PPTX
Parquetはカラムナなのか?
PDF
iostatの見方
PPTX
私がPerlを使う理由
SIGMOD 2022 Amazon Redshift Re-invented を読んで
Using Lightweight Formal Methods to Validate a Key-Value Storage Node in Amaz...
Linux Process Snapper Introduction
CloudTrail ログの検索を爆速化してみた
Parquetはカラムナなのか?
iostatの見方
私がPerlを使う理由

Dbts2012 unconference wttrw_yazekatsu_publish