Windows Server 2016 安装 远程桌面服务 角色后,写磁盘变慢的问题

操作系统版本:

目前已知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



请使用浏览器的分享功能分享到微信等