一、方案背景
Microsoft Dynamics AX 是功能强大的企业ERP系统,虽然Microsoft 已推出基于云的现代化 ERP 平台 Dynamics 365 Finance and Operations,提供了更高的性能和持续更新,用来替代Dynamics AX。在考虑升级到Dynamics 365之前,还有很多企业依然使用 Dynamics AX,性能问题可能成为瓶颈。
Dynamics AX 系统随着数据量增长、数据量越来越多,用户增加以及业务复杂性提升,比较常见出现的情况:系统速度越来越慢,时不时就阻塞,或系统卡的完全动不了,严重影响工作效率。此时需要做性能优化。
基于我们在行业多年的Microsoft Dynamics 系统优化经验的最佳实践,以下是针对 Dynamics AX 的性能优化解决方案,涵盖代码规范性优化策略、数据库优化策略、AOS服务端优化策略、服务器与网络性能优化策略等全方位进行优化,提升系统响应速度、降低延迟并优化用户体验。
二、方案内容
1、代码规范性优化策略
1.1、数据库操作优化
1) 明确指定查询字段:避免不必要的字段查询使用fieldList 或 select 时明确指定所需字段,
减少数据传输量,提供查询效率。
2) 减少不必要关联:优先使用 existsJoin 替代 join 避免不必要的表关联数据加载。
3) 优先使用批量插入:批量代替逐条处理使用 RecordInsertList 或 RecordSortedList 批量插入数据。
4) 优先使用批量更新:批量操作update时应使用update_recordset语句。
1.2、代码逻辑优化
1) 减少数据库交互次数:避免循环内的数据库操作将查询移到循环外部,从而减少数据库交互次数
2) 避免客户端和服务器端频繁交易
3) 避免大量使用Display方法。
4) 避免在Active方法中写大量While Select语句, 避免在Display方法中使用While 套 While。
5) 避免使用低效的嵌套循环:使用join关联查询 或 query方式进行查询。
亦可使用 Map 或 Set 或 list容器方式替代嵌套循环查找。
6) 多使用Query 和 View,
7) 合理使用索引:注意适当增加索引。指定查询索引,使用 index hint 强制指定查询索引。
8) 多表查询的时候, 先加条件,后Join
9) 减少频繁对大表进行查询:一次遍历,遍历体内进行分组加工,避免独立加工,多次遍历
10) 复杂逻辑分层计算:对于复杂逻辑可以交给服务端进行处理,客户端调用关键字server。遇到非常复杂的逻辑,又涉及到交易记录表,凭证表等大型表的时候,考虑空间换时间。
11) 优化大数据处理方式:对于大数据耗时的分析、导出、导入等。
可以使用批处理(RunBaseBatch)进行后台 或 多线程异步方式。避免阻塞线程导致客户端卡死。
1.3、事务与锁机制优化
1) 优化事务:避免事务中包含耗时操作(如循环、外部服务调用),应将事务分割成小批量处理。
尽量在数据统一性的情况下,保证事务时间短,减少锁的持有时间。
2) 优化索引:使用合适的索引可以提高检索效率并减少锁冲突,尽量避免全表检索。
3) 合理使用临时表:(如TempDB 或 In-Memory)可以在某些场景下大大减少锁竞争,
因为临时表的数据存储在客户端或服务端的内存中。
4) 优化事务开启时机:控制锁的颗粒度,避免过早锁定。
1.4、性能分析工具
1) Code Profiler通过 Tools > Code Profiler 定位性能热点代码 或 关键字#profileBegin()、#profileEnd。
2) X++静态分析工具。使用 X++ Cop 或 Dynamics AX Best Practices Checker 检查潜在性能问题。
Code Profiler:
2、数据库优化策略
2.1、索引优化
1) 关键表索引:对高频查询表(如InventTrans、CustTrans、VendTrans、LedgerJournalTrans)
添加覆盖索引,避免全表扫描。
2) 索引碎片管理:定期执行 ALTER INDEX REORGANIZE 或 REBUILD ,
维护索引效率(建议每周监控,碎片率 >30% 时重建)。
2.2、分区与归档
1) 特定表区分:按时间 或 特定条件分区交易表(如LedgerTrans),结合归档策略
使用Data Management Framework 迁移历史数据。
2) 分区消除:在启用表分区后,查询时利用分区消除(Partition Elimination)加速数据访问。
2.3、统计信息更新
1) 自动统计信息更新:启用 AUTO_UPDATE_STATISTICS_ASYNC ,避免查询计划阻塞。
2) 手动统计信息更新:对常用的表(如CustInvoiceTrans )手动更新:
UPDATE STATISTICS [CustInvoiceTrans] WITH FULLSCAN。
2.4、TempDB优化
1) 合理分配TempDB文件:根据 CPU 核数分配 TempDB 文件(1:4 比例,如 8 CPU →8 文件),
避免 IO 争用。设置 TempDB 初始大小(如 8GB),禁用自动增长,防止碎片化。
2) 分离 TempDB:将 TempDB 放在独立的磁盘上。
2.5、性能分析工具
1) SQL Server Profiler检查低效查询和死锁。
2) DMV通过动态管理视图分析性能问题。
SQL Server Profiler:
3、AOS服务端优化策略
3.1、服务层配置优化
1) 负载均衡:部署多台AOS服务器组成集群,使用Windows NLB或硬件负载均衡器分配请求,
避免单点瓶颈。
2) 线程池管理:调整 Server Configuration 中的 Maximum number of worker threads
(建议值=CPU核心数×4)监控线程阻塞情况,避免 Thread starvation (线程饥饿)。
3) 连接池优化:增大 Max connection pool size (默认100,可依据负载调整至200-300)
设置 Connection Lifetime 避免长时间占用(如300秒)。
3.2、内存与缓存优化
1) 对象缓存:启用AOS的 Object Server Cache ,调整 SysGlobalObjectCache 参数针对高频访问表
(如 InventTrans 、 CustTable )设置 CacheLookup=EntireTable 。
2) JIT编译优化:使用 X++ 代码预编译(AOT→右键编译)禁用调试模式( Debug mode 关闭)。
3.3、服务端资源隔离
1) 优化使用资源:独立部署AOS与SQL Server,避免资源争用。
2) 合理分配服务权限:为AOS服务账户分配专用服务权限(避免使用域管理员账户)。
4、服务器与网络性能优化策略
4.1、CPU资源优化
1) 识别高 CPU 使用率的进程:检测并找出占用 CPU较高的进程。优化或终止不必要的进程。
2) 调整处理器调度:将服务器电源计划设置为“高性能”,以确保CPU在需要时能够全速运行,
以最大性能输出。合理在“系统属性”中,选择 程序 或 后台服务 优化 CPU 使用。
3) 优化多线程应用程序:使用任务管理器或 wmic 命令调整进程的线程优先级。
4) 升级硬件:如果 CPU 长期处于高负载状态,考虑升级 CPU 或增加核心数。
4.2、内存优化
1) 识别内存泄漏:使用性能监视器或 RAMMap 检查内存使用情况,找出内存泄漏的进程。
2) 调整虚拟内存:在“系统属性”中调整虚拟内存(页面文件)大小,确保足够大以支持系统运行。
3) 加物理内存:如果服务器的CPU性能已成为瓶颈,考虑升级、增加物理内存。
4.3、磁盘优化
1) 优化磁盘 I/O:使用高性能SSD硬盘替代传统机械硬盘,提高读写性能。将系统文件、
应用程序文件和数据文件分布在不同磁盘上。
2) 磁盘碎片整理:定期对机械硬盘进行碎片整理(SSD不需要)。
3) 磁盘阵列优化:合理设计RAID,确保数据安全与磁盘性能获得最佳平衡。
4) 磁盘空间清理与优化:清理删除临时文件、回收站文件、系统更新备份文件等不必要的文件,
释放磁盘空间,提高系统性能。
5) 监控磁盘队列长度:使用性能监视器监控磁盘队列长度,确保其不超过磁盘数量的 1.5-2倍。
4.4、网络优化
1) 优化网络配置:调整 TCP/IP 参数(如MTU)以提高网络性能。及调整网络QoS策略,
释放全部带宽潜力。
2) 升级网络设备:如果网络带宽不足,考虑升级到更高带宽的网络设备。
例如升级服务器网络接口卡(NIC),与各网络节点吞吐量及线路网速。
4.5、Windows Server优化
1) 禁用不必要的服务:使用 `services.msc` 禁用不需要的系统服务,减少资源占用。
2) 优化启动项:使用任务管理器或 `msconfig` 禁用不必要的启动项,加快系统启动速度。
3) 负载均衡:对于多服务器环境,使用负载均衡技术将请求分散到多个服务器,
避免单台服务器系统资源过载。
4) Windows Update:安装 Windows Server 的最新更新和补丁,修复已知性能问题。
更新硬件驱动程序,确保兼容性和性能优化。
三、效果与总结
优化后,系统速度会得到非常明显的提升,例如最近实施的一个客户案例:优化前打印预览一份生产单排机表需要3分多钟,优化后基本2秒就出来了。优化前的库存明细查询物料使用状态时,超过1分钟,还经常卡机,需要强制结束系统进程重新打开,优化后1-2秒结果就查询出来了。
通过以上优化,Dynamics AX 的性能可以得到显著提升。定期监控和迭代优化是保持系统高效运行的关键。对于长期战略,建议升级迁移到Microsoft 最新的Dynamics 365,以利用其现代化的新功能和更高效的数据处理能力。如需进一步了解,欢迎交流。