Coin163

首页 > 检测SQL SERVER数据库CPU瓶颈及内存瓶颈

检测SQL SERVER数据库CPU瓶颈及内存瓶颈

相关标签: server 内存 数据库 sql

2020腾讯云双十一活动,全年最低!!!(领取3500元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1074

【阿里云】双十一活动,全年抄底价,限时3天!(老用户也有),
入口地址https://www.aliyun.com/1111/home

相关推荐:VB实现SQL Server数据库备份/恢复

不以物喜:‘物’是指结果,指的是你现在已经得到的东西,可能是金钱、房车,可能是职位、权力,也就是名和利。这个世界越来越是结果为导向的社会,个人的成就越来越与客观得到的名和利直接挂钩,而非主观自我欣赏之类。你对社会的贡献价值会直接与你得到的名

一、sql 数据库CPU瓶颈

对于SQL Server的一个工作进程的状态有很多,主要状态有运行中(RUNNING)、可运行(RUNNABLE)和挂起(SUSPENED)3种。 通过查看系统监视计数器Processor:% Processor Time,可以确定CPU瓶颈。如果这个计数器的值很高。比如持续15-20分钟超80%,就意味着CPU出现了瓶颈。 检测CPU压力的另一个方法是计算可运行状态下的工作进程数量,通过执行如下的DMV查询可以得到这个信息: SELECT COUNT(*) AS workers_waiting_for_cpu, t2.Scheduler_id FROM

sys.dm_os_workers

AS t1, sys.dm_os_schedulers

AS t2 WHERE t1.state = 'RUNNABLE' AND t1.scheduler_address=t2.scheduler_address AND t2.scheduler_id < 255 GROUP BY t2.scheduler_id 也可以执行如下的查询得到工作进程在可运行状态下花费的时间: SELECT SUM(signal_wait_time_ms) FROM sys.dm_os_wait_stats 下面查询是找出每次执行占用CPU最多的前100位查询: SELECT TOP 100

total_worker_time/execution_count

AS avg_cpu_cost, plan_handle, execution_count, (SELECT SUBSTRING(text, statement_start_offset/2+1, (CASE WHEN statement_end_offset = -1

THEN LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset END - statement_end_offset)/2) FROM

sys.dm_exec_sql_text(sql_handle))

AS query_text FROM sys.dm_exec_query_stats ORDER BY avg_cpu_cost

DESC 稍做修改,找出运行最频繁的查询: SELECT TOP 100

total_worker_time/execution_countASavg_cpu_cost, plan_handle, execution_count, (SELECT

SUBSTRING(text,statement_start_offset/2+1, (CASE

WHEN

statement_end_offset = -1

THEN LEN(CONVERT(nvarchar(max), text)) * 2 ELSE

statement_end_offset

END - statement_end_offset)/2) FROM

sys.dm_exec_sql_text(sql_handle))

AS

query_text FROM

sys.dm_exec_query_stats ORDER BY execution_count

DESC 可以使用下列系统监视性能计数器查看编译和重编译的速度: 1.

SQLServer: SQL Statistics: BatchRequests/Sec(每秒批处理请求数) 2.

SQLSer

相关推荐:[置顶] 黑马程序员 将Access数据库里的数据导入Sql server数据库里

---------------------- Windows Phone 7手机开发、 .Net培训、期待与您交流! ----------------------

前几天在黑马论坛上遇到一个网友求手机IP地址的数据,我便回复,网上如果找不到的话可以加我QQ,今晚下班回来,打开QQ给他传过去~结 果让他想不到,

ver: SQL Statistics: SQLCompilations/Sec(每秒SQL编译次数) 3.

SQLServer: SQL Statistics: SQLRecompilations/Sec(每秒SQL重编译次数) 还可以通过下面语句得到SQLServer在优化查询计划上花费的时间: SELECT

*

FROM

sys.dm_exec_query_optimizer_info WHERE counter='optimizations' OR

counter = 'elapsed time' 下面查询找到被编译得最多的前10位查询计划: SELECT

TOP 10

plan_generation_num, execution_count, (SELECT SUBSTRING(text, statement_start_offset/2+1, (CASE

WHEN

statement_end_offset = -1

THEN LEN(CONVERT(nvarchar(max), text)) * 2 ELSE

statement_end_offsetEND-statement_end_offset)/2) FROM

sys.dm_exec_sql_text(sql_handle))ASquery_text FROM

sys.dm_exec_query_stats WHERE

plan_generation_num> 1 ORDER

BY

plan_generation_num

DESC

二、sql 数据库内存瓶颈 内存有压力时,一个查询计划可能得移出内存。如果这个计划被再次提交执行,就必须再优化一次,而由于查询优化是CPU密集型运算,这就会给CPU带来压力。同样,内存有压力时,数据库页面可能需要被移出缓冲区池。如果这些页面很快就再次被选中,就会导致更多的物理IO。 通常所说的内存指的是服务器上的可用物理内存(既RAM)。还有另外一种内存叫做虚拟地址空间(VAS)或虚拟内存。在Windows系统上,所有位应用程序都有一个GB的进程地址空间,用来获取最大GB的物理内存。在GB的可用内存之外,进程还可以在用户模式下得到GB的VAS,另外GB保留只能通过内核模式获取。要想更改这个配置,可以在boot.ini文件中使用/3GB switch。 常见的操作系统机制是页面调试,它使用一个交换文件来存储最近未使用的部分进程内存。当这一内存被再次引用时,它就直接从交换文件中读取(或调入)物理内存。

可以通过性能计数器,监测下面参数: 1. 内存:可用字节(Available Bytes) 2. SQL Server:缓冲管理器:缓存命中率(Buffer Cache Hit Ratio)指的是那些不用通过磁盘读取而直接在缓冲区池中找到的页的比例。对于大多数产品工作负荷而言,这个值应该是多。(应该是越大越好) 3. SQL Server:缓冲管理器:页平均寿命(Page Life Expectancy)指的是一个没有被引用的页在缓冲区池中保留的秒数。如果数值较低,则说明缓冲区池遇到了内存不足的情况。 4. SQL Server:缓冲管理器:检查点页/秒(Checkpoint Pages/Sec)指的是被检查点刷新的页数,或者要求所有脏页被刷新的其它操作的数目。它能显示工作负荷中增加的缓冲区池活动量。 5. SQL Server:缓冲管理器:延迟写入/秒(Lazywrites/Sec)指的是缓冲管理器的延迟写入器写入的缓冲数目,它的作用类似于前面提到的检查点页/秒。

原文

一、sql 数据库CPU瓶颈           对于SQL Server的一个工作进程的状态有很多,主要状态有运行中(RUNNING)、可运行(RUNNABLE)和挂起(SUSPENED)3种。 通过查看系统监视计数器Processor:% Proce

------分隔线----------------------------