スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/SQLのボトルネック検出方法

備忘録として残しておきます。

Oracleのストアド・プロシージャを利用している処理で、突如20分→4時間と約10倍ほど時間がかかるようになりました。
ザックリとした処理内容は以下の通りです。

1. 名称・読みを格納したテーブルからレコードを取得する。

2. 形態素解析処理を行うWebサービスに、名称・読みを投げる。

3. Webサービスから返って来た形態素解析結果をテーブルへ登録する。
※Webサービスとのやり取りには、UTL_HTTPパッケージを利用


ストアド・プロシージャや呼び出し元のアプリは改修しておらず、DB側もなんら設定を変えていません。
念のため、Enterprise ManagerやSQLトレースで確認しても、DB側で何かしら処理が重くなったり、遅延を発生させるような待機イベントが発生している様子は見られませんでした。

どうしたものかなぁーと思っていたところ、「DBMS_PROFILER」というものを発見したので、試しに利用してみました。

1. DBMS_PROFILERパッケージのインストール

% sqlplus / as sysdba
SQL> @$ORACLE_HOME/rdbms/admin/profload.sql  


2. ストアドを実行するスキーマに、プロファイラが使用するテーブルを作成

% sqlplus SYSTEM/******
SQL> @$ORACLE_HOME/rdbms/admin/proftab.sql


3.ストアドの実行

declare
    err number;
begin
    err := DBMS_PROFILER.START_PROFILER;
    <ストアドの実行>
    err := DBMS_PROFILER.STOP_PROFILER;
end;
/


4.プロファイル対象RUNIDの取得

SELECT RUNID, to_char(RUN_DATE,'yyyy/mm/dd hh24:mi:ss') FROM PLSQL_PROFILER_RUNS ORDER BY RUNID DESC;


DBMS_PROFILERで作成されたテーブルに、以下の結果が格納されます。
・PLSQL_PROFILER_RUNS.RUN_TOTAL_TIME:総実行時間(ナノ秒)
・PLSQL_PROFILER_DATA.TOTAL_TIME:各行の実行時間(ナノ秒)

RUNIDで絞り込んで、上記の値を確認してみると・・・
・総実行時間:333秒
・各行の実行時間の合計:3秒
という結果になりました。。。

色々と調査しましたが、なかなか原因に辿り着くことができず、もうWebサービス間でのネットワークしか原因としてあり得ないと思い、Webサービスに要求を出す際のホスト名からドメイン部分を試しに削ったところ、
・総実行時間:10秒
・各行の実行時間の合計:3秒
という結果になりました。

名前解決に手間取ってしまうネットワーク環境になっていたようです。。
なんだかなーって感じでした。。
関連記事
スポンサーサイト

この記事へのコメント

プロフィール

あんま覚えてへんわ


「あんま覚えてへんわ」です。

最新記事
最新コメント
月別アーカイブ
カテゴリ

openclose

カレンダー
04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
ブログ内検索

アクセス数
アクセスランキング
[ジャンルランキング]
日記
8956位
アクセスランキングを見る>>

[サブジャンルランキング]
会社員・OL
1710位
アクセスランキングを見る>>

天気予報
QRコード
QR
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。