Japan Dynamics CRM Team Blog

Microsoft Dynamics CRM technical information for partners and customers

Dynamics CRM 2011 Update Rollup 10 複数レコード検索のパフォーマンス

Dynamics CRM 2011 Update Rollup 10 複数レコード検索のパフォーマンス

  • Comments 0

みなさん、こんにちは。

今回は Microsoft Dynamics CRM 2011 Update Rollup 10 で提供される
複数レコード検索のパフォーマンス向上機能を紹介します。

※ Microsoft Dynamics CRM 2011 Update Rollup 9 以前をご利用の方は
同じレジストリキーでも意味が異なりますので、アップデートの予定がなく、
パフォーマンスの改善を試したい場合には、以下の記事をご覧ください。

Dynamics CRM パフォーマンス : EnableRetrieveMultipleOptimization オプションの紹介

ホワイトペーパー

Update Rollup 10 のリリースに合わせて、以下のホワイトペーパーが公開
されています。(英語)

Optimizing and Maintaining the Performance of a Microsoft Dynamics CRM 2011 Server Infrastructure

こちらのホワイトペーパーには数多くの情報が含まれますが、その中から
今回は Update Rollup 10 で提供される新機能を紹介します。

前提

運用している Microsoft Dynamics CRM のデータベースが大規模になるに
つれ,組織レベルの読み取り権限を持たないユーザーに関して、ビューの
変更や簡易検索等のパフォーマンスに与える影響が大きくなります。

もし組織レベルの読み取り権限をもつユーザーと、そうでないユーザーの
間でパフォーマンスの乖離がある場合は、以下ベストプラクティスを参考に
してください。

 

ベストプラクティス

共有機能

共有するレコードが増加するほど、組織レベルの読み取り権限を持たない
ユーザーに対するクエリのパフォーマンスは影響を受けるようになります。
共有を利用する場合は必要最小限のレコードのみ共有してください。

所属するチーム

ユーザーが所属するチーム数が増加するほど、組織レベルの読み取り
権限を持たないユーザーに対するクエリのパフォーマンスは影響を受ける
ようになります。チームを利用する場合は、必要最低限のチームに所属
するようにしてください。

最適化のテクニック

Microsoft Dynamics CRM 2011 Update Rollup 10 以降の場合、以下の
キーを組み合わせることにより、柔軟な対応が可能となります。

EnableRetrieveMultipleOptimization キー

規定値は 0

Update Rollup 10 以降の環境では、このキーの値を 0 にするか、キーを
削除する事でMicrosoft Dynamics CRM 2011 は動的にクエリを変更する
ようになります。既にキーがある場合には、値を 0 に変更してください。
以下のキーを設定することで動的なクエリの判断基準を変更できます。

RecordCountLimitToSwitchToCteSecuritySql  キー

規定値は 75,000

クエリ対象のレコード数がこのキーの値より少ない場合、は OR を基準と
したクエリを発行します。レコード数がキーの値以上になった場合は共通
テーブル式 (CTE) を利用したクエリを発行します。CTE を利用する場合は、
パフォーマンスの向上が期待できる一方で SQL サーバーにおけるメモリ
利用量が増加するため、このキーはパフォーマンスを確認しながら、極力
大きい値にしてください。

RetrieveMultipleSharingCountThreshold キー

規定値は 1,000

ユーザーまたはユーザーが所属するチームに対して、クエリが対象にする
エンティティ種類で、読み取り権限ありで共有されているレコードの数がこの
キーの値をより少ない場合、テーブル値関数を利用したクエリを発行し、値
がこの値以上の場合は、JOIN を利用したクエリを発行します。共有された
レコード数が多いユーザーがパフォーマンスの問題に直面している場合は、
この値を大きくすることで問題が改善する可能性がありますが、値を大きく
しすぎた場合は、逆にパフォーマンスが劣化する場合があります。値は 100
単位で増やしながら検証してください。

OrgDbOrgSettings ツール

これらのキーを安全に変更するために、OrgDbOrgSettings ツールの使用を
推奨します。直接レジストリを変更することも可能ですが、各 Web サーバー
での変更が必要になり、また誤ってレジストリを変更した場合にはシステムに
重大なダメージを与える場合があります。状況によってはオペレーティング
システムの再インストール等の作業が必要になることがありますので、自己
責任にて操作を行ってください。直接レジストリを変更する場合は、各 Web
サーバーの HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM 配下に
キーを追加します。

EnableRetrieveMultipleOptimization キーのオプション

値 0 はユーザーごと、またエンティティごとに動的に最適化されたクエリを
発行できますが、その動作が期待したものではない場合、他の値に変更する
事ですべてのクエリの挙動を制御できます。以下にキーが取りえる値を紹介します。

値 0 : 既定
説明 : 既定値

通常はこちらの値を利用します。ユーザーごと、またエンティティごとに動的で
最適化されたクエリを発行します。追加の 2 つのキーを利用することで、動的
クエリの閾値を指定できます。

値 1 :  一時テーブルを使用
説明 : ユーザーが読み取れるレコードの ID を一旦一時テーブルに取得し、
その結果を利用して表示するレコードを取得します。

一旦ユーザーが読み取れるレコードをすべて取得することから、ユーザーが
自身のレコードしか読み取ることができないような、比較的小さいデータセットが
返る場合に有効です。

値 2 : インライン ID
説明 : OR を利用したクエリを利用。ユーザーが所属するチームや、レコードを
読み取れる部署の情報を利用して結果を取得します。権限の確認にテーブルの
JOIN を利用しません。

ユーザーが所属するチーム数が少なく、参照できる部署も少ない場合で、かつ
あまり共有を利用しない環境に適しています。

値 3 : OR と JOIN
Microsoft Dynamics CRM 4.0 の動作と同じで、テーブルの JOIN でユーザーの
権限を確認します。

規模が小さい環境では、この設定で十分なパフォーマンスを得ることができます。
またあまりメモリを必要としません。

まとめ

Microsoft Dynamics CRM 2011 では、EnableRetrieveMultipleOptimization キーで
利用できるオプションを今までも提供してきましたが、変更がすべてのクエリに
対して影響するため、一部のユーザーにパフォーマンスの恩恵がある一方、他の
ユーザーが新たにパフォーマンスの問題に直面することがありました。またデータ
やセキュリティロール、チームの運用が変わるにつれ、値の見直しが必要でしたが
Update Rollup 10 で提供される動的な最適化は、これらの問題を解決します。

まずは既定値にてパフォーマンスの検証を行っていただくことを推奨します。

参考記事:

Dynamics CRM 2011 用 OrgDBOrgSettings ツールの案内

※ Microsoft Dynamics CRM 2011 Update Rollup 9 以前をご利用の方は
同じレジストリキーでも意味が異なりますので、アップデートの予定がなく、
パフォーマンスの改善を試したい場合には、以下の記事をご覧ください。
Dynamics CRM パフォーマンス : EnableRetrieveMultipleOptimization オプションの紹介

- Dynamics CRM サポート 中村 憲一郎

  • Loading...
Leave a Comment
  • Please add 5 and 4 and type the answer here:
  • Post