一、方案背景
????????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,以利用其現代化的新功能和更高效的數據處理能力。如需進一步了解,歡迎交流。