一、方案背景

        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.4TempDB优化

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,以利用其现代化的新功能和更高效的数据处理能力。如需进一步了解,欢迎交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95071.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95071.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95071.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM保留的标准中断处理程序入口和外设中断处理程序入口介绍

在ARM架构中,中断处理是一个关键机制,它允许CPU在执行主程序时能够响应外部或内部的事件。对于ARM MCU(微控制器单元)而言,中断处理程序入口通常分为两类:ARM保留的标准中断处理程序入口和外设中断处理程序…

防火墙环境下的全网服务器数据自动化备份平台搭建:基于 rsync 的完整实施指南

一、项目总览 1.内容介绍 本文以 3 台 CentOS 7.9 服务器(Web 服务器、NFS 服务器、备份服务器)为载体,详解如何在全防火墙开启的前提下,搭建一套自动化数据备份平台:每日自动打包 Web 站点、NFS 共享数据及系统关键…

Spring之【Import】

目录 Import注解 源码分析 使用示例 ImportSelector 源码分析 使用示例 DeferredImportSelector 源码分析 使用示例 ImportBeanDefinitionRegistrar 源码分析 使用示例 Import注解 源码分析 处理组件类上的Import注解 将Import引入类对应的BeanDefinition对象添加…

RN项目环境搭建和使用-Mac版本(模拟器启动不起来的排查)

ReactNative: https://github.com/facebook/react-native https://reactnative.cn/docs/getting-started (可以先通读一下这个) 环境搭建 (mac版)https://juejin.cn/post/7404860612758765605 搭建之前确认版本&#x…

悬赏任务系统网站兼职赚钱小程序搭建地推抖音视频任务拉新源码功能详解二开

功能详解(一)登录与注册1、登录:打开系统用户端,输入已注册的手机号,若为首次登录或忘记密码,可通过 “找回密码” 功能,按提示验证身份后重置密码登录。 2、注册:点击 “注册” 按钮…

scikit-learn/sklearn学习|线性回归解读

【1】引言 前序学习进程中,对SVM相关的数学原理进行了探索和推导,相关文章链接包括且不限于: python学智能算法(二十六)|SVM-拉格朗日函数构造-CSDN博客 python学智能算法(二十八)|SVM-拉格朗…

音视频学习(五十一):AAC编码器

什么是AAC编码器? 高级音频编码(Advanced Audio Coding,简称AAC) 是一种有损音频压缩技术,旨在作为MP3的下一代标准而开发。它的主要目标是在比MP3更低的比特率下提供更好的音质,同时具备更强的灵活性和功能…

10-netty基础-手写rpc-定义协议头-02

netty系列文章: 01-netty基础-socket02-netty基础-java四种IO模型03-netty基础-多路复用select、poll、epoll04-netty基础-Reactor三种模型05-netty基础-ByteBuf数据结构06-netty基础-编码解码07-netty基础-自定义编解码器08-netty基础-自定义序列化和反序列化09-n…

计算机毕设缺乏创新点?基于大数据的快手平台用户活跃度分析系统给你思路【程序开发+项目定制】

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…

01.【面试题】在SpringBoot中如何实现多数据源配置

文章目录 1. 什么是多数据源 1.1 基本概念 1.2 传统单数据源 vs 多数据源 单数据源架构 多数据源架构 2. 为什么需要多数据源 2.1 业务场景需求 2.2 技术优势 3. 多数据源的实现方式 3.1 静态多数据源 3.2 动态多数据源 4. 环境准备 4.1 创建SpringBoot项目 pom.xml依赖配置 4.…

redis主从模型与对象模型

redis淘汰策略 首先我们要明确这里说的淘汰策略是淘汰散列表中的key-value,而不是value中的各个数据结构 过期key中 volatile-lru 从设置了过期时间的键中,移除最近最少使用的键(LRU算法)。适合需要优先保留高频访问数据的场景…

快速搭建开源网页编辑器(vue+TinyMCE)

文章目录 Tiny MCE 安装方法 1. 安装node.js 2. 创建vue3项目 3. 安装TinyMCE依赖并使用 (1)在component文件夹创建Editor.vue文件 (2)编辑App.vue文件 (3)运行项目 (4)获取并设置API key (5)设置中文菜单 Tiny MCE 安装方法 1. 安装node.js 下载地址:https://nod…

ADK【4】内置前端调用流程

文章目录说明ADK内置前端ADK内置前端开启流程说明 本文学自赋范社区公开课,仅供学习和交流使用,不用作任何商业用途! ADK内置前端 ADK作为最新一代Agent开发框架,不仅功能特性非常领先,而且还内置了非常多的工具&am…

LLMs之GPT-5:OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力,赋能人人专家级智能—技术突破、性能评估与安全保障全面解读

LLMs之GPT-5:OpenAI 发布更智能、更快速、更有用的 AI 模型—内置思考能力,赋能人人专家级智能—技术突破、性能评估与安全保障全面解读 导读:2025年8月7日,OpenAI 发布了 GPT-5,这是他们目前最智能的 AI 系统。它在编…

Java 中操作 R 的全面指南

Java 中操作 R 的全面指南 引言 Java作为一种广泛使用的编程语言,具有跨平台、高性能、可扩展等特点。随着大数据和机器学习的兴起,Java在处理和分析复杂数据集方面发挥着越来越重要的作用。R语言,作为一种专门用于统计计算和图形展示的语言,同样在数据分析领域有着举足轻…

数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!

目录 1.优先级队列 2. 堆的概念 3. 堆的存储方式 4. 堆的创建 4.1 向下调整 4.2 堆的创建 4.3 堆的插入 4.4 堆的删除 5.用堆模拟实现优先级队列 6.常用接口的介绍 6.1 PriorityQueue 的特性 6.2 PriorityQueue 的方法 7. Top K问题 1.优先级队列 队列是一种先进先…

C语言自定义类型深度解析:联合体与枚举

在C语言中,自定义类型为数据组织提供了极大的灵活性。除了常用的结构体,联合体(共用体)和枚举也是非常重要的自定义类型。本文将结合实例,详细解析联合体和枚举的特性、用法及实际应用场景。 一、联合体(Un…

Numpy科学计算与数据分析:Numpy数据分析基础之统计函数应用

Numpy统计函数实战:数据的聚合与分析 学习目标 通过本课程的学习,学员将掌握Numpy中用于统计分析的关键函数,如求和(sum)、平均值(mean)、标准差(std)等,能够熟练地在实际数据集中应用这些函数进行数据的聚合与分析。 相关知识…

从引导加载程序到sysfs:Linux设备树的完整解析与驱动绑定机制

摘要本报告旨在为嵌入式Linux开发者详细梳理设备树(Device Tree, DT)在系统启动中的完整解析流程。报告将从引导加载程序(Bootloader)如何准备和传递设备树二进制文件(DTB)开始,逐步深入到内核如…

基于深度学习的污水新冠RNA测序数据分析系统

基于深度学习的污水新冠RNA测序数据分析系统 摘要 本文介绍了一个完整的基于深度学习技术的污水新冠RNA测序数据分析系统,该系统能够从未经处理的污水样本中识别新冠病毒变种、监测病毒动态变化并构建传播网络。我们详细阐述了数据处理流程、深度学习模型架构、训练…