硬件与操作系统配置
-
内存分配
- 原则:预留20%-30%内存给操作系统,剩余分配给SQL Server。
- 操作:
-- 设置最大服务器内存(单位MB) EXEC sys.sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sys.sp_configure 'max server memory', 24576; -- 例如24GB RECONFIGURE;
- 监控:使用
sys.dm_os_performance_counters
跟踪Page Life Expectancy
(目标值>300秒)。
-
CPU优化
- 亲和性设置:避免CPU资源争用,绑定NUMA节点。
ALTER SERVER CONFIGURATION SET PROCESS AFFINITY NUMANODE = 0; -- 绑定NUMA节点0
- 并行度控制:
-- 限制并行查询的CPU核心数 EXEC sp_configure 'max degree of parallelism', 4; -- 根据核心数调整(8) RECONFIGURE;
- 亲和性设置:避免CPU资源争用,绑定NUMA节点。
-
存储I/O配置
- 磁盘分区:
- 数据文件(.mdf/.ndf)与日志文件(.ldf)分离到独立物理磁盘。
- 使用64KB分配单元格式化磁盘(NTFS)。
- 即时文件初始化:
- 授予SQL Server服务账户
SE_MANAGE_VOLUME_NAME
权限(通过本地策略)。 - 加速数据文件增长操作。
- 授予SQL Server服务账户
- 磁盘分区:
安全与访问控制
-
身份验证模式
- 混合模式:启用SQL登录+Windows认证,避免仅用
sa
账户。 - 强密码策略:启用
CHECK_POLICY = ON
。
- 混合模式:启用SQL登录+Windows认证,避免仅用
-
权限最小化
- 禁用
BUILTIN\Administrators
的sysadmin权限。 - 使用角色分离:
CREATE LOGIN [AppUser] WITH PASSWORD = 'StrongP@ss!'; CREATE USER [AppUser] FOR LOGIN [AppUser]; GRANT SELECT, INSERT ON [dbo].[Orders] TO [AppUser]; -- 按需授权
- 禁用
-
加密与审计
- TDE(透明数据加密):
CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256; ALTER DATABASE [YourDB] SET ENCRYPTION ON;
- 启用SQL Server审计:跟踪关键操作(如登录失败、权限变更)。
- TDE(透明数据加密):
性能调优配置
-
TempDB优化
- 文件数量:与CPU核心数一致(如8核→8个tempdb文件)。
- 大小均等:预分配相同大小(如4GB),避免自动增长。
ALTER DATABASE [tempdb] MODIFY FILE (NAME = 'tempdev', SIZE = 4GB);
-
索引与统计维护
- 自动更新统计:确保开启
AUTO_UPDATE_STATISTICS
。 - 填充因子:对频繁写入的表设置
FILLFACTOR = 80-90
。
- 自动更新统计:确保开启
-
查询优化器配置
- 启用
OPTIMIZE FOR AD HOC WORKLOADS
:减少即席查询计划缓存开销。EXEC sp_configure 'optimize for ad hoc workloads', 1; RECONFIGURE;
- 启用
高可用与灾难恢复
-
备份策略
- 完整备份:每日一次 + 事务日志备份:每15-30分钟一次。
- 验证备份:定期执行
RESTORE VERIFYONLY
。
-
Always On可用性组
- 前提:Windows故障转移集群 + 同步提交模式。
- 监听端口:配置专用端口(非默认1433)提升安全性。
网络与连接管理
-
TCP/IP协议优化
- 禁用不必要协议(如Named Pipes)。
- 设置静态端口(避免动态端口):
EXEC sys.sp_configure 'remote access', 0; -- 关闭远程访问
-
连接池设置
- 应用层配置
Max Pool Size=100
(根据负载调整),避免连接耗尽。
- 应用层配置
关键监控与维护命令
-- 检查等待类型 SELECT * FROM sys.dm_os_wait_stats ORDER BY wait_time_ms DESC; -- 查看内存使用 SELECT counter_name, cntr_value FROM sys.dm_os_performance_counters WHERE counter_name IN ('Total Server Memory (KB)', 'Target Server Memory (KB)'); -- 识别I/O瓶颈 SELECT DB_NAME(database_id) AS DB, CAST(SUM(size_on_disk_bytes)/1048576.0 AS DECIMAL(10,2)) AS Size_MB FROM sys.dm_io_virtual_file_stats(NULL, NULL) GROUP BY database_id;
最佳实践总结
- 定期更新:应用最新累积更新(CU)和安全补丁。
- 压力测试:使用
SQLQueryStress
模拟生产负载验证配置。 - 文档化变更:记录所有配置修改,便于审计与回滚。
- 监控基线:建立性能基线(如PerfMon日志),异常时快速定位。
引用说明参考Microsoft官方文档《SQL Server 2022配置指南》、《数据库引擎优化顾问》及业界权威实践(如Brent Ozar的优化建议),配置前请务必在测试环境验证。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7974.html