1

Documentumアプリケーションでオブジェクトを取得する場合、長い時間がかかります。データソースochで長時間実行クエリオプションをアクティブにしましたが、以下のクエリに時間がかかりすぎることがわかりました。

select all 
  b.r_object_id, dm_repeating1_0.state_name, a.object_name 
from 
  dm_policy_sp  a, 
  dm_sysobject_sp  b, 
  dm_policy_rp dm_repeating1_0 
where 
    (
      (a.r_object_id=b.r_policy_id) 
      and (dm_repeating1_0.i_state_no=b.r_current_state) 
      and b.r_object_id in (N'a long, long list of IDs') 
      or a.r_object_id in (N'a long, long list of IDs')
    ) 
    and /* ...  */

ご覧のとおり、テーブル「a」はポリシーテーブルであり、7つのレコードしかありません。object_id両方の「または」演算子の後のSQLステートメントで、テーブル「a」で100個の間のオブジェクトを探しています。クエリを実行し、テーブル "b"(systemObjects)でそれらのオブジェクトを検索したところ、これらのオブジェクトがテーブルbに属していることがわかりました。

上記のクエリには約17分かかります。テーブルの「または」演算子の後のテーブルの名前をbに変更した場合、10秒しかかかりませんでした。

このクエリは間違っていると思います。Documentumのバグなのか、Documentumの設定が間違っているのかはわかりません。このSQLまたは関連コンポーネントを作成するDQLをどこで見つけることができるかわかりませんか?何か案が?

4

2 に答える 2

1

documentum は LifecycleNameDataHandler と LifecycleDataHandlerHelper 内でそれを行っているようです。これらのクラスを逆コンパイルすると、この DQL クエリが見つかりました

SELECT b.r_object_id, a.state_name, a.object_name FROM dm_policy(all) a, dm_sysobject(all) b WHERE b.r_object_id IN (...) AND a.r_object_id = b.r_policy_id AND a.i_state_no = b.r_current_state ENABLE(行ベース)

Documentum Webtop は、ユーザーが LifeCycle 状態名列を含むデータグリッドを開くと、この DQL クエリを実行します。

いくつかのオプションがあります:

  1. データベース レベルでクエリを最適化し、DQL からテストします (DA の dql テスターなど)。
  2. クラス LifecycleDataHandlerHelper を逆コンパイルし、別の方法で DQL クエリを書き直します。FORCE_ORDER などのヒントを追加してみてください。
  3. ライフ サイクルをまったく使用しない場合は、このクラスを簡単に無効にすることができます。ファイル webcomponent\app.xml の行 com.documentum.webcomponent.library.applylifecycle.LifecycleNameDataHandler をコメント化するか無効にする必要があります。
  4. ライフサイクル状態名 (または状態名) をグリッドから削除します。ユーザーは、カスタマイズされたグリッドでこの列を選択する可能性があります。この列をグリッドから削除するようにユーザーにアドバイスすることができます。
于 2013-10-31T11:51:21.287 に答える
0

このクエリで何を取得したいのか正確にはわかりませんが、クエリは次のように作り直される可能性があると思います。

select all 
  b.r_object_id, dm_repeating1_0.state_name, a.object_name 
from 
  dm_policy_sp  a, 
  dm_sysobject_sp  b, 
  dm_policy_rp dm_repeating1_0 
where 
    (
      (a.r_object_id=b.r_policy_id) 
       AND dm_repeating1_0.r_object_id=a.r_object_id
      and (dm_repeating1_0.i_state_no=b.r_current_state) 
      and (b.r_object_id in (...) 
      or a.r_object_id in (...))
    ) 
于 2013-11-06T09:39:58.353 に答える