2012-02-08
OPatch の -bugs_fixed オプション
OPatch の -bugs_fixed オプションってパッチの説明が表示されてわかりやすいですね。
以下は 11.1 のマニュアルからの抜粋です。
- Oracle Universal InstallerおよびOpatchユーザーズ・ガイド 11gリリース1(11.1) for Microsoft Windows and UNIX Systems E05707-05
-bugs_fixedオプションの例
次の例では、opatch lsinventory -bugs_fixed ascの出力を示します。
Oracle interim Patch Installer version 11.1.0.6.6 Copyright (c) 2009, Oracle Corporation. All rights reserved.. Oracle Home : /home/oracle_TEST/product/11.1.0/db_1 Central Inventory : /home/OUIHome_Opatch from : /home/oracle_TEST/product/11.1.0/db_1/oraInst.loc OPatch version : 11.1.0.6.6 OUI version : 11.1.0.6.6 OUI location : /home/oracle_TEST/product/11.1.0/db_1/oui Log file location : /home/oracle_ TEST/product/11.1.0/db1/cfgtoollogs/opatch/opatch-2008_May_25_11-09-34-IST_Wed.log Patch history file: /scratch/userid/newDB/cfgtoollogs/opatch/opatch_history.txt Lsinventory Output file location : /home/oracle_TEST/product/11.1.0/db_ 1/cfgtoollogs/opatch/lsinv/lsinventory-2008_May_25_11-09-34-IST_Wed.txt -------------------------------------------------------------------------------- Installed Top-level Products (2): Oracle Database 11g 11.1.0.6.6 Oracle Database 11g Release 2 Patch Set 2 11.1.0.6.6 There are 2 products installed in this Oracle Home. List of Bugs fixed by Installed Patches: Bug Fixed by Installed at Description Patch --- -------- ------------ ----------- 1000000 6079591 Mon Oct 13 02:03:42 PDT 2008 test bug 6079591 6079591 Mon Oct 13 02:03:42 PDT 2008 MLR BUG FOR 10.2.0:.3 FOR CPU:JUL2:007 300500 300500 Fri Sep 05 02:25:34 PDT 2008 Demo bug for patching files 300501 300500 Fri Sep 05 02:25:34 PDT 2008 Demo bug for patching files 300502 300500 Fri Sep 05 02:25:34 PDT 2008 Demo bug for patching files 6121268 6121268 Tue Aug 19 23:32:33 PDT 2008 DB-10.2.0.3-MOLECULE-007-CPUJUL2007 6121266 6121266 Tue Aug 19 23:32:27 PDT 2008 DB-10.2.0.3-MOLECULE-018-CPUJUL2007 6121264 6121264 Tue Aug 19 23:32:22 PDT 2008 DB-10.2.0.3-MOLECULE-017-CPUJUL2007 6121263 6121263 Tue Aug 19 23:32:14 PDT 2008 DB-10.2.0.3-MOLECULE-016-CPUJUL2007 ..... ..... (Middle section of report is intentionally excluded.) ..... ..... 6121248 6650096 Tue Feb 12 05:50:48 PST 2008 DB-10.2.0.3-MOLECULE-015-CPUJUL2007 6650096 6650096 Tue Feb 12 05:50:48 PST 2008 DB-10.2.0.3-MOLECULE-036-CPUJAN2008 6121247 6650095 Tue Feb 12 05:50:41 PST 2008 DB-10.2.0.3-MOLECULE-006-CPUAPR2007 6397946 6650095 Tue Feb 12 05:50:41 PST 2008 DB-10.2.0.3-MOLECULE-031-CPUOCT2007 6650095 6650095 Tue Feb 12 05:50:41 PST 2008 DB-10.2.0.3-MOLECULE-035-CPUJAN2008 6650081 6650081 Tue Feb 12 05:50:35 PST 2008 DB-10.2.0.3-MOLECULE-034-CPUJAN2008 6646853 6646853 Tue Feb 12 05:50:28 PST 2008 MLR BUG FOR 10.2.0.3 FOR CPUJAN2008 6452863 6452863 Tue Feb 12 05:50:12 PST 2008 TRACKING BUG FOR CPUJUL2007 --------------------------------------------------------------------------------OPatchを使用したOracleソフトウェアへのパッチの適用
2012-02-05
200万ページビューを超えました
気が付いたら、200万ページビューを超えていました。
ブログを始めたのは2008年10月から、ちょうど Oracle Database 関連の仕事にシフトしたときからです。
それまでもはてなダイアリーの他に、livedoor BlogやBloggerでブログを作ってみたり、wiki を作ったりしていましたが、三日坊主でした。そういえば昔 wiki を書いていたのを忘れてました。
まだ残ってました。
追記系のブログより更新系の wiki のほうが好きなんですが、ブログは思いついたことをさくっと書けるのと、コメントやスターをもらったり、はてなブックマークがついたり、購読者が増えたりするとうれしかったりしてモチベーションが上がるところがいいと思います。初めてコメントをもらったのはブログを書き始めてから1年後くらいだった気がしますが、とても嬉しかったのを覚えています。
このブログは人に見せるためというより自分の備忘録としてチラシの裏の落書き的なノリで書いていますが、ここ最近の2回の転職では武器として使いましたし、最近はお会いした方にブログ知ってますと言われてちょっと嬉しかったりすることもあります。
今後もコツコツと自由に思ったことを書いていこうと思います。
- 購読者数とブックマーク数
- 購読者数の推移
- ブックマーク数の推移
追記:
ブログを書くメリットを書いてみる。
CPUバウンドとI/Oバウンド
[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)
- 作者: 伊藤直也,田中慎司
- 出版社/メーカー: 技術評論社
- 発売日: 2010/07/07
- メディア: 単行本(ソフトカバー)
- 購入: 69人 クリック: 1,589回
- この商品を含むブログ (112件) を見る
P.41
一般的に負荷は大きく二つに分類されます。
たとえば、大規模な科学計算を行うプログラムがあったとして、そのプログラムはディスクとの入出力(Input/Output、I/O)は行わないが、処理が完了するまでに相当の時間を要するとします。「計算をする」ということからも想像がつくとおり、このプログラムの処理速度はCPUの計算速度に依存しています。これがCPUに負荷をかけるプログラムです。「CPUバウンドなプログラム」とも呼ばれます。
一方、ディスクに保存された大量のデータから任意のドキュメントを探し出す検索プログラムがあったとします。この検索プログラムの処理速度はCPUではなく、ディスクの読みだし速度、つまり入出力に依存するでしょう。ディスクが速ければ速いほど、検索にかかる時間は短くなります。I/Oに負荷をかける種類のプログラムということで、「I/Oバウンドなプログラム」と呼ばれます。
一般に、APサーバはDBから取得したデータを加工してクライアントに渡す処理を行います。その過程で大規模なI/Oを発生させることは稀です。よて多くの場合、APサーバはCPUバウンドなサーバであるといえます。
一方、Webアプリケーションを構成するもう一つの要素システムであるDBサーバは、データをディスクから検索するのが主な仕事で、とくにデータが大規模になればなるほど、CPUでの計算時間よりもI/Oに対するインパクトが大きくなるI/Oバウンドなサーバです。同じサーバでも、負荷の種類が違えばその特性は大きく変わってきます。
多くのソフトウェア・アプリケーションのパフォーマンスは、本質的にディスクI/Oによって制限されます。CPUタイムの大部分をI/Oアクティビティが完了するまでの待機に使用するアプリケーションはI/Oバウンドと呼ばれます。
Oracleは、適切に作成されたアプリケーションのパフォーマンスが、I/Oで制限されないように設計されています。I/Oシステムが最大限またはそれに近い状態で動作しており、許容時間内にI/Oリクエストに対応できない場合は、I/Oのチューニングを行うと、アプリケーションのパフォーマンスを向上できます。ただし、アプリケーションがI/Oバウンドではない場合(たとえば、CPUが制限要因である場合)、I/Oをチューニングしてもパフォーマンスを改善できません。
I/O構成および設計
In computer science, I/O bound refers to a condition in which the time it takes to complete a computation is determined principally by the period spent waiting for input/output operations to be completed. This is the opposite of a task being CPU bound. This circumstance arises when the rate at which data is requested is slower than the rate it is consumed or, in other words, more time is spent requesting data than processing it.
bound は「縛られた、束縛された」という意味の形容詞なんですね。
Java、C/C++、Go の性能差
調べものをしようとパラパラッと見ていたら、面白いことが書かれていたのでメモ。
オンラインゲームを支える技術 ??壮大なプレイ空間の舞台裏 (WEB+DB PRESS plus)
- 作者: 中嶋謙互
- 出版社/メーカー: 技術評論社
- 発売日: 2011/03/24
- メディア: 単行本(ソフトカバー)
- 購入: 28人 クリック: 1,576回
- この商品を含むブログ (42件) を見る
P.23
オンラインゲーム特有の理由による言語の性能差
表0.1 で、JavaのスループットがC/C++に比べて10倍も低くなっている理由はオンラインゲームに特有のことです。一般的にJIT(Just In Time)コンパイラを備えている仮想マシン(Virtual Machine、VM)では、Javaの実行速度はJITコンパイルの効果で速くなり、場合によってはC言語よりも速い場合があります。
ただし、その効果は処理内容がCPUセントリックなものだけで、OSとの入出力を頻繁に行うアプリケーションでは成り立ちません。
(中略)
これはJava VMがシステムコールを呼び出す前後で、バッファオーバーフローのチェックや例外オブジェクトの処理などを毎回やるためです。これらは省けない処理なので、VMを使う処理系では限界があります。オンラインゲームのサーバはネットワークに対する入出力が毎秒数万回以上発生する状態になるので、JavaとC言語の速度差が生じる典型的なケースなのです。ApacheやMySQLなどのサーバソフトウェアがC/C++で書かれているのも同様の理由があると考えられます。
(中略)
ちなみに、GoogleのGo言語は静的言語でネイティブ実行ですが、ガベージコレクションがありプログラマが型付けの強さをコードの部分ごとに選択できるという新しい提案なので、サーバ性能を犠牲にせずに開発効率を上げられる可能性があり、筆者は期待しています。Goolgeはサーバ開発のことをほんとによくわかっているなぁと感嘆することしきりです。
Go についてぐぐってみたら、Google の鵜飼さんのコメントを発見した。
Go 言語は UNIX や Plan9 をはじめ多くのシステムプログラムを作ってきた優れた開発者たちが作った言語ですから、彼らにとっていいプログラムを書きやすい言語になっているはずなので、いいプログラムを書きやすくなっていると思います。ネットワークサーバーなんかに向いていますね。最適化やガーベジコレクションの実装などは改善の余地があるので、高性能が厳しく要求されるところに使うのはまだ早いかもしれません。
インタビュー:Go言語について - Google Japan Developer Relations Blog
本家のサイトに行ってみると、「get the most out of multicore and networked machines」と書かれていますね。興味深い。
Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system enables flexible and modular program construction.
The Go Programming Language
え、「今頃気付いた?」って。だいたい世の中の流行から3年遅れで興味を持ち出すんです、私w
レスポンスとスループット
- 作者: デイビッド・A・パターソン,ジョン・L・ヘネシー,成田光彰
- 出版社/メーカー: 日経BP社
- 発売日: 2011/11/17
- メディア: 単行本
- 購入: 1人 クリック: 4回
- この商品を含むブログ (2件) を見る
P.221
性能の測定基準はいろいろある。巡航速度が最も速い旅客機を選ぶなら、コンコルドとなる。航続距離が最も長いのはDC-8となる。搭乗人員数が最も多いものを選ぶならば、ボーイング747ということになる。
2台の別々のデスクトップ・コンピュータ上で同じプログラムを実行する場合は、先にジョブを終えたデスクトップ・コンピュータの方が速いと言うだろう。しかし、大勢のユーザーからジョブが投入されるタイムシェアリング方式の大型コンピュータを稼働させているコンピュータ・センターでは、すべてのジョブを先に終わらせたコンピュータのほうが速いと言うだろう。個人のコンピュータ・ユーザーは応答時間(response time)の短さに感心がある。応答時間とは、作業を開始してから終了するまでの時間であり、実行時間(execution time)とも言う。コンピュータ・センターの管理者はスループット(throughput)を増やすことに関心がある。このスループットとは、一定時間内に終了した作業の総量である。
P.234
これらのサーバー用ベンチマークでは一般にスループットが重視される。ただしデータベースの照会やWebページの要求などといった%3ピュータ・センターの管理者はスループット(throughput)を増やすことに関心がある。このスループットとは、一定時間内に終了した作業の総量である。
P.234
これらのサーバー用ベンチマークでは一般にスループットが重視される。ただしデータベースの照会やWebページの要求などといった個々のイベントの応答時間に対して、何がしかの要求が課される場合もある。
基礎から学ぶOracle SQLチューニング (DB Magazine SELECTION)
- 作者: 加藤祥平,中島益次郎
- 出版社/メーカー: 翔泳社
- 発売日: 2009/09/17
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 72回
- この商品を含むブログ (4件) を見る
P.134
システムのパフォーマンスは、ほとんどの場合スループットとレスポンスで計ります。スループットとは、単位時間あたりの処理量を意味し、レスポンスとは1処理あたりの所要時間を意味します。スループットを増やした場合にもレスポンスが劣化しないで処理しきれる場合、スケーラブルであると言います。
スループット(英: Throughput)は、一般に単位時間当たりの処理能力のこと。
応答時間(おうとうじかん)またはレスポンスタイム(英: Response time)は、工学やテクノロジーにおいて、システムや実行ユニットが入力を与えられてから反応するまでにかかる時間を指す。
追記(2012/02/06):
*1:もちろん、一般的な技術ネタなど公開可能なことしか書きません
2012-02-01
iowait について
iowait の時間って、I/O要求を出しているプロセスは Disk Sleep しているという理解でいいんだろうか。
ちょっとわからなくなってきた。
/* * Account for idle time. * @cputime: the cpu time spent in idle wait */ void account_idle_time(cputime_t cputime) { struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat; cputime64_t cputime64 = cputime_to_cputime64(cputime); struct rq *rq = this_rq(); if (atomic_read(&rq->nr_iowait) > 0) cpustat->iowait = cputime64_add(cpustat->iowait, cputime64); else cpustat->idle = cputime64_add(cpustat->idle, cputime64); }
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=20751&forum=10
このへんに書いてますが、断片的なのでまとめます。
・I/O wait はidleの一種です。
・CPUがidleであった時間のうち、I/Oが進行中であった時間は I/O wait として
記録されます。idle として記録されているのはそれ以外の残りの時間です。
・「I/Oが進行中であった時間」とは、I/O待ちで休止しているプロセスが
ひとつでも存在していた時間のことです。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=29121&forum=10
iowaitは、 CPUがアイドル状態で、システムに未処理のディスク入出力要求があった時間の割合を意味しますが、iowaitの状態であれば、CPUを必要とするプロセスが他にある場合には、そのプロセスがCPUを使用することが可能です。
つまり、iowaitが98%であってもCPUの負荷が高い状態ではありません。
一般的に、usとsyの列の値を足した値をCPU使用率と見ます。
そのため、iowaitが98%であることだけでは業務への影響が大きいとは言えません。
Infosia, Inc. » Blog Archive » 備忘録: vmstat の iowait について
iowaitは、 CPUがアイドル状態で、システムに未処理のディスク入出力要求があった時間の割合を意味しますが、iowaitの状態であれば、CPUを必要とするプロセスが他にある場合には、そのプロセスがCPUを使用することが可能です。
つまり、iowaitが98%であってもCPUの負荷が高い状態ではありません。
一般的に、usとsyの列の値を足した値をCPU使用率と見ます。
備忘録
他のプロセスがCPUを使えるのはわかるけど、プロセスがCPU上でスピンしてるのか Disk Sleep しているのか、両方ありえるのか。スピンしてたらユーザーモードでカウントされそうだな。Disk Sleep してそうな気がする。
よく考えると、システムコール発行したらコンテキストスイッチが発生してスリープするから、TASK_UNINTERRUPTIBLE で Disk Sleep してるか。CPU が空いてるのに、I/O要求が残っている場合に iowait としてカウントされるんだな。たぶん。
vmstat の出力結果を整形する Perl ワンライナー
2011-10-14 04:05:01
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
2 0 0 535206 3325748 0 0 0 0 0 0 0 2043 5411 125 0 5 95
4 0 0 535206 3324971 0 0 0 0 0 0 0 3810 2980 234 0 6 94
2011-10-14 04:06:01
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
2 0 0 535206 3324971 0 0 0 0 0 0 0 2043 8413 224 0 5 95
4 0 0 597237 3325993 0 0 0 0 0 0 0 3354 2695 373 1 5 94
2011-10-14 04:07:01
procs memory page faults cpu
r b w avm free re at pi po fr de sr in sy cs us sy id
2 0 0 535206 3324971 0 0 0 0 0 0 0 2043 2423 133 0 5 95
4 0 0 597237 3325993 0 0 0 0 0 0 0 9983 5675 124 1 6 93
こういう vmstat の出力結果を、
$ perl -nle '$.==3 and print qq/ date $_/;/^([\d\-]+ [\d:]+)/ and $.>1 and print qq/$d $l/;/^([\d\-]+ [\d:]+)/ and $d=$1;$l=$_' vmstat.log date r b w avm free re at pi po fr de sr in sy cs us sy id 2011-10-14 04:05:01 4 0 0 535206 3324971 0 0 0 0 0 0 0 3810 2980 234 0 6 94 2011-10-14 04:06:01 4 0 0 597237 3325993 0 0 0 0 0 0 0 3354 2695 373 1 5 94
2012-01-31
Perl で変数を使ってファイルハンドル名を動的に生成する
こんな感じでできたのでメモ。
ソースコード
- filehandle.pl
#!/usr/bin/env perl use strict; use warnings; my @array = (1,2,3,4,5,6,7,8,9,10); foreach my $item (@array) { no strict "refs"; my $fh = "OUT${item}"; open (${$fh}, ">", "${item}.txt"); print({${$fh}} "$item\n"); close(${$fh}); } __END__
実行結果
$./filehandle.pl $ ls 1.txt 10.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt filehandle.pl $ cat *.txt 1 10 2 3 4 5 6 7 8 9
Perl の grep sort map とか
- 作者: トムクリスチャンセン,ネイザントーキントン,Tom Christiansen,Nathan Torkington,Shibuya Perl Mongers,ドキュメントシステム
- 出版社/メーカー: オライリージャパン
- 発売日: 2004/09
- メディア: 単行本
- クリック: 48回
- この商品を含むブログ (53件) を見る
レシピ9.5 ディレクトリ内のすべてのファイルを処理する
P.444
の grep、map、sort をつなげてフィルタ処理する書き方が便利そうだなと思ったので試してみた。
$ perl -e '@array=(1,2,3,4,5,6,7,8,9,10); map{printf(qq/%02d\n/,$_)} sort{$b<=>$a} grep{$_<5} @array' 04 03 02 01
こんな具合に。それだけです。
String found where operator expected at ... (Missing operator before ...?)
String found where operator expected at ./status_log_spliter.pl line 109, near "} "$line\n"" (Missing operator before "$line\n"?)
ある Perl スクリプトを実行すると、実行はできるけど「String found where operator expected」と怒られるので、
print(${$fh} "$line\n");
を
print({${$fh}} "$line\n");
に変更してみたら出なくなった。



