Dynamics CRM: 仮想環境におけるメモリ管理

みなさん、こんにちは。 今回は、弊社が提供しているブログ Dynamics CRM in the Field の記事より 仮想環境におけるメモリ管理のポイントについて紹介します。 本記事で紹介する方法は設置型でのみに有効な方法です。 情報元: Memory management for Dynamics CRM in a virtual environment ==================================================== Hyper-V や VMware など Dynamics CRM を仮想環境内に構築されている場合、 仮想環境のメモリ設定が Dynamics CRM のパフォーマンスに大きく影響する場合があります。 先日、あるお客様環境のすべての Dynamics CRM サーバーにパフォーマンスカウンターを設定し、 パフォーマンスレビューを実施したところ、バックエンドサーバー上で興味深いデータが 検出されました。Available Mbytes やその他の主要なカウンターは閾値内にも関わらず Pages/sec カウンター値のみ閾値を超過していました。 Available MBytes 実行中のプロセスに使用できる物理メモリのサイズ (MB 単位) を測定します。 Pages/sec ハード ページ フォールトを解決するためにディスクから読み取られた、 またはディスクに書き込まれたページの数を測定します。 このバックエンドサーバーは、プラグインのロード処理や非同期サービスが実行されており、 かつ…

0

Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 3

みなさん、こんにちは。 前回に引き続き、パフォーマンスに関する公開ドキュメントの紹介をします。 シリーズものとなっているため、まだ前回の記事を見られていない方はご覧ください。 Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 1 Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 2 Microsoft Dynamics CRM 2015 Performance and Scalability Documentation(英語): http://www.microsoft.com/en-us/download/details.aspx?id=45905 Nolock ヒント SQL Server ではクエリレベルでレコードをロックしないことをデータベースエンジンに 指定することが出来ます。Dynamics CRM のビューのクエリは、これを利用しています。 これは他の読み取り処理を待たせないことを意味しておりパフォーマンスに大きな利点が あります。SDK を利用してクエリを行う場合、Nolock ヒントを使用することが可能です。 QueryExpression.NoLock Property: https://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.query.queryexpression.nolock.aspx Nolock ヒントの利用は、特に以下のケースで改善が見込まれます。 – 広い範囲のデータ – 競合する可能性が高いリソース – シリアル化が重要でない 一方、自動採番の仕組みのように前処理で値が変化しないことを前提としている場合、 Nolock は使用できないことに注意する必要があります。つまり、Nolock ヒントは、 競合の可能性と影響度を判断し、競合した際の値の一貫性が不要な場合に有効です。 ロックの順番 ロックの順番を意識する必要があります。例えば、User X,Y…

2

Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 2

みなさん、こんにちは。 前回に引き続き、パフォーマンスに関する公開ドキュメントの紹介をします。 シリーズものとなっているため、まだ前回の記事を見られていない方はご覧ください。 Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 1 Microsoft Dynamics CRM 2015 Performance and Scalability Documentation(英語): http://www.microsoft.com/en-us/download/details.aspx?id=45905 データベースのトランザクション Dynamics CRM のパフォーマンスを理解するうえで最も基本的な概念のひとつは、 データベースのトランザクションです。 これによりシステムへの要求とデータの一貫性が保たれています。 – Dynamics CRM は、同じデータベースのデータやリソースでやり取りされる – データベースの分離レベルの制御により動作している – データベースは、競合からデータを保護するためリソースをロックする – ロックは、トランザクションがコミットまたは中止されるまで解放されない SQL Server の既定の分離レベルは Read Committed です。 以降の記事ではこの既定の分離レベルの動作を記載しています。 トランザクションとロック SQL Server は分離レベルに基づき適切なロックをかけます。 パフォーマンスの問題を引き起こす一般的な理由は、 トランザクションによる影響を理解しないままカスタマイズや開発が行われることです。 – 単一レコードを読み取る場合、そのレコードの読み取りロックがかかる – 範囲を指定してレコードを読み取る場合、読み取る範囲によってその範囲、または    テーブル全体の読み取りロックがかかる – 単一レコードを作成、更新する場合、そのレコードに対する書き込みロックがかかる…

0

Dynamics CRM 2015 パフォーマンスの公開ドキュメント その 1

みなさん、こんにちは。 Dynamics CRM をご利用のお客様からパフォーマンスに関する問い合わせを多くいただきます。 パフォーマンスは利用者の利便性に直結する非常に重要な項目です。 ダウンロードセンターには、Dynamics CRM 2015 においてパフォーマンスの問題が発生する 主な原因とそれらを考慮したうえで実施するデザインパターンを解説している文書が公開されています。 非常に重要な内容のため、複数回にわたり文書の内容を紹介していきたいと思います。 この文書は Dynamics CRM 2015 、Dynamics CRM 2013 を対象とした内容です。 Microsoft Dynamics CRM 2015 Performance and Scalability Documentation(英語): http://www.microsoft.com/en-us/download/details.aspx?id=45905 はじめに パフォーマンスの問題を語る上で重要なポイントが 2 つあります。 – カスタマイズや開発することにより ユーザー操作に影響を与える作りこみができる – 競合が発生した場合、ロックやトランザクションの仕組みによりシステムを保護している 開発者は、パフォーマンスの問題を引き起さないようどういった問題が発生するのか 理解する必要があります。また、ロックやトランザクションは、システムを保護するために 発生している場合があることを理解する必要があります。 一般的な事象 パフォーマンスの問題の多くは、以下に示す一般的な事象によりが複合的に発生する場合が多いです。 1. 遅いレスポンス 特定の場所のレスポンスが遅い(例:フォーム、ビュー)。 2. Generic SQL errors データベースにて “Generic SQL Error” や ”SQL…

