When you try to use the resource-scheduling feature Find Available Times in Microsoft Dynamics CRM, you experience poor performance. If you use Find Available Times again and start a new query, performance improves, and the results take much less time.
This issue occurs because the Microsoft Dynamics CRM deployment contains many entities that are related to scheduling, and multiple SQL queries are run to retrieve individual records during the resource-scheduling process of Find Available Time.
To resolve this issue, download and then install Update Rollup 8 for Microsoft Dynamics CRM. To do this, see the following article in the Microsoft Knowledge Base:
2600644 Update Rollup 8 for Microsoft Dynamics CRM 2011 is available
After you install the update rollup, you should create the following registry key on the CRM server for the entities that are related to scheduling:
After you do this, these entities will be added to the cache to optimize performance.
To create the registry key, follow these steps:
On the Microsoft Dynamics CRM server, point to the Start menu, and then type regedit in the search box to open Registry Editor.
Locate the following registry subkey:
Right-click MSCRM, point to New, and then click String Value.
Right-click the new key, and then click Modify. The modifications that you make will resemble the following XML. However, your modifications will depend on the entities and options that you want to use. See the "More Information" section for detailed information.
<CachingModes><CachingMode name="BookCaching"><Calendar>DefaultCache</Calendar><CalendarRule>DefaultCache</CalendarRule><Commitment>DefaultCache</Commitment><ConstraintGroup>DefaultCache</ConstraintGroup><Equipment>Direct</Equipment><PluginType>DefaultCache</PluginType><Resource>Direct</Resource><ResourceGroup>DefaultCache</ResourceGroup><ResourceExpansion>DefaultCache</ResourceExpansion><ResourceGroupExpansion>DefaultCache</ResourceGroupExpansion><ResourceSpec>Direct</ResourceSpec><Schedule>DefaultCache</Schedule><Service>DefaultCache</Service><SystemUser>Direct</SystemUser><Team>DefaultCache</Team></CachingMode> <CachingMode name="SearchCaching"><Calendar>DefaultCache</Calendar>... (and other entities like above)</CachingMode><CachingMode name="PublishResourceGroupsCaching"><Calendar>Direct</Calendar>
(and other, similar entities)
For each entity that you add to the cache, there are two possible values: Direct and DefaultCache.
A value of DefaultCache tries to optimize on the number of SQL queries and retrieves all records at one time by using a single query. After all records are retrieved, the data is stored in the HTTP cache.
A value of Direct queries for each record by using a separate SQL query.
Note If you add more entities to the cache, memory usage may increase slightly because of increased cache size.
There are three mode types:
SearchCaching. Used when "find available times" or validation of service appointment is being performed
BookCaching. Used when a service appointment is being saved
PublishResourceGroupCaching. Used when the resource groups are reorganized and "publish resource tree" is performed
The mode for some entities can be set collectively by using the Resources tag and the ResourceGroups tag. Or, the entities can be set separately at a granular level.
Resources entities include the following subtypes:
ResourceGroups entities include the following subtypes: