1、RDS SQL Server CPU高使用率性能优化阿里云技术专家汪建明(风移)索引数据类型转换Non-SARG统计信息参数嗅探分享议程TOP SQL MSSQL实例CPU使用率:RDS SQL 控制台=监控与报警=监控=资源监控=MSSQL实例CPU使用率RDS SQL CPU使用率性能指标索引缺失 缺失索引 DTA(Database Tuning Advisor)执行计划索引缺失警告 解析执行计划缓存XML 缺失索引动态管理视图 sys.dm_db_missing_index_group_stats sys.dm_db_missing_index_groups sys.dm_db_miss
2、ing_index_details Demo索引碎片 索引碎片 重建索引目的 减小索引碎片率 更新统计信息 清理执行计划缓存,获取更优的执行计划 查询索引碎片 sys.indexes sys.dm_db_index_physical_stats 注意 Database Mirroring/Log Shipping/AlwaysOn 大量的 I/O(IOPS)资源消耗 可能会导致Blocking/Deadlock Tempdb压力增大 因此 必须基于100%的需要重建索引 基于索引级别的碎片检查和重整=30%Rebuild 业务低峰期维护索引碎片 Re-index partition by pa
3、rtition Demo数据类型转化 数据类型转换 是什么 转换原则:低优先级往高优先级转换 危害:使用Index Scan而不是Index Seek 如何避免 数据库设计阶段,确保分布在不同表中相同字段数据类型一致 确保传入参数数据类型和基表保持一致 观察执行计划:CONVERT_IMPLICIT 执行计划缓存中发现 DemoNon-SARG 查询 Non-SARG查询 在WHERE/ON 语句中对基表字段使用函数 常见的函数 Convert/Cast/Data Type Conversion Datediff/Dateadd/Year/Month Upper/Lower/Rtrim/Sub
4、string/Left/Like%XXX%/Isnull UDF(User Define Functions)Demo统计信息 统计信息 是什么 统计信息为查询优化器执行计划评估过程中提供数据列密度分布信息 更新统计信息 update statistics XXX sys.sp_updatestats stats_date Demo参数嗅探 参数嗅探 表现形式 查询语句执行时快时慢 查询第一次执行很快,突然变慢了 相同或者相似的查询,走不通的执行计划 查询语句不同的传入参数,性能天壤之别 产生原因 解决方案 清理缓存(不推荐):Reboot OS/SQL Service/DBCC FREEPR
5、OCCACHE DBCC Clean特定查询或者存储过程执行计划缓存 使用WITH RECOMPILE Query Hits 更新统计信息 创建缺失索引TOP SQL TOP SQL TOP CPU SQL TOP total CPU usage SQL TOP CPU usage per run SQL TOP Reads SQL TOP total reads SQL TOP reads per run SQL TOP Writes SQL TOP total writes SQL TOP writes per run SQL TOP Duration SQL TOP total duration usage SQL TOP duration per run SQL