关于SQL Server监控与优化(二)

2014-11-24 11:26:54 · 作者: · 浏览: 1
--Cpu is in milliseconds,duration in microseconds
处理:
1. 增加CPU个数
2. 优化查询语句
3. 表值函数和CLR函数比较耗费cpu适当优化
www.2cto.com
内存优化
检查内存压力来自内部还是外部方法:
使用任务管理工具 在性能选项卡下,“AvailablePhysical Memory”<50M 可用内存小于50M
检查页文件Page File size
-页文件超过物理内存2倍
-使用任务管理工具 在性能选项卡下commit change 不应该大于物理内存
查看其它应用程序是否占用了过多内存
-除去SQL Server之外的应用程序是否占用大量内存,例如IE,抢占sql内存
确认内部内存压力:
dbcc memorystatus
查看内存分配情况
DMVs
select type,sum(multi_pages_kb)
from sys.dm_os_memory_clerks
where multi_pages_kb !=0
group by type
排错流程:
1. 你的服务器是面临外部内存压力还是内部内存压力
外部压力:调节SQLserver 对内存的使用量,设置sql属性,扩大使用内存,杀掉外部进程
内部压力:DBCC或者DMVs具体解决。
错误701:内存不足,外部压力,扩大内存或者减少应用
错误802:bufferpool没有内存,如果释放buffer pool,则所有plan都没了
错误8645:执行过程中等待内存分配超时。使用很多临时表,大量并发。找到问题查询
2. 收集性能数据SQL Server:BufferManager,SQL Server:Memory Manager
3. 验证配置参数(sp_configure)
'minmemory per query','min/max server memory',
'aweenabled'-- 大内存支持 超过4g需要使用,'Lock pages in memory'
4. DBCC Memorystatus
IO瓶颈
检查
1 perfmon
磁盘队列 avg.disk queue length>2 说明有等待
平均读写 avg.disk sec/read 0.12 , avg.disksec/write >0.12
磁盘时间 %Disk time>50%
avg.diskreads/sec>85%,avg.disk writes/sec>85%
2 使用RAID
Raid 0-- I/Os per disk=(reads+writes)/number ofdisks 性能最大提升
Raid 1-- I/Os per disk = [reads+(2*writes)]/2
Raid 5-- I/Os per disk=[reads+(4*writes)]/number of disks 读性能提示,写性能不如raid0
Raid 10--I/Os per disk=[reads+(2*writes)]/number of disks
www.2cto.com
3 DMVs
-- Physical IO wait when reading and writingbuffer pages
selectwait_type,waiting_tasks_count,wait_time_ms
from sys.dm_os_wait_stats
where wait_type like 'PAGEIOLATCH%'
order by wait_type
--不同的锁等待的时间
--pending IO request
selectdatabase_id,file_id,io_stall,io_pending_ms_ticks, scheduler_address
from sys.dm_io_virtual_file_stats(null,null)t1,
sys.dm_io_pending_io_requestsas t2
where t1.file_handle=t2.io_handle
-- 如果有数据,说明iO有问题
解决:
通过磁盘索引向导,优化索引,减少磁盘扫描
www.2cto.com
找到最浪费IO性能的查询
select top 5
(total_logical_reads/execution_count) asavg_logical_reads,
(total_logical_writes/execution_count)asavg_logical_writes,
(total_physical_reads/execution_count)asavg_physical_reads,
execution_count,
statement_start_offset,
sql_handle,
plan_handle,
SQLText.Text
from sys.dm_exec_query_stats
cross apply sys.dm_exec_sql_text(sql_handle) asSQLText
order by(total_logical_reads+total_logical_writes)/execution_count desc
作者 lanwilliam