Another cross-post from the blog of Ritesh Ranjan. Enjoy!
In my 5+ years of Dynamics CRM career, I have worked on various issues/scenarios, and, the most common, according to me, is the Dynamics CRM Outlook Client Performance. In this blog post, I would like to delve deep into this subject and share some crucial information to isolate and troubleshoot this scenario. My endeavor is to include almost every aspect which would not only help you isolate and understand the issue, but also help you optimize the overall performance of the Dynamics CRM Outlook Client. This blog post will also contain a few points from the Performance Optimization white paper along with additional aspects which can certainly play a good role in improving the overall performance.
To begin with, let me first focus on the importance of understanding the root cause of any issue which could be found after proper isolation or funneling down.
Isolating Outlook performance issues:
- What is the update rollup installed for CRM outlook clients?
- What do we mean by performance issues? Are we talking about overall outlook performance or anything in specific?
- Have we defined any performance benchmark? If not, it’s not too late.
- What exactly happens when you notice the performance issue? A complete understanding of the issue with proper description.
- Do we get any errors or just the outlook becomes sluggish?
- How many concurrent users are accessing CRM at the same time when the issue happens?
- Does this issue happen with all the users at the same time or is it random?
- Does this happen with a specific entity within CRM? If yes, let’s drill down on that entity first.
- Are we talking about performance issues as soon as we launch the outlook client or does it happen all across the time during its use?
- How is the performance of the CRM Server at the same time when this issue happens?
- How is the overall performance of Dynamics CRM over web client?
- Does faulty users have multiple mailboxes configured on their outlook?
- What is the service pack level for outlook?
Note: It is always better to have the latest service packs and update rollups installed with proper testings in your Dev./UAT/Test environment.
Server Side Optimization validations:
- What is the CRMAppPool recycle interval set to?
- Is there any batch process or multiple Async jobs running on the CRM Server from the time the issue happens?
- Are we noticing any memory leaks happening on the server as well as on the client machine? I mean 'is the process using more than normal amounts of memory, ever increasing amount of memory, or a very disproportionate amount of memory compared to other processes'
- Do we have HTTP compression enabled on the CRM Server under IIS? For more information you can refer to: http://blogs.msdn.com/b/crminthefield/archive/2011/12/29/enable-wcf-compression-to-improve-crm-2011-network-performance.aspx
- What is the version of exchange we are using? Is this hosted or On Premise? If this is hosted or On-Premise, how is the overall performance? Did we isolate it?
- How is our network bandwidth? Have you referred this: http://blogs.msdn.com/b/crminthefield/archive/2011/07/20/crm-outlook-client-network-bandwidth-concerns.aspx
- Are we running any quick campaigns or marketing activities at the time when the issue happens? Can you stop it and then check the behavior?
- What is the type of antivirus installed in your environment? What is the behavior when you disable the antivirus completely and then check the behavior?
- Have we optimized the Performance of Internet Information Services? Optimizing the performance of Microsoft Internet Information Services (IIS) within a Microsoft Dynamics CRM 2011 implementation benefits not only the overall system, but also any custom applications, plug-ins, or add-ins that have been developed by using the Microsoft Dynamics CRM 2011 SDK.
- For more information about optimizing IIS performance, see the following resources:
- Have we optimized the Performance of Integrated Windows Authentication and Kerberos Authentication
- Ensuring Kerberos is enabled at the client and the server can enhance performance by reducing the number of round trips required for authentication. When using Kerberos, the client can send authentication details with the initial response rather than having to go through multiple challenges and responses, which would otherwise be required. As a result, maintaining credentials across sessions can provide better performance, particularly on higher latency networks. While Kerberos generally should “just work,” here are some scenarios or issues you may encounter.
- In Internet Explorer, ensure that “Enable Integrated Windows Authentication” is set to enable use of Kerberos for integrated authentication. The client will not attempt Kerberos authentication unless this setting is enabled.
- To determine whether users are connecting via Kerberos, in the registry, enable Kerberos logging. If necessary, to help diagnose whether the user can obtain and use a Kerberos ticket, use applications such as Kerbtray, which is available from Microsoft Downloads.
- Did we verify Kernel mode authentication on the Server?
- Kernel Mode Authentication allows authentication persistence when switching the request from one application pool to another application pool. It re-authenticates only once for the first time when the request is made to that application. For rest, all requests Kernel mode authentication (KA) session is maintained, which is a huge performance gain!
Client Side Optimization validations:
- What is the behavior when you disable all the outlook add-ins except the Dynamics CRM add-in and then check the behavior?
- Is CRM server URL added under trusted site?
- What is the behavior of outlook client with a vanilla organization? Can we test the behavior against a different organization, most preferably a vanilla organization? This test really helps in isolating if the issue is with any specific organization.
- Are we using outlook client for sending/receiving emails in CRM? If yes, how many email flow happens on a daily basis?
- What is the size of the mailbox? 1.5 GB is optimal for better performance.
- How many mailboxes are configured for the affected user/users?
Have you looked at the Antivirus exclusions? For more information you can also refer: http://community.dynamics.com/crm/b/crminthefield/archive/2011/01/24/anti-virus-exclusions-for-microsoft-dynamics-crm.aspx#.Uh3m52b8Kpo
- Do you have script scans running? If yes, did you try disabling it and then check the behavior?
- Are we using the latest IE version? Latest IE versions bring better JS processing engine.
- Can we have a 64 bit environment?
Let’s verify the following for an overall better experience:
- Less fields on the form (if business rules allow)
- Use server-side show/hide fields
- Reduce the number of controls
- Reduce the number of Web Resources in the form
- Leave web resources in a tab and collapse the tab
- Hide fields/sections/tabs by default and show on condition
- Use collapsed sections (if the section is collapsed then the iFrames or web resources inside are not loaded until the section is opened. For Web Resources there is a Client API “OnTabChange”, capture it to know when the section is being expanded or collapsed to initialize, etc, avoiding scripts in onload)
- Scripts on the form have an impact. Reduce OnLoad scripts when it can be avoided. Avoid complex code. Prefer OnChange since it’s on demand
- Trim the ribbon appropriately for the form. Actions/Commands on the form should match the business need. Update display roles to trim the ribbon from the server side (preferred).
- Use Read Optimized forms
- Pick associated grid over sub-grids
- Optimization In Grid
- Customize grids (i.e. if a field is missing) add it so that a Form doesn’t need to be opened
- Enable actions in the grid
- Pick the columns most meaningful
- Ensure you have the right filters
- Sorting will affect the performance. Pick the sort column when defining the view. Try to use a primary attribute, don’t use a lookup
- Prefer “Recently Viewed” over searching in the grid
- Configure the number of records returned
- Minimize bytes over the network
Apart from the above steps, I would also encourage referring the following:
Performance Optimization for Dynamics CRM 2011 Clients: http://blogs.technet.com/b/dynamicspts/archive/2013/08/20/performance-optimization-for-dynamics-crm-2011-clients.aspx
Optimizing and Maintaining Client Performance for Microsoft Dynamics CRM 2011 and Microsoft Dynamics CRM Online to make sure all the basic configuration is in place? For more information http://technet.microsoft.com/en-us/library/hh204512.aspx
Slow performance when you use the Microsoft Dynamics CRM 2011 client for Outlook: http://support.microsoft.com/kb/2585157
Best Practices for Developing with Microsoft Dynamics CRM: http://msdn.microsoft.com/en-us/library/gg509027.aspx
Optimizing and Maintaining Client Performance for Microsoft Dynamics CRM 2011 and CRM Online: http://www.microsoft.com/en-us/download/details.aspx?id=23261
Optimizing and Maintaining the Performance of a Microsoft Dynamics CRM 2011 Server Infrastructure: http://www.microsoft.com/en-us/download/details.aspx?id=27139
Let me know if you have any questions or anything to share on the above discussed issue/scenario.
Ritesh Ranjan – Microsoft Dynamics CRM Premier Field Engineer (EMEA – Norway)