感想というかメモ
Oracle LOVERS 勉強会 第19回 in 青山花見 2010年4月3日 東京都 | DBならOracleでしょ♪ | mixi
前から参加してみたいと思っていた Oracle LOVERS 勉強会 に初参加してきた。
場所は日本オラクル青山センター13F。
数分遅刻して行ったら、みんなホワイトボードの前で話をしている。参加者の名前を書いて、その横に各自が Oracle Database のサーバプロセス1つあたり消費するメモリサイズを想定で書いていく。なんだろうと思ってたら、各自が書いたメモリサイズの順に席順を決めて、お昼ご飯。さすが Oracle Database の勉強会w
弁当は日本オラクル御用達の1500円の豪華弁当。参加者が増えて、1つ足りなくなったので、弁当箱のふたにみんなの弁当からすこしずつ集めて主催者のもとくんβ(id:mototaker)さんの分に。
六本木ヒルズと青山霊園の桜を眼下に隣の方々と雑談しながらお昼ご飯。
お昼が終わったら、会場を提供して頂いた日本オラクルの「山口@OTN シスオペ」として有名な山口さんからの挨拶。
日本側には知らされずに、グローバル側でいつの間にかOTN-J*1のメニューがリニューアルされたとか、OTN掲示板の源流はニフティサーブの時代にあるとか、スレッドが炎上してても常連さんが対応してくれて、山口さんはRRSとかで定期的にチェックするくらいで良いとか、OTN掲示板は日本のほうが先行でグローバルは日本に追随して後からできたとか、OTN掲示板は Jive Forums*2 を使っているとか、いろいろ面白いお話をお聞きした。
OTN山口さんに質問タイム。
メールマガジン「OTN Japan - Dev2DBA」の「シスオペが選ぶ今月の投稿 Best3」はどういう基準で決めてるんですかという質問。聞きたいと思ってたので、質問がかぶった。山口さんからの回答は、面白いかどうか、役にたつかどうか、参考リンクがよいといった基準で選ばれているとのこと。レスの件数でソートして見ていて、アクセス件数は参考程度に見ている。最終的には内容を見て判断している。当然、fire しているものは選ばれない。掲示板のデータは当然 Oracle Database EE に入っている。とのことでした。他にもいくつか質問がありました。
本題の実機を使った勉強会に入る前に、無線LANに接続できない方がいて、参加者全員で2分間ずつPCの前に座って対応。最終的には無事解決!わからないことがあっても、おいてけぼりにしないところが Oracle LOVERS 勉強会 とのこと。強者揃いで参加するの怖いなと思っていたけど、初心者でも参加しやすい雰囲気で個人的には良かった。また、参加しようと思った。
で、本題の実機を使った勉強会に。
もとくんβさんが Amazon EC2 でその場でインスタンスを作っていく。Amazon EC2 は Amazon Elastic Compute Cloud の略。1ヶ月おきくらいにインタフェースが変わる。などお話を聞きながら、インスタンスが作成されていく。本当は各自の PC から Amazon EC2 上の Oracle Database に接続する予定だったけど、うまくいかなかったので、Amazon EC2 上の別のインスタンスにsshで接続して、そこから別インスタンスの Oracle Databse に SQL*Plus で簡易接続する。で、v$session を見てセッション数を見て、Oracle Database が動いているインスタンスに ssh 接続して、サーバプロセスを確認して、ps コマンドを使って使用しているメモリサイズを確認して、平均メモリサイズを計算したら、16MB。来た時にホワイトボードに各自が書いた予想で、mixi ネーム SQL嫌いさんが一位。自分は 11MB にしたので、3位くらいだったかな。
最後にちょっと話をさせて頂いたのですが、ps コマンドで表示される RSS のサイズは共有メモリのサイズも含むので、正確にサーバプロセスが使っているメモリを調べようとすると、pmap コマンドで見て、内訳を見ないといけない気がする。とお話しました。
絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection)
- 作者: 小田圭二
- 出版社/メーカー: 翔泳社
- 発売日: 2008/04/22
- メディア: 単行本(ソフトカバー)
- 購入: 22人 クリック: 303回
- この商品を含むブログ (36件) を見る
[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/07
- メディア: 単行本(ソフトカバー)
- 購入: 133人 クリック: 2,270回
- この商品を含むブログ (288件) を見る
にこのあたりの話が書かれています。
帰宅後うだうだ検証してみたこと
帰ってから自宅の環境でちょっと確認してみた。
$ uname -a Linux centos54.ablog.jp 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux $ cat /etc/issue CentOS release 5.4 (Final) Kernel \r on an \m $ echo 'select * from v$version;'|sqlplus -s / as sysdba BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production $ sqlplus / as sysdba SQL> startup SQL> exit $ lsnrctl start $ sqlplus system/manager@localhost:1521/orcl & # ← 勉強会では別のホストに接続する $ sqlplus system/manager@localhost:1521/orcl & $ sqlplus system/manager@localhost:1521/orcl & $ sqlplus system/manager@localhost:1521/orcl & $ sqlplus system/manager@localhost:1521/orcl & $ sqlplus system/manager SQL> set pagesize 1000 SQL> set linesize 200 SQL> col spid for a4 SQL> col sid for 9999 SQL> col serial# for 9999 SQL> col username for a10 SQL> col program for a40 SQL> col machine for a20 SQL> col osuser for a10 SQL> select proc.spid, ses.sid, ses.serial#, ses.username, ses.program, ses.machine, ses.osuser, proc.pga_used_mem, proc.pga_alloc_mem,proc.pga_freeable_mem,proc.pga_max_mem from v$session ses, v$process proc where ses.type = 'USER' and ses.paddr = proc.addr; SPID SID SERIAL# USERNAME PROGRAM MACHINE OSUSER PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM ---- ----- ------- ---------- ---------------------------------------- -------------------- ---------- ------------ ------------- ---------------- ----------- 3240 25 12 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 878952 1259676 0 1259676 3245 28 21 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 676008 800924 0 800924 3248 26 12 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 676008 800924 0 800924 3251 32 10 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 676008 800924 0 800924 3254 1 10 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 676008 800924 0 800924 3258 34 8 SYSTEM sqlplus@centos54.ablog.jp (TNS V1-V3) centos54.ablog.jp oracle 840672 1399040 0 1399040 6 rows selected.
別のターミナルで、
$ ps auxw|perl -nle 'print if($.==1 or /[o]racleorcl/)' USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND oracle 3240 0.0 2.7 570360 28972 ? Ss 15:52 0:00 oracleorcl (LOCAL=NO) oracle 3245 0.0 1.8 569832 19496 ? Ss 15:52 0:00 oracleorcl (LOCAL=NO) oracle 3248 0.0 1.8 569832 19036 ? Ss 15:52 0:00 oracleorcl (LOCAL=NO) oracle 3251 0.0 1.8 569832 19116 ? Ss 15:52 0:00 oracleorcl (LOCAL=NO) oracle 3254 0.0 1.8 569832 19012 ? Ss 15:52 0:00 oracleorcl (LOCAL=NO) oracle 3258 0.0 2.9 570272 30360 ? Ss 15:54 0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) $ ps auxw|perl -lane 'print $F[1] if(/[o]racleorcl/)'|xargs -n1 pmap -x|grep total total kB 570360 - - - total kB 569832 - - - total kB 569832 - - - total kB 569832 - - - total kB 569832 - - - total kB 570272 - - -
ん、RSS じゃなくて、VSZ とサイズが一致してるぞ。
V$PROCESS
このビューは、現在アクティブなプロセスの情報を示します。LATCHWAIT列はプロセスが待機しているラッチを示し、LATCHSPIN列はプロセスがスピンしているラッチを示します。マルチ・プロセッサ・マシン上では、Oracleプロセスは、ラッチで待機する前にそのラッチでスピンします。
動的パフォーマンス(V$)・ビュー: V$NLS_PARAMETERS〜V$XML_AUDIT_TRAIL
列 データ型 説明 PGA_USED_MEM NUMBER プロセスによって現在使用中のPGAメモリー PGA_ALLOC_MEM NUMBER プロセスによって現在割り当てられているPGAメモリー(サーバー・プロセスでオペレーティング・システムにまだ解放されていない使用可能なPGAメモリーを含む) PGA_FREEABLE_MEM NUMBER 解放できる割当済PGAメモリー PGA_MAX_MEM NUMBER プロセスによって割り当てられた最大PGAメモリー
twitter でぶつぶつ言ってたら、id:wmo6hash さんから、
. @yoheia Oracle8i for Linux Intel 管理者リファレンス リリース8.1.7 http://bit.ly/c2nI9M の 1-12 (27ページ) に Oracle8iのメモリー要件および使用量 がありまして
http://twitter.com/wmo6hash/status/11586273134
と資料を教えて頂いたので、見てみると、
Oracle8i のメモリー要件および使用量
システム上のユーザー数を決定するために、メモリー要件および使用量を計算します。これ
は、物理メモリー要件およびスワップ領域要件を決定する場合にも役立ちます。次の式を使
用して、メモリー要件を見積もります。<Oracle実行ファイルのテキストのサイズ> + <SGAのサイズ> + n×( <Tool実行ファイルのプライベート・データ・セクションのサイズ> +<Oracle実行ファイルの未初期化データ・セクションのサイズ> +<スタック用に8192バイト> +<プロセス・ユーザー領域用に2048バイト>) この場合、nはバックグラウンド・プロセスの数を示します。 各クライアント/サーバー接続に対して、次の式を使用して仮想メモリー要件を見積もります。 <Oracle実行ファイルのデータ・セクションのサイズ> + <Oracle実行ファイルの未初期化データ・セクションのサイズ> + <スタック用に8192バイト> + <プロセス・ユーザー領域用に2048バイト> + <アプリケーションで必要なカーソル領域>実行ファイルのテキスト・サイズ、プライベート・データ・セクションのサイズおよび未初
期化データ・セクションのサイズ(またはDSS)を見積もるには、sizeコマンドを使用し
ます。 Oracle実行ファイル・テキストは共有されているため、プログラムが何度起動されても、
プログラム・テキストがカウントされるのは1回のみです。
実行中のデータベースにユーザーが接続しているときに、実際のOracle物理メモリー
(バックグラウンド・プロセスおよびシャドウ・プロセス)の使用量を計算するには、pmap
コマンドを使用します。pmonプロセスに対しては、共有セクション
(read/write/exec/sharedおよびread/execで示される)を合計します。pmonを含
む各シャドウ・プロセスおよびバックグラウンド・プロセスには、プライベート・セクショ
ン(read/write/execで示される)を合計します。バックグラウンド・プロセス名は、
ora_で始まり、SIDで終わります。シャドウ・プロセス名は、oracleSIDで始まります。
ps -elfコマンドは使用しないでください。このコマンドでは、SZ列が、表示される各プ
ロセスのメモリーの共有部分を繰り返すため、Oracleが使用しているメモリーの量が実際よ
りも多く表示されます。
psコマンドは、プロセス・サイズをページで返します。システムのパッケージ・サイズは、
アーキテクチャによって異なります。 pagesizeコマンドを使用して、サイズが4096バイト
と8192バイトのどちらかであるかを確認します。各プロセスについて、SZ値とページ・サ
イズを掛けます。
Oracle実行ファイルのテキスト・サイズと、システムで実行中のその他のすべてのOracle
Tool実行ファイルのテキスト・サイズを、その小計に加算します。実行ファイルが何度起動
されても、実行ファイルのサイズがカウントされるのは1回のみです。参照: psコマンドで使用できるスイッチのリストについては、Linux
http://otndnld.oracle.co.jp/document/products/iserver/oracle8i/817/linux/J02813-01_AR.pdf
Intelのドキュメントを参照してください。
す、すばらしいドキュメント!ありがとうございます!!
まとめ
- Oracle Database が使うメモリは以下の式で表すことができる。
実行バイナリ + 共有ライブラリ + SGA + プロセス数 × 1プロセスの実質メモリ使用量 + ソート用領域
- 「実行バイナリ + 共有ライブラリ」のサイズはPMONプロセスのメモリの内訳をpmapコマンドで表示し、アクセス権が「r-x--」の領域の合計で算出することができる。
$ pgrep -f ora_pmon|xargs -n1 pmap|perl -lane 'if($F[2] eq q/r-x--/){chop($F[1]);$s+=$F[1];print};END{print "total: ${s}K"}' 00110000 88K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclsra11.so 00127000 640K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocr11.so 001c8000 76K r-x-- /lib/libnsl-2.5.so 001db000 4K r-x-- /lib/libnsl-2.5.so 001e3000 632K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocrb11.so 00282000 340K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libasmclnt11.so 002e4000 28K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnque11.so 002ee000 36K r-x-- /lib/libnss_files-2.5.so 002f7000 4K r-x-- /lib/libnss_files-2.5.so 0044c000 104K r-x-- /lib/ld-2.5.so 00466000 4K r-x-- /lib/ld-2.5.so 004e6000 752K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libskgxp11.so 005b6000 148K r-x-- /lib/libm-2.5.so 005db000 4K r-x-- /lib/libm-2.5.so 005df000 8K r-x-- /lib/libdl-2.5.so 005e1000 4K r-x-- /lib/libdl-2.5.so 005e5000 76K r-x-- /lib/libpthread-2.5.so 005f8000 4K r-x-- /lib/libpthread-2.5.so 005fe000 28K r-x-- /lib/librt-2.5.so 00605000 4K r-x-- /lib/librt-2.5.so 0068f000 4K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libodmd11.so 0072c000 40K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocrutl11.so 00737000 1276K r-x-- /lib/libc-2.5.so 00876000 8K r-x-- /lib/libc-2.5.so 00946000 4K r-x-- /usr/lib/libaio.so.1.0.1 009d3000 4K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libskgxn2.so 00a32000 2164K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so 00e13000 4K r-x-- [ anon ] 00eda000 120K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libdbcfg11.so 00f47000 248K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libcell11.so 00f8a000 3888K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libhasgen11.so 08048000 136740K r-x-- /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle total: 147484K
- 「SGA」はPMONプロセスのメモリの内訳をpmapコマンドで表示し、アクセス権が「...s..」の領域の合計で算出することができる。
$ pgrep -f ora_pmon|xargs -n1 pmap|perl -lane 'if($F[2] eq q/rwxs-/){chop($F[1]);$s+=$F[1];print};END{print "total: ${s}K"}' 001e1000 4K rwxs- /u01/app/oracle/product/11.2.0/dbhome_1/dbs/hc_orcl.dat 20001000 4092K rwxs- /dev/shm/ora_orcl_98305_0 20400000 4096K rwxs- /dev/shm/ora_orcl_98305_1 20800000 4096K rwxs- /dev/shm/ora_orcl_98305_2 20c00000 4096K rwxs- /dev/shm/ora_orcl_98305_3 21000000 4096K rwxs- /dev/shm/ora_orcl_98305_4 21400000 4096K rwxs- /dev/shm/ora_orcl_98305_5 21800000 4096K rwxs- /dev/shm/ora_orcl_98305_6 21c00000 4096K rwxs- /dev/shm/ora_orcl_98305_7 22000000 4096K rwxs- /dev/shm/ora_orcl_98305_8 22400000 4096K rwxs- /dev/shm/ora_orcl_98305_9 22800000 4096K rwxs- /dev/shm/ora_orcl_98305_10 22c00000 4096K rwxs- /dev/shm/ora_orcl_98305_11 23000000 4096K rwxs- /dev/shm/ora_orcl_98305_12 23400000 4096K rwxs- /dev/shm/ora_orcl_98305_13 23800000 4096K rwxs- /dev/shm/ora_orcl_98305_14 23c00000 4096K rwxs- /dev/shm/ora_orcl_98305_15 24000000 4096K rwxs- /dev/shm/ora_orcl_98305_16 24400000 4096K rwxs- /dev/shm/ora_orcl_98305_17 24800000 4096K rwxs- /dev/shm/ora_orcl_98305_18 24c00000 4096K rwxs- /dev/shm/ora_orcl_98305_19 25000000 4096K rwxs- /dev/shm/ora_orcl_98305_20 25400000 4096K rwxs- /dev/shm/ora_orcl_98305_21 25800000 4096K rwxs- /dev/shm/ora_orcl_98305_22 25c00000 4096K rwxs- /dev/shm/ora_orcl_98305_23 26000000 4096K rwxs- /dev/shm/ora_orcl_98305_24 26400000 4096K rwxs- /dev/shm/ora_orcl_98305_25 26800000 4096K rwxs- /dev/shm/ora_orcl_98305_26 26c00000 4096K rwxs- /dev/shm/ora_orcl_98305_27 27000000 4096K rwxs- /dev/shm/ora_orcl_98305_28 27400000 4096K rwxs- /dev/shm/ora_orcl_98305_29 27800000 4096K rwxs- /dev/shm/ora_orcl_98305_30 27c00000 4096K rwxs- /dev/shm/ora_orcl_98305_31 28000000 4096K rwxs- /dev/shm/ora_orcl_98305_32 28400000 4096K rwxs- /dev/shm/ora_orcl_98305_33 28800000 4096K rwxs- /dev/shm/ora_orcl_98305_34 28c00000 4096K rwxs- /dev/shm/ora_orcl_98305_35 29000000 4096K rwxs- /dev/shm/ora_orcl_98305_36 29400000 4096K rwxs- /dev/shm/ora_orcl_98305_37 29800000 4096K rwxs- /dev/shm/ora_orcl_98305_38 29c00000 4096K rwxs- /dev/shm/ora_orcl_98305_39 2a000000 4096K rwxs- /dev/shm/ora_orcl_98305_40 2a400000 4096K rwxs- /dev/shm/ora_orcl_98305_41 2a800000 4096K rwxs- /dev/shm/ora_orcl_98305_42 2ac00000 4096K rwxs- /dev/shm/ora_orcl_98305_43 2b000000 4096K rwxs- /dev/shm/ora_orcl_98305_44 2b400000 4096K rwxs- /dev/shm/ora_orcl_98305_45 2b800000 4096K rwxs- /dev/shm/ora_orcl_98305_46 2bc00000 4096K rwxs- /dev/shm/ora_orcl_98305_47 2c000000 4096K rwxs- /dev/shm/ora_orcl_98305_48 2c400000 4096K rwxs- /dev/shm/ora_orcl_98305_49 2c800000 4096K rwxs- /dev/shm/ora_orcl_98305_50 2cc00000 4096K rwxs- /dev/shm/ora_orcl_98305_51 2d000000 4096K rwxs- /dev/shm/ora_orcl_98305_52 2d400000 4096K rwxs- /dev/shm/ora_orcl_98305_53 2d800000 4096K rwxs- /dev/shm/ora_orcl_98305_54 2dc00000 4096K rwxs- /dev/shm/ora_orcl_98305_55 2e000000 4096K rwxs- /dev/shm/ora_orcl_98305_56 2e400000 4096K rwxs- /dev/shm/ora_orcl_98305_57 2e800000 4096K rwxs- /dev/shm/ora_orcl_98305_58 2ec00000 4096K rwxs- /dev/shm/ora_orcl_98305_59 2f000000 4096K rwxs- /dev/shm/ora_orcl_98305_60 2f400000 4096K rwxs- /dev/shm/ora_orcl_98305_61 2f800000 4096K rwxs- /dev/shm/ora_orcl_98305_62 2fc00000 4096K rwxs- /dev/shm/ora_orcl_98305_63 30000000 4096K rwxs- /dev/shm/ora_orcl_98305_64 30400000 4096K rwxs- /dev/shm/ora_orcl_98305_65 30800000 4096K rwxs- /dev/shm/ora_orcl_98305_66 30c00000 4096K rwxs- /dev/shm/ora_orcl_98305_67 31000000 4096K rwxs- /dev/shm/ora_orcl_98305_68 31400000 4096K rwxs- /dev/shm/ora_orcl_98305_69 31800000 4096K rwxs- /dev/shm/ora_orcl_98305_70 31c00000 4096K rwxs- /dev/shm/ora_orcl_98305_71 32000000 4096K rwxs- /dev/shm/ora_orcl_98305_72 32400000 4096K rwxs- /dev/shm/ora_orcl_98305_73 32800000 4096K rwxs- /dev/shm/ora_orcl_98305_74 32c00000 4096K rwxs- /dev/shm/ora_orcl_98305_75 33000000 4096K rwxs- /dev/shm/ora_orcl_98305_76 33400000 4096K rwxs- /dev/shm/ora_orcl_98305_77 33800000 4096K rwxs- /dev/shm/ora_orcl_98305_78 33c00000 4096K rwxs- /dev/shm/ora_orcl_98305_79 34000000 4096K rwxs- /dev/shm/ora_orcl_98305_80 34400000 4096K rwxs- /dev/shm/ora_orcl_98305_81 34800000 4096K rwxs- /dev/shm/ora_orcl_98305_82 34c00000 4096K rwxs- /dev/shm/ora_orcl_98305_83 35000000 4096K rwxs- /dev/shm/ora_orcl_98305_84 35400000 4096K rwxs- /dev/shm/ora_orcl_98305_85 35800000 4096K rwxs- /dev/shm/ora_orcl_98305_86 35c00000 4096K rwxs- /dev/shm/ora_orcl_98305_87 36000000 4096K rwxs- /dev/shm/ora_orcl_98305_88 36400000 4096K rwxs- /dev/shm/ora_orcl_98305_89 36800000 4096K rwxs- /dev/shm/ora_orcl_98305_90 36c00000 4096K rwxs- /dev/shm/ora_orcl_98305_91 37000000 4096K rwxs- /dev/shm/ora_orcl_98305_92 37400000 4096K rwxs- /dev/shm/ora_orcl_98305_93 37800000 4096K rwxs- /dev/shm/ora_orcl_98305_94 37c00000 4096K rwxs- /dev/shm/ora_orcl_98305_95 38000000 4096K rwxs- /dev/shm/ora_orcl_98305_96 38400000 4096K rwxs- /dev/shm/ora_orcl_98305_97 38800000 4096K rwxs- /dev/shm/ora_orcl_98305_98 38c00000 4096K rwxs- /dev/shm/ora_orcl_98305_99 39000000 4096K rwxs- /dev/shm/ora_orcl_98305_100 39400000 4096K rwxs- /dev/shm/ora_orcl_98305_101 total: 417792K
- 各プロセスが使用する実質メモリ使用量、つまり共有メモリ、共有ライブラリ、実行バイナリなどを除いたサイズは、各プロセスのメモリの内訳をpmapコマンドで表示し、アクセス権が「rwx--」の領域の合計で算出することができる。
$ pgrep -f ora_pmon|xargs -n1 pmap|perl -lane 'if($F[2] eq q/rwx--/){chop($F[1]);$s+=$F[1];print};END{print "total: ${s}K"}' 00126000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclsra11.so 001c7000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocr11.so 001dc000 4K rwx-- /lib/libnsl-2.5.so 001dd000 16K rwx-- [ anon ] 001e2000 4K rwx-- [ anon ] 00281000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocrb11.so 002d7000 52K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libasmclnt11.so 002eb000 8K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnque11.so 002ed000 4K rwx-- [ anon ] 002f8000 4K rwx-- /lib/libnss_files-2.5.so 002f9000 484K rwx-- [ anon ] 00379000 4K rwx-- [ anon ] 0037a000 24K rwx-- /dev/zero 00380000 64K rwx-- /dev/zero 00390000 64K rwx-- /dev/zero 003a0000 64K rwx-- /dev/zero 003b0000 296K rwx-- /dev/zero 003fa000 260K rwx-- [ anon ] 00467000 4K rwx-- /lib/ld-2.5.so 005a2000 12K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libskgxp11.so 005dc000 4K rwx-- /lib/libm-2.5.so 005e2000 4K rwx-- /lib/libdl-2.5.so 005f9000 4K rwx-- /lib/libpthread-2.5.so 005fa000 8K rwx-- [ anon ] 00606000 4K rwx-- /lib/librt-2.5.so 00690000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libodmd11.so 006c5000 4K rwx-- [ anon ] 00736000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libocrutl11.so 00878000 4K rwx-- /lib/libc-2.5.so 00879000 12K rwx-- [ anon ] 008c3000 4K rwx-- [ anon ] 00947000 4K rwx-- /usr/lib/libaio.so.1.0.1 0096b000 4K rwx-- [ anon ] 009d4000 4K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libskgxn2.so 00c4f000 184K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so 00c7d000 1096K rwx-- [ anon ] 00da1000 64K rwx-- [ anon ] 00df1000 64K rwx-- [ anon ] 00ef8000 8K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libdbcfg11.so 00f0b000 64K rwx-- [ anon ] 00f85000 20K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libcell11.so 01356000 40K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/lib/libhasgen11.so 01360000 16K rwx-- [ anon ] 105d1000 1004K rwx-- /u01/app/oracle/product/11.2.0/dbhome_1/bin/oracle 106cc000 200K rwx-- [ anon ] 1131c000 720K rwx-- [ anon ] bf941000 84K rwx-- [ stack ] total: 5012K
- 最後に、Oracle Database で使っているメモリサイズをSGA、共有されているPGA(実行バイナリ、共有ライブラリ等)、共有されていないPGA に分けて表示するシェルスクリプトを作ってみた。
#!/bin/bash export LANG=C # show SGA pgrep -f ora_pmon|xargs -n1 pmap|\ perl -lane 'if($F[2] eq q/rwxs-/){chop($F[1]);$s+=$F[1]};END{print "SGA: ${s}K"}' # show PGA(SHARED) pgrep -f ora_pmon|xargs -n1 pmap|\ perl -lane 'if($F[2] eq q/r-x--/){chop($F[1]);$s+=$F[1]};END{print "PGA(SHARED): ${s}K\n"}' # show PGA(NOT SHARED) echo 'PGA(NOT SHARED):' echo 'PID NAME KB' echo '---- ------------- ------' pgrep -f '^ora_|^oracle'|while read LINE do echo ${LINE} `cat /proc/${LINE}/cmdline` `pmap ${LINE}|\ perl -lane 'if($F[2] eq q/rwx--/){chop($F[1]);$s+=$F[1]}END{print "$s"}'` done
実行してみるとこんな感じ。
$ ./show_oracle_memory_size.sh SGA: 417796K PGA(SHARED): 147484K PGA(NOT SHARED): PID NAME KB ---- ------------- ------ 3129 ora_pmon_orcl 5012 3131 ora_vktm_orcl 4448 3135 ora_gen0_orcl 4448 3137 ora_diag_orcl 4448 3139 ora_dbrm_orcl 4456 3141 ora_psp0_orcl 4448 3143 ora_dia0_orcl 4960 3145 ora_mman_orcl 4448 3147 ora_dbw0_orcl 8348 3149 ora_lgwr_orcl 20000 3151 ora_ckpt_orcl 4448 3153 ora_smon_orcl 11192 3155 ora_reco_orcl 4448 3157 ora_mmon_orcl 9180 3159 ora_mmnl_orcl 4448 3161 ora_d000_orcl 4984 3163 ora_s000_orcl 4456 3199 ora_qmnc_orcl 4448 3213 ora_cjq0_orcl 9088 3229 ora_q000_orcl 4992 3231 ora_q001_orcl 4448 3240 oracleorcl(LOCAL=NO) 5000 3245 oracleorcl(LOCAL=NO) 4472 3248 oracleorcl(LOCAL=NO) 4472 3251 oracleorcl(LOCAL=NO) 4472 3254 oracleorcl(LOCAL=NO) 4472 3262 ora_smco_orcl 4448 14192 ora_w000_orcl 4448
このエントリを読んで頂いた方へ。
これであっているのかどうかわからないので、このエントリを鵜呑みにしないでください。
違うよってところがありましたら、ツッコミお願いします。
追記:
http://homepage3.nifty.com/owl_h0h0/unix/job/ORACLE/oracle/pmap_solaris.html
read/exec: テキストセグメント(命令部分) read/write/exec: データセグメントまたはスタックセグメント(データ領域) read/write/exec/shared: 共用メモリ
関連
参考
- 絵で見てわかるOS/ストレージ/ネットワーク~データベースはこう使っている (DB Magazine Selection) P.50-83
- [24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ) P.197-202
- http://otndnld.oracle.co.jp/document/products/iserver/oracle8i/817/linux/J02813-01_AR.pdf
- Linux のプロセスが Copy on Write で共有しているメモリのサイズを調べる - naoyaのはてなダイアリー
- メモリーの構成と使用方法
- 動的パフォーマンス(V$)・ビュー: V$NLS_PARAMETERS〜V$XML_AUDIT_TRAIL
- http://docs.sun.com/app/docs/doc/819-1210/pmap-1?l=ja&a=view
- http://homepage3.nifty.com/owl_h0h0/unix/job/ORACLE/oracle/pmap_solaris.html