前回に続き、同じタイトルを使って行きたいと思います。
「監視しやすいアプリを構築するTips」という言葉は長ったらしいので、
略して「Module列の活用」とさせていただきます("省略"じゃなくて、"言い換え"ですが...)。
この「Module列」の活用って、実は結構古くからある機能なんです。
少なくとも、Oracle8iの時からありますし、私のお客様でもOracle8i (8.1.7.4)でも
ご活用いただいていました。
で、これって結局何?といわれると、V$SESSIONビューのモジュール列に反映されるものです。
SQL*Plusから実行するなら、こんな感じです。
SQL> SET APPINFO <任意の文字列> 例: SQL> SET APPINFO myappl |
DBAが稼動状況監視の時や万が一の障害発生時に最初に良く見る
V$SESSIONやDB Controlでは以下の様に反映されるのです。
これは内部的には、DBMS_APPLICATION_INFOというPL/SQLパッケージの
SET_MODULEというプロシージャが実行されているのです。
ということは?
もう、お分かりですね。
DBMS_APPLICATION_INFOパッケージを使えば、様々なアプリケーションからでも
このModule列に対してアプリケーション情報を設定できるのです。
アプリケーションを開発する時に、そのアプリケーションが運用において、
数十という種類のサービス、アプリケーション、そして実際には
数百~数千というデータベース・セッションの中に埋もれてしまうという
事を意識して開発する人は限られているのでは無いでしょうか?
障害の時、エラーが発生している時、その発生している状況を迅速かつ
正確に情報を収集できるかが早期解決の鍵になります。
データベース・インスタンス・レベルでの情報収集は自動ワークロード・
リポジトリ(Automatic Workload Repository:AWR)によって実施されています。
そこから、更に掘り下げたい場合には、SQLトレースを取得する事などが考えられます。
更に効率化を狙う時には、
・SQLチューニング・セットを作成する
・SQLチューニングアドバイザを実行する
・SQLアクセスアドバイザを実行する
などにより、まずはOracleデータベースが出してくるアドバイスを確認してみてください。
その結果を見ながら、それ以外の施策を取りうるのか、システムの特性、
業務の特性を理解した上での可能性を探る事が常套策でしょう。
そのようにしてはじき出した施策を実際に、いつ、どのようにして本番環境へ
適用するかまでの実行計画に時間を費やすことができるようになります。
いかに、クラウド化、仮想化、統合化が進んだとしても、そのような環境を
運用する側は、的確に現状を把握でき、万が一のトラブルの時にも
その環境に適した手法を持って診断や分析を行う事ができる術を身近に
利用可能にしておく必要があると思います。
そして、そのような環境に対してアプリケーションを展開していく開発者は、
監視がしやすいアプリケーションを作る事が望まれますし、監視を行いやすい
アプリケーションが開発・実行できるインフラストラクチャを選択する事が重要になります。
そんな想いから「雲の中でも安全運転なアプリ運用」というタイトルでお届けしました。