Dynamics CRM:使用PowerShell开启SDK消息限流功能
Microsoft Dynamics CRM 2011提供PowerShell命令行方式开启命令行管理和部署功能。命令行向外暴露部署Web服务的一个子集用于开启获得和设置高级设置。PowerShell命令行完整支持的清单请参考MSDN。本文我们将会详细解释如何配置使用SDK消息子集。
场景
请考虑如下场景,一个有很多使用outlook的用户的组织,Outlook客户端能够使用线下和同步新数据的功能。管理员意识到由于很多用户同时同步数据,导致CRM实例的性能很差。一个可行的解决方案就是限流同时同步任务的数量。
配置
增加PowerShell 管理单元(Snapin)
命令行:
Add-PSSnapin Microsoft.Crm.Powershell
开启限流
命令行:
#从ConfigDB获取当前调节设置对象,并把它存储到一个变量
$eTmSettings =Get-CrmSetting -SettingType EtmSettings
#改变设置对象,开启调节功能
$eTmSettings.Enabled= 1
$eTmSettings.ThrottlingEnabled= 1
#更新设置对象
Set-CrmSetting-Setting $eTmSettings
获取限流设置
#从ConfigDB获取当前调节明细设置对象,并把它存储到一个变量
$settings =Get-CrmSetting -SettingType ThrottleSettings
执行如上命令行将会获得一个有如下属性的对象:
这里我们能够看到多个影响Outlook客户端同步行为的限流设置。在我们之前场景,我们希望限流所有Outlook客户端同步任务。因此,我们感兴趣的设置包括OutlookSyncMaxConnections和OutlookSyncPerOrgMaxConnectionsPerServer.
如下逻辑证明这两个属性之间如何互相影响:
If((_organizationMax>=0&&organizationCount>=_organizationMax)||(_serverMax>=0&&_totalCount>=_serverMax))
//reject job request
Else
//execute job
request
设置限流设置
默认情况下,所有限流设置都被设置成-1,这表示没有限流。设置值为0或者更大将开始限流功能。使用0作为值时将会拒绝执行所有请求。在我们场景中我们将这个值设置为1作为测试值。下一步我们需要决定我们是否希望限流对每个组织或者每个服务器的请求。如果有3个组织,如果我们使用1作为测试值,则整个CRM服务器最大并发请求数量为3.如果我们希望,我们能够为每个服务器设置一个不同于每个组织设置的值。在这种情况下,如前逻辑将会 用于决定是否拒绝一个请求。
命令行:
$settings.
OutlookSyncMaxConnectionsPerServer = -1
$settings.
OutlookSyncPerOrgMaxConnectionsPerServer = 1
Set-CrmSetting-Setting $settings
测试配置
任何称职的开发者都需要进行测试!让我们看看如何来验证新配置。
使用应用
你可以在两台独立机器上安装两个Outlook客户端(虚拟技术在这里就会很有帮助)。下一步,讲客户端连接到同一个CRM服务器并且同时请求同步。其中一个客户端能够成功被处理另一个将会失败。
使用性能计数器
每个限流设置都配有一个性能计数器(每个组织&每个服务器共享同一个性能计数器)。我们可以使用这些计数器验证我们的配置。使用同一个PowerShell窗口通过执行perfmon来启动性能监控工具。
添加如下性能计数器:
现在我们在2台甚至更多Outlook客户端同时请求同步任务。如果所有同步请求于同一个组织,则你会看见趋势线将会被钉在1。如果每个客户端连接不同组织,则你会看见趋势线定格在X,X代表客户端连接唯一的组织的数量。
总结
本文介绍阐述了如何开启和配置Outlook同步SDK消息的限流设置。首先添加PowerShell控制台,然后获得、设置、保存设置对象。然后我们使用多个Outlook客户端同时向CRM服务器请求同步任务验证了我们的配置。我们还通过观察相关性能计数器验证了我们的配置。
从Get-CrmSetting-SettingType 限流设置命令行,我们可以看到还有更多用于其他SDK消息的限流设置。如果未来版本包含更多限流设置,我们能够通过同样的步骤发现和设置限流设置。
谢谢!
Wilson Lou(娄森伟)