Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] @UserAccess は速度が低下する場合がある

非表示式などで、@UserAccess を使用することは結構あると思いますが、第1引数(サーバー名)に共通名のみの値を渡してしまうと、パフォーマンスが落ちてしまうみたいです。以下に調査結果を記載します。

まず、ページにアクションボタンを5つ作成し、その非表示式を以下のようにします。(ちなみに、こんな書き方をしたのは、管理人ではなく別の人ですよ(^^; )

sv := @Name([CN]; @Subset(@DbName; 1));
db := @Subset(@DbName; -1);
@UserAccess(sv:db; [AccessLevel]) <= "3"

notes.ini に 以下の設定を追加し、NRPCのデバッグログを取得します。

CLIENT_CLOCK=1
DEBUG_OUTFILE={ファイルパス}

ページを表示して、出力されたログが以下のものです。アクションボタン1つあたりにOPEN_DB・CLOSE_DBが行われてしまい、約0.2秒もかかっていることが解ります。
(なんで最初の1個が15msなのかよく解りませんが。)

(9-4 [9]) OPEN_DB(サーバー名!!パス): (Connect to サーバー名: 0 ms) (Exch names: 0 ms)(Authenticate: 0 ms.)
(OPEN_SESSION: 0 ms)
16 ms. [134+290=424]
(10-4 [10]) GET_UNREAD_NOTE_TABLE: 0 ms. [290+44=334]
(11-4 [11]) OPEN_NOTE(REP492574A5:0001E50B-NTFFFF0010,03000400): 0 ms. [48+5492=5540]
(12-4 [12]) OPEN_DB(サーバー名!!パス): 15 ms. [134+290=424]
(13-4 [13]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
(14-4 [14]) OPEN_DB(サーバー名!!パス): 219 ms. [134+290=424]
(15-5 [15]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
(16-5 [16]) OPEN_DB(サーバー名!!パス: 203 ms. [134+290=424]
(17-5 [17]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
(18-5 [18]) OPEN_DB(サーバー名!!パス): 203 ms. [134+290=424]
(19-5 [19]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
(20-5 [20]) OPEN_DB(サーバー名!!パス): 203 ms. [134+290=424]
(21-5 [21]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]
(22-7 [22]) CLOSE_DB(REP492574A5:0001E50B): 0 ms. [14+0=14]

この現象を回避するには、もちろん以下のようにしてあげればOKです。

@UserAccess(@DbName; [AccessLevel]) <= "3"

この場合、NRPCのログは以下のようになり、無駄なOPEN_DBが発行されていないのが解ります。

(24-8 [24]) OPEN_DB(サーバー名!!パス): 0 ms. [134+290=424]
(25-8 [25]) GET_UNREAD_NOTE_TABLE: 15 ms. [290+44=334]
(26-8 [26]) OPEN_NOTE(REP492574A5:00021244-NTFFFF0010,03000400): 0 ms. [48+5492=5540]
(27-10 [27]) CLOSE_DB(REP492574A5:00021244): 0 ms. [14+0=14]

推測するに、ノーツの内部処理で、「サーバー名とパスが同じだったら現在のDBのDBハンドルを使い、違っていたら、DBを開く」みたいな処理になっていて、サーバー名の比較は階層付きの名称が前提になっているのではないか、と思います。(まあ、それはそれで正しい処理だと思いますが。)

この関数に限らず、現在のDBを開くような処理は、階層付きのサーバー名を渡してあげたほうが無難かもしれませんね。

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
読み込み中...

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 1692 to the field below:

^
×