2015年12月7日月曜日

Oracle Databaseで私がよく見るV$表

今回の記事は、弊社バルテックのアドベントカレンダーにエントリーしています。

Oracle Databaseには現在の状態を調べたいときに確認できるV$表(動的パフォーマンスビュー)というビューが存在しています。
※SQLServerでは同じようなビューとして「動的管理ビュー」が用意されていますね。
V$表の確認にはDBA権限が必要です。RAC環境ではGV$表で確認すると、RAC環境のすべてのインスタンスを取得することができます。

V$表は数百も用意されていますので、さすがにすべて紹介することはできません。今日は私が良く見るV$表を紹介します。


v$instance
現行インスタンスの状態を確認できます。
インスタンスとは、データベースシステムのまとまりのことを言います。
インスタンス名、ホスト名、起動状態などを確認できます。
様々な管理作業をする際、作業対象が想定したものであるかを確認する際に使用します。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_2002.htm

v$database
データベースの状態を確認できます。
データベース名、アーカイブログモード、データベースロールなどを確認できます。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1097.htm

v$session
現在実行中のセッションの状態を確認できます。
SQLID、待機イベント、ログイン時間、待機時間などを確認できます。
SQLの長時間化を調査する際に、対象を絞り込むときに使っています。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_3016.htm
履歴はv$active_session_historyに記録されています。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1007.htm

v$sql
共有SQL領域にあるSQLの実行回数、SQLテキスト、書き込み読み込みの累計時間、待機時間の累計時間などを確認できます。
SQLIDからSQLテキストを確認できるため、SQLの内容を確認する際に使っています。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_3043.htm

v$datafile
データベースに紐づいているデータファイルの状態を確認できます。
表領域名とデータファイルのフルパス、最終変更時間、サイズ、状態(オンライン、オフライン、リカバリ要など)を確認できます。
同じ筺体内に複数インスタンスのデータファイルが混在している場合などに、内容を確認するのに使っています。
https://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_1100.htm

v$parameter
現在有効となっている初期化パラメータの値を確認できます。
spfileですとファイルの中身を見ても内容を確認できないので、ちょっと調べたい場合に便利です。
show parameterもありますけど。
http://docs.oracle.com/cd/E16338_01/server.112/b56311/dynviews_2087.htm


他にも様々なv$表がありますので、気になった方は調べてみてはいかがでしょうか。

2015年12月2日水曜日

Oracle DatabaseのASMディスクグループの空き容量を調べる

Oracle DatabaseのASMディスクグループの空き容量を調べる


JPOUG Advent Calendar 2015の2日目です。
前日は吉川 和宏さんでした。


Oracle DatabaseでRACを使用するには、ストレージにASM(Automatic Storage Management)を使用することが多いと思います。
ASMでは、データファイルの格納にディスクグループが使用されます。ディスクグループは複数のディスクをまとめたものです。
格納されたデータファイルはディスクグループ内に均等に分散されるため、ディスクのパフォーマンスは均一になります。

ASMでは、ディスク故障に備えた冗長性を備えています。
・高冗長性   HIGH   3重化
・標準冗長性 NORMAL  2重化
・外部冗長性 EXTERNAL 冗長化なし(ストレージコピーなど他の機能冗長性を保証)

さて、ASMのディスク使用量を調べるには、ASMCMDユーティリティでlsdgをする、もしくはv$asm_diskgroupビューを確認します。


lsdgにはいくつかの項目がありますが、ディスクの残量はどれを見ればよいのでしょう。
State    Type    Rebal  Sector  Block       AU  Total_MB  Free_MB  Req_mir_free_MB  Usable_file_MB
MOUNTED  NORMAL  N         512   4096  4194304     12288     8835             1117            3859

容量の項目には以下のものがあります。マニュアルの説明を右に記載します。
Total_MB     : ディスク・グループのサイズ
Free_MB       : 冗長性を考慮しない場合のディスク・グループの空き領域(MB)
Req_mir_free_MB  : ディスク・グループで許容できる最悪の障害が発生した後、
             完全な冗長性をリストアするために
              ディスク・グループで使用可能にする必要のある領域の量
Usable_file_MB  : ミラー化のために調整され、新しいファイルに使用可能な空き領域の量


Free_MBは、「冗長性を考慮しない」とあるので、冗長化をしたディスクの場合はこの値で空き容量を見積もることはできません。
※冗長性が「外部冗長性」の場合はこの値を空き容量とみなして良いです。

では、残りの値を見てみましょう。Req_mir_free_MBとは何でしょう?
この値は冗長性によって違います。
標準冗長性の場合は、1個の障害グループの値となります。
高冗長性の場合は、2個の障害グループの値となります。

障害グループがそれぞれの個数が壊れても大丈夫なように容量を確保する必要があるということのようです。
障害グループを明示的に指定していない場合でも、それぞれのディスクが障害グループとして扱われています。
これらの障害グループ1つまたは2つ分がReq_mir_free_MBとして計算されます。


Usable_file_MBは、新しいファイルに使用可能な空き容量ですので、こちらの値が残り使用できるディスク容量です。
Usable_file_MBは以下の式で産出されます。

(Free_MB - Req_mir_free_MB) / Redundancy*
*冗長性によって異なります。標準冗長性は2、高冗長性は3です


この計算の結果、Usable_file_MBがマイナス値になることもあります。
ただちに問題が発生とならない可能性もありますが、
ファイルが追加できなかったり、次に障害が発生した場合にファイルの冗長性が失われることがあります。


ASMディスクグループの使用量について、実際にファイルを追加しながら表示の変化を検証しているブログが、
以下にあります。
OakTableにも参加されているBreederodeさんのものです。興味のある方は見てみてはいかがでしょうか。
https://prutser.wordpress.com/2013/01/03/demystifying-asm-required_mirror_free_mb-and-usable_file_mb/



明日は kenken0807 さんです。楽しみですね。