Windows Server 2016 安裝 遠端桌面服務 角色後,寫磁碟變慢的問題

東北胖子發表於2022-03-12

作業系統版本:

目前已知Windows Server 2016 / 2019

問題描述:

      當作業系統中新增 遠端桌面服務  角色後,使用資料庫客戶端遠端連線資料庫,匯出資料時速度會變慢,未安裝 遠端桌面服務角色前,匯出大約花費45秒左右,安裝後匯出大約花費520秒左右,相差12倍左右。
     但是,解除安裝 遠端桌面服務 角色後,匯出資料的速度就恢復了正常,所以推斷跟 遠端桌面服務 角色有關係。
     對作業系統的CPU、記憶體、磁碟、網路系統資源進行效能測試,在匯出資料慢時,資源使用率非常低,所以確定系統資源充足,沒有影響到匯出資料時間。

     對資料網路傳輸時間和資料寫磁碟時間進行統計,發現匯出資料變慢,主要是寫入磁碟比較慢。

問題原因:

問題比較難解決,找到了資料庫相關方面的研發人員,也無法確定問題的原因,最後只能找微軟公司幫助解決問題。
微軟的工作人員透過使用 Process Monitor工具對匯出資料的過程進行了分析,得出如下結論:


在匯出速度快時,呼叫的堆疊如下
    //呼叫棧如下
0          FLTMGR.SYS    FltpPerformPreCallbacks
1          FLTMGR.SYS    FltpPassThroughInternal
2          FLTMGR.SYS    FltpPassThrough
3          FLTMGR.SYS    FltpDispatch
4          ntoskrnl.exe     IopSynchronousServiceTail
5          ntoskrnl.exe     NtWriteFile
6          ntoskrnl.exe     KiSystemServiceCopyEnd
7          ntdll.dll ZwWriteFile
8          KernelBase.dll
9          java.dll java.dll
10        java.dll java.dll
11        java.dll java.dll


在匯出慢的時,呼叫堆疊如下
傳輸較慢的日誌中,可以看到java在寫完初始檔案後,就沒有再寫檔案了,最後一直是在做網路傳輸,這個時候其實是系統程式在寫日誌
//具體呼叫棧如下,可以看到這時候是由TSFairShare這個檔案在寫檔案
0          FLTMGR.SYS    FltpPerformPreCallbacksWorker
1          FLTMGR.SYS    FltpInternalCompletePendedPreOperation
2          FLTMGR.SYS    FltCompletePendedPreOperation
3          TSFairShare.sys          I_CompletePendedIo C:\Windows\system32\drivers\TSFairShare.sys
4          TSFairShare.sys          TSFSContinuePendedIo
5          TSFairShare.sys          CTSSchedulerMgr::ContinueProcessIo
6          TSFairShare.sys          CTSSchedulerMgr::ProcessNextWorkItem
7          TSFairShare.sys          CTSSchedulerMgr::TSSchedulerWorkerThread
8          TSFairShare.sys          CTSSchedulerMgr::staticTSSchedulerWorkerThread
9          ntoskrnl.exe     PspSystemThreadStartup =    
10         ntoskrnl.exe     KiStartSystemThread

產生報錯原因:

根據微軟內部資料顯示,安裝rdsh的角色,就會block ODX 的快速傳輸機制,所以導致傳輸緩慢。

解決辦法 :

修改登錄檔,禁用TSFairShare功能。


在登錄檔中,有磁碟、網路、CPU資源啟用了TSFairShare,此將以下三個鍵值EnableFairShare由1修改為0,然後重啟計算機。也不用全都修改為0,根據自己的實際情況修改,我這裡是匯出資料時,寫入磁碟慢,因為只禁用磁碟的TSFairShare就可以了。
磁碟
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\Disk\EnableFairShare
網路
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TSFairShare\NetFS\EnableFairShare

CPU
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Quota System\EnableFairShare



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2317695/viewspace-2869909/,如需轉載,請註明出處,否則將追究法律責任。

相關文章