比如知道性能问题出现在哪里 看到2.3
2018-06-25 14:52 笑一笑十年少!!! 阅读(242) 评论(0) 编辑 收藏 举报比如知道问题出现在哪里,比如一个系统运行速度还能接受,但是查询某一个报表出现了问题,甚至超时。那么99%是那个报表的相关程序出现了问题,可以通过sql执行计划排除 这一点在第5 7 8章重点介绍。
某个功能变慢 比如存储过程或者查询的问题
整个系统都很慢 :低效的代码,资源配备不合理 不合理的设计
通过windows性能监视器和任务栏管理器查看占用内存情况 资源监视器 sql活动和监视器 任务栏管理器 sql profilter
--------------------------------------------------------------五步定位法----------------------------------------------------------------------------------------
1:select * from sys.dm_os_wait_stats 查看等待类型占用的时间
2:select * from sys.dm_os_performance_counters 查看计数器
3:SELECT * FROM sys.dm_io_virtual_file_stats(DB_ID(N'[CJZFSql]'), 2); 查看某一个数据库的io读写情况
4:使用sql profilter定位到存储过程 sql语句
5:优化查询 用cte代替游标 优化索引
------------------------------查询数据库存储过程的最后使用时间-------------------------------------------------------
SELECT database_id,*FROM sys.databases WHERE database_id> 4
--找到对应数据库的ID号,我需要的对应数据库的ID=7
SELECT
a.name AS 存储过程名称,
a.create_date AS 创建日期,
a.modify_date AS 修改日期,
b.last_execution_time AS 最后执行日期,
b.execution_count AS 执行次数
FROM sys.procedures a
LEFT JOIN sys.dm_exec_procedure_stats b ON a.object_id=b.object_id
AND b.database_id='7'
WHERE
a.is_ms_shipped=0--去掉系统存储过程
--AND a.name LIKE '%SPC%'
ORDER BY b.database_id
--sys.procedures 中找到对应数据库的ID和存储过程名
--sys.dm_exec_procedure_stats 中找到次数等信息。
-----------------------------------------------------------------------------------------------------------------------
当有了解决方案后,需要验证,把数据库备份还原到测试服务器上,然后测试
或者直接线上解决要注意 如果把存储过程修改 表 对象修改 要备份出一个副本 然后直接改存储过程名和表结构,索引等