一、内存资源管理技巧
SELECT total_physical_memory_kb/1024 AS Total_Memory_MB, available_physical_memory_kb/1024 AS Available_Memory_MB FROM sys.dm_os_sys_memory可获取系统总内存与可用内存;SELECT d.name AS Database_Name, SUM(a.total_pages)*8/1024 AS Memory_Usage_MB FROM sys.dm_os_memory_clerks a JOIN sys.databases d ON a.database_id = d.database_id GROUP BY d.name ORDER BY Memory_Usage_MB DESC能查看各数据库的内存占用排序。同时,使用free -h命令查看系统级内存使用概况,top命令动态监控内存消耗,/proc/meminfo获取详细内存信息。EXEC sp_configure 'show advanced options', 1; RECONFIGURE;,然后设置最大服务器内存(限制缓冲池大小,避免占用过多系统内存,例如设置为16GB:EXEC sp_configure 'max server memory (MB)', 16000; RECONFIGURE;)。建议同时设置最小服务器内存(如4GB),防止服务器内存压力大时SQL Server过度收缩内存,保障数据库稳定性。需注意,max server memory仅限制缓冲池,不包含SQL Server其他组件(如连接池、锁管理器)的内存占用。echo 1 > /proc/sys/vm/drop_caches)、Dentry和IDcache(echo 2 > /proc/sys/vm/drop_caches)、Swap Cache(echo 3 > /proc/sys/vm/drop_caches)。但需谨慎使用,建议在系统空闲时操作,避免影响正在运行的业务。二、CPU资源管理技巧
top命令查看CPU使用率、进程占用情况(按1键可查看每个核心的使用率);vmstat 1 5命令监控CPU的上下文切换、中断等指标,识别CPU瓶颈。max degree of parallelism (MAXDOP)控制单个查询使用的最大CPU核心数(建议设置为CPU核心数的1/2或1/4,如8核服务器设置为4),避免过多并行导致CPU资源竞争;cost threshold for parallelism (CTFP)设置并行执行的成本阈值(默认5,建议调整为25-50),只有当查询成本超过该值时才使用并行执行,减少不必要的并行开销。SELECT *(只查询需要的列),减少数据传输和处理量;简化复杂查询(如拆分嵌套子查询、避免过度使用函数),降低CPU计算负担;使用存储过程封装频繁执行的复杂逻辑,减少SQL解析和编译时间。三、磁盘I/O资源管理技巧
iostat -x 1命令查看磁盘的读写延迟(await)、吞吐量(tps)、利用率(%util)等指标,识别慢磁盘;iotop命令监控进程级的磁盘I/O使用情况,定位高I/O进程。/data,日志文件放在/logs,TempDB放在/tempdb);调整文件系统挂载选项(如noatime),减少不必要的磁盘访问。四、配置与查询优化技巧
max server memory(限制SQL Server最大内存,避免占用过多系统资源)、max degree of parallelism(控制并行执行,平衡CPU使用和查询性能)、cost threshold for parallelism(设置并行执行成本阈值,减少不必要的并行)等参数,根据服务器硬件配置(CPU核心数、内存大小)和工作负载(OLTP/OLAP)调整。EXPLAIN命令分析查询执行计划,识别慢查询(如全表扫描、索引缺失);为常用于查询条件的列创建索引(如WHERE、JOIN、ORDER BY子句中的列),但避免在低基数列(如性别)上创建过多索引(会增加索引维护开销);定期重建或重组索引(如每月一次),保持索引的高效性(碎片率超过30%时重建,10%-30%时重组)。INSERT INTO ... SELECT),减少逐行处理的开销;明智使用事务(缩短事务持续时间,避免长时间锁定资源),减少锁争用;优化连接管理(使用连接池,减少数据库连接的创建和关闭次数,提高并发处理能力)。五、监控与维护技巧
UPDATE STATISTICS命令),帮助查询优化器生成更优的执行计划(建议每周更新一次);重建或重组索引(使用ALTER INDEX ... REBUILD或ALTER INDEX ... REORGANIZE命令),减少索引碎片(碎片率超过30%时重建,10%-30%时重组);定期备份数据库(使用全量备份+增量备份+差异备份策略),并测试备份的可恢复性(每月测试一次),确保数据安全。