1. MSSQL 7303 简介
MSSQL Server 7303 是微软在 SQL Server 2019 中推出的一项新功能。该功能允许 Microsoft SQL Server 实例能够在 Windows Failover Clustering (WFC) 中向其它可传输层安全协议 (TLS) 客户端发出端到端加密数据。MSSQL 7303 帮助数据库管理员和开发人员更好地保障企业数据的安全,提高数据保密性,保护企业用户的隐私。
2. MSSQL 7303 带来的性能问题
尽管 MSSQL 7303 提高了数据安全性,但当前情况下,MSSQL 7303 带来的性能问题是用户主要的关注点之一。在传输加密数据的同时,MSSQL Server 实例所需的 CPU 资源会大幅增加,导致实例整体性能下降,响应时间延长。尤其对于大型企业应用程序,加密数据的 CPU 资源消耗会十分明显,可能导致业务操作完全卡死。
2.1 MSSQL 7303 导致 CPU 使用率飙升
在创建加密连接之后,MSSQL Server 实例已经需要为 TLS 建立好的连接进行路由、建立虚拟通道等工作。这些额外操作对实例的 CPU 资源造成很大压力,从而导致 CPU 使用率显著增加。
代码示例:
SELECT SUM(qs.[total_worker_time])
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.[sql_handle]) AS st
WHERE st.[text] LIKE '%MSSQLSERVER%' AND st.[text] NOT LIKE '%sys.%'
上方 SQL 语句可以用于查询实例在处理哪个查询时 CPU 使用率最高。
2.2 MSSQL 7303 导致网络延迟增加
由于也需要处理加密解密、_ROUTER_、接口绑定等额外操作,使数据传输的时间延长,网络延迟也会相应增加。另外,应用程序如果频繁地打开和关闭数据库连接,也会导致加密操作变得更为显著。
解决:要提高 MSSQL 7303 的性能,最简单的方法就是减少 CPU 和网络的平均负载。以下是一些实用方法。
3. 提高 MSSQL 7303 性能
3.1 升级硬件设施
升级物理服务器的 CPU 核数,内存容量和硬盘读写速度等,可以显著提高系统性能。在硬件升级之前,请确保与硬件兼容的微软操作系统的最新更新以及 SQL Server 的最新 Service Pack。
3.2 使用压缩技术
压缩技术是将加密数据进行更高效的传输的有效办法。压缩率通常取决于使用的压缩算法和原始数据的性质。压缩算法可以在传输期间进行,也可以先将数据压缩后再进行传输。从安全性的角度出发,压缩不应该替代加密操作。同时,压缩可以通过更少的数据传输网络,以实现减少延迟、减少带宽、降低 CPU 成本等优化。
3.3 消除不必要的操作
在 MSSQL Server 实例中,一些不必要的操作也会增加 CPU 负载,例如:检查是否有可用备用服务器、定期清理任务等。关掉这些不必要的操作,可以减轻 CPU 和网络负载。
3.4 访问磁盘卷缓存的策略
默认情况下,SQL Server 会强制磁盘输入/输出 (I/O) 操作等待磁盘控制器信号,以精确地确定 I/O 操作何时已完成,并在此期间阻止 SQL Server 执行其他 I/O 操作。这种 I/O 交换的成本很高,而且程序的性能会大大下降。针对这种情况,你需要在实例级别和数据库级别上调整访问磁盘卷缓存的策略。
3.5 设置 SSL/TLS 建立新连接的时间上限
默认情况下,SQL Server 设置 SSL/TLS 建立新连接的时间为 30 秒。如果你的企业网络比较繁忙,而且需要进行自己的证书验证,那么可能会使建立连接的时间超过 30 秒。可以使用以下命令来增加此值:
代码示例:
EXEC sys.sp_configure N'remote login timeout (s)', N'60'
此示例将"远程登录时间 (秒)"设置为 60 秒。
3.6 启用 7303 的客户端连接缓存
在一些情况下,从相同的客户端计算机重复使用相同的连接可能是很常见的。因此,启用 7303 的客户端连接缓存是缓解性能问题的有效办法之一。
代码示例:
ALTER ENDPOINT [MyEndpoint] FOR SERVICE_BROKER (
AUTHENTICATION=certificate [MyCert],
ENCRYPTION=required,
MESSAGE_FORWARDING_ENABLED=OFF)
AS TCP (
LISTENER_PORT=4022,
LISTENER_IP=ALL,
AUTHORIZATION=MyPermissions,
NODELAY=OFF,
ENABLE_WEB_SOCKETS=OFF,
SNI_CERTIFICATE=0)
WITH CACHED_CONNECTIONS=1024;
在 MSSQL 7303 中,可以使用“CACHED_CONNECTIONS”选项来启用客户端连接缓存,默认值为 0,代表关闭客户端连接缓存机制。
4. 总结
本文讨论了 MSSQL 7303 引起的性能问题,并提供了一些解决办法,包括升级硬件设施、使用压缩技术、消除不必要的操作、访问磁盘卷缓存的策略、设置 SSL/TLS 建立新连接的时间上限等。虽然这些办法不能完全消除性能问题,但它们可以大大减轻 CPU 负荷、网络延迟和磁盘 I/O 操作以提升 MSSQL 7303 的性能。同时,选取适合企业内部网络环境的解决方案是十分重要的。