sqlserver性能调优常用方法
1.检查数据库空间使用情况,查看哪些表占用了比较大的磁盘空间
执行语句如下:
select o.name, SUM(p.reserved_page_count) as reserved_page_count, SUM(p.used_page_count) as used_page_count, SUM( case when(p.index_id<2) then (p.in_row_data_page_count+ p.lob_used_page_count+p.row_overflow_used_page_count) else p.lob_used_page_count+p.row_overflow_used_page_count end ) as DataPages, SUM( case when (p.index_id<2) then row_count else 0 end ) as rowCounts from sys.dm_db_partition_stats p inner join sys.objects o on p.object_id=o.object_id group by o.name order by rowCounts desc
2.通过活动监视器查看性能消耗
通过磁盘IO,CPU占用时间,逻辑读写的次数来判断哪些语句消耗性能比较大
3.通过执行时间,磁盘IO和执行计划查看sql语句情况,包括编译执行时间,索引扫描查找,读写等等
查看sql语句的执行时间和表扫描,逻辑读写情况的语句:
SET STATISTICS TIME ON
SET STATISTICS IO ON
预读:在查询计划生成的过程中,用统计信息去硬盘读取数据到缓存中,读一次就是读了一页数据
物理读:查询计划生成好以后,如果缓存缺少所需要的数据,再从硬盘里读取缺少的数据到缓存里,读一次就是读了一页数据
逻辑读:直接从缓存中读取数据,读一次就是读了一页数据,可以通过索引减少逻辑读的次数
因为物理读需要从硬盘从读取数据,会增加IO读开销,所以尽量减少物理读
4.处理内存占用过高方法
1.增加服务器内存
2.设置sqlserver占用服务器内存的大小
3.清空sqlserver占用缓存
4.查找占用内存比较大的sql语句进行优化,这个是主要办法
5.重启服务器(清空占有的缓存,关掉线程,但是只能解决一时问题)