4

Dynamics CRM 設置型のパフォーマンス: 静的コンテンツがキャッシュされない

  みなさん、こんにちは。 今回はパフォーマンスに影響する設定について、US チームのブログより以下の記事を紹介します。 Static Content not cached properly in Dynamics CRM due to Vary:* header http://blogs.msdn.com/b/crminthefield/archive/2014/12/19/static-content-not-cached-properly-in-dynamics-crm-due-to-vary-header.aspx 背景と概要 Windows Server 2012 で Dynamics CRM 2013 を使用している場合、Web ブラウザーで静的コンテンツがキャッシュされない場合があります。 Internet Explorer などの Web ブラウザーは、Web サーバーからのコンテンツをキャッシュする機能がありますが、IIS の設定やネットワーク機器で Vary ヘッダーが “*” に設定されていると、コンテンツがキャッシュされないため、ページ表示が遅かったり、ネットワーク使用率が高くなります。 詳細 以下はブログ記事の内容です。 ——————————————————————————————————————— 最近、幾つかのパフォーマンス問題のケースを担当しました。ページ表示が遅いまたはネットワーク帯域の使用率が高いという内容のケースです。 状況を把握するために、Fiddler でトレースを取得して通信を確認しました。トレース取得時は、必ずフォームを 2 回ロードして静的コンテンツがキャッシュされるようにしました。同じフォームを何回も表示した場合、aspx, asmx, ashx, and svc のような動的なページのみ、サーバーからロードされる状況を確認できるはずです。しかし、このケースでは、フォームを開くたびに、大きな JavaScript ページが毎回ロードされていました。 以下のスクリーンショットは、今回のパフォーマンス問題のケースで共通に見られた、問題を発生させていたファイルです。これらの静的ファイルは、毎回のフォームロードで発生している 約…


Dynamics CRM Online 2015 Update 1 : レコードフォームの新機能とようこそ画面

みなさん、こんにちは。 今回は Dynamics CRM Online 2015 Update 1 で大幅に強化された レコードフォームとようこそ画面について紹介します。 レコード表示パフォーマンスの向上 今回のリリースで、レコードフォームの描写方法が内部的に変更され パフォーマンスが向上しています。ただし非サポートカスタマイズを 行っている場合、エラーなどが発生し、正常に動作しない可能性が あります。その場合、問題が解決するまで以下手順で以前の方法にて レコードを表示できます。 1. 管理 | 管理 | システムの設定をクリックします。 2. 全般タブ一番下にある「レガシ フォームのレンダリングを使用 する」で、「はい」を選択します。既定は「いいえ」です。 3. 「OK」をクリックして保存します。 非サポートのカスタマイズをすべて解決した際は、設定を既定に戻して いただくことを強く推奨します。 タブの迅速な遷移 今回のリリースでは、レコードフォーム上のタブに迅速に移動が可能です。 レコード名の右側にあるアイコンクリックでタブ一覧が表示されます。 ようこそ画面 以前のバージョンでナビゲーションツアーと呼ばれていた、ユーザー ログイン時に表示されるようこそ画面が、シンプルになりました。 次回以降非表示にする 次回ログイン以降でようこそ画面を出したくない場合、ようこそ画面 右下にある「今後は表示しない」にチェックをします。 手動での表示 一旦非表示にしたようこそ画面を表示する場合、画面右上のネジアイコン より「ようこそ」画面を表示するをクリックします、 まとめ レコードの表示パフォーマンス向上は、多くのユーザーにとってメリット があるため、非サポートのカスタマイズが存在してうまく動作しない場合 少しでも早く改修して機能を有効にすることをを勧めします。是非お手元の 環境で速度比較を行って みてください。 – 中村 憲一郎


Microsoft Dynamics CRM 2015 更新プログラム 0.1 : 簡易検索のパフォーマンス向上機能

みなさん、こんにちは。 今日は Microsoft Dynamics CRM 2015 更新プログラム 0.1 に含まれる簡易検索の パフォーマンス向上について紹介します。 ※こちらの機能は設置型だけの機能となります。 概要 これまで簡易検索は、SQL Server のインデックス機能を利用することで、高速な 検索を実現していましたが、SQL Server のインデックス機能の性質上、いくつか 制限がありました。 – 前方一致での検索のみインデックスが利用される – データの持ち方によってインデックスの利用のされ方が変わる – 統計データなどその他の状況によってインデックスの利用のされ方が変わる – 検索文字列を完全に一致するものだけが検索対象となる – 複数の検索文字列を利用できない フルテキスト検索の採用 今回の更新プログラムでは、上記の問題を改善するため、簡易検索にいて SQL Server のフルテキスト検索機能が利用できるようになりました。 設定方法 簡易検索におけるフルテキスト検索の利用は既定で無効となっています。以下の 機能を利用する場合、手順で有効にします。 1. ブラウザで Microsoft Dynamics CRM に接続します。 2. 設定 | 管理 | システムの設定をクリックします。 3. 「簡易検索の設定」項目で「簡易検索の全文検索を有効にする」を「はい」に 変更します。 4. 以下のメッセージが表示されます。これはフルテキスト検索用のカタログを 非同期サービスが作成しているためです。「はい」をクリックします。…


Guid.NewGuid(); 使用時の注意点

  みなさん、こんにちは。 今回は Microsoft Dynamics CRM 開発に関するトピックを紹介します。この記事は以下のブログの紹介です。 The Dangers of Guid.NewGuid(); http://blogs.msdn.com/b/crminthefield/archive/2015/01/19/the-dangers-of-guid-newguid.aspx 背景と概要 Microsoft Dynamics CRM は GUID をエンティティのプライマリキーとして使用します。GUID をプライマリキーとして使用する事は、ランダムな数字と文字列がプライマリキーとして使用される為、SQL Server の観点からベストプラクティスではありません。しかし、Dynamics CRM プラットフォームは GUID を連続な順番で生成する機能があります。 SQL Server のインデックス管理 SQL Server のインデックスはキーデータが指定された並び順(昇順・降順)で保存されています。GUID はランダムな数字と文字列の組み合わせなので、キーとして使用される場合、格納されているキーデータの間に新規データが追加される場面が発生します。SQL Server はこのような場合、ページを分割します。ページ分割は、ページ分割自体が手数がかかる処理であると同時に、ページ内のデータ個数の低下、インデックスページがデータファイル内で連続しなくなる断片化という、パフォーマンス面で考慮するべき幾つかの挙動が伴います。このような側面から、GUID のようなランダムな文字列をプライマリキーとして使用するのは、SQL Server の観点からベストプラクティスではありません。 Dynamics CRM の 連続した GUID 生成機能 Dynamics CRM プラットフォームは GUID を連続な順番で生成するアルゴリズムを持っています。 キーとして使用される GUID が連続しているので、常にインデックスの最後に新規データが追加されます。 この為、新規データ作成時にページ分割は発生しません。これにより、SQL Server がエンティティテーブルを効率的にインデックスする事を可能にします。結果、レコード取得を速める効果を期待できます。…


Microsoft Dynamics CRM 関連のタイムアウト設定

みなさん、こんにちは。 今回は Microsoft Dynamics CRM 関連のタイムアウト設定についての情報をお届けします。 情報元: CRM 2011 Timeouts and Limits http://social.technet.microsoft.com/wiki/contents/articles/12601.crm-2011-timeouts-and-limits.aspx SQL クエリのタイムアウト 規定値 30 秒 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\OLEDBTimeout http://support.microsoft.com/kb/918609 ASP.NET リクエストのタイムアウト 規定値 1,000,000 ミリ秒 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\ExtendedTimeout http://support.microsoft.com/kb/918609 SOAP コールのタイムアウト 規定値 300,000 ミリ秒 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\NormalTimeout http://support.microsoft.com/kb/918609 ASP.NET リクエストの最大実行時間 規定値 300 秒 web.config – <httpRuntime executionTimeout=”300″ maxRequestLength=”8192″/> http://support.microsoft.com/kb/918609 ASP.NET リクエストの最大サイズ 規定値 4096 KB web.config – <httpRuntime executionTimeout=”300″ maxRequestLength=”8192″/> http://support.microsoft.com/kb/918609…


Dynamics CRM 2013 設置型 通信パフォーマンスを改善する方法

みなさん、こんにちは。 今回は、Windows Communication Foundation (WCF) 圧縮および SSL を有効にして Microsoft Dynamics CRM 2013 設置型の通信パフォーマンスを改善する方法を紹介いたします。 この記事は弊社が提供しているブログ Dynamics CRM in the Field で紹介された 記事を翻訳したものです。なお、本記事で紹介する方法は設置型でのみに有効な方法です。 また Dynamics CRM 2011 における 同様の記事 も合わせてご確認ください。 WCF 圧縮および SSL 暗号化 前回の記事では、IIS は多くのコンテンツタイプを圧縮していることを説明しました。 しかし、既定では MIME タイプ「application/soap+xml;charset=utf-8」を持つ WCF レスポンスは 圧縮されません。 そのため、CRM Outlook クライアントがオンラインになった際、 ネットワークトラフィックが増加しパフォーマンスが劣化します。 これらの問題は、WCF 圧縮や SSL 暗号化を利用することで軽減できます。 WCF 圧縮と SSL を利用することで下記の図のように大きな改善を達成しました。 以下の図は、Dynamics CRM 2013…

2