SQLServer2008数据库优化公共脚本 浏览:258

-查询数据库的连接数

select count(*)从哪里master.dbo.sysprocesses DBID = db_id()

-前10种等待类型

选择前10 * sys.dm_os_wait_stats

通过wait_time_ms倒序

SELECT * FROM sys.dm_os_wait_stats哪里wait_type like'pagelatch %

或wait_type like'lazywriter_sleep %

CPU的压力

选择scheduler_id,current_tasks_count,runnable_tasks_count

从sys.dm_os_schedulers

在scheduler_id<255

-最差的前10个使用查询

选择前10 procedurename = t.text,

executioncount = s.execution_count,

avgexecutiontime =空(s.total_elapsed_time / s.execution_count,0),

avgworkertime = s.total_worker_time / s.execution_count,

totalworkertime = s.total_worker_time,

maxlogicalreads = s.max_logical_reads,

maxphysicalreads = s.max_physical_reads,

maxlogicalwrites = s.max_logical_writes,

creationdatetime = s.creation_time,

callspersecond =空(s.execution_count / DateDiff(第二,s.creation_time,getdate()),0)

从sys.dm_exec_query_stats S

交叉应用sys.dm_exec_sql_text(s.sql_handle)T为

s.max_physical_reads desc

选择和(signal_wait_time_ms)作为total_signal_wait_time_ms信号总等待时间,

为和等待时间(wait_time_ms - signal_wait_time_ms)作为resource_wait_time_ms资源,

(signal_wait_time_ms总和)/(wait_time_ms总和)×1×100 { signal_wait_percent信号等,

和(wait_time_ms - signal_wait_time_ms)/(wait_time_ms总和)×1×100 { resource_wait_percent当等待资源

从sys.dm_os_wait_stats

信号等待时间太长,等待资源,所以您的CPU目前是瓶颈。

-查看流程执行的SQL语句

如果(select count(*)从主。dbo。执行)> 500

开始

选择文本、跨应用master.sys.dm_exec_sql_text(a.sql_handle)从master.sys.sysprocesses一

终点

选择文本,从一个master.sys.sysprocesses A.

交叉应用master.sys.dm_exec_sql_text(a.sql_handle)

在a.spid = 51

DBCC inputbuffer(53)

结核病

作为



选择blocking_session_id,

session_id,db_name(database_id)为dbname,文本从master.sys.dm_exec_requests一

交叉应用master.sys.dm_exec_sql_text(a.sql_handle)

),

TB1为



选择A,login_time,program_name,client_interface_name,login_name,cpu_time,memory_usage8 as'memory_usage(KB),

total_scheduled_time,读,写,logical_reads

从结核内加入master.sys.dm_exec_sessions B

在a.session_id = b.session_id



Select a.*, connect_time, client_tcp_port, client_net_address from tb1 a inner join master.sys.dm_exec_connections B

当前的进程数

SELECT * FROM master.dbo.sysprocesses

由CPU倒序

-查看当前活动中的进程数

sp_who活跃

-由于连接未释放,查询是否过高导致CPU丢失

SELECT * FROM master.dbo.sysprocesses

那里的SPID > 50

和waittype = 0x0000

时间= 0

状态= 'sleeping

和last_batch < DateAdd(分钟,- 10,getdate())

和login_time < DateAdd(分钟,- 10,getdate())

-强制释放空连接

select'kill + RTrim(SPID)从master.dbo.sysprocesses

那里的SPID > 50

和waittype = 0x0000

时间= 0

状态= 'sleeping

和last_batch < DateAdd(分钟,- 60,getdate())

和login_time < DateAdd(分钟,- 60,getdate())

-查看当前会话和占用最高CPU资源的执行语句(及时CPU)

选择SPID,CMD,CPU,physical_io,memusage,

(选择前1 {文字}::fn_get_sql(sql_handle))sql_text

从主CPU执行的顺序,降序,physical_io desc

-看看缓存中的小可重用查询,这些查询占用大内存查询(未在当前缓存中释放)——全局

选择前100 usecounts,objtype,p.size_in_bytes,{ } { }的SQL文本。

从sys.dm_exec_cached_plans P外应用sys.dm_exec_sql_text(p.plan_handle)SQL

为了usecounts,p.size_in_bytes desc

选择前25 qt.text,qs.plan_generation_num,qs.execution_count,DBID,objectid

从sys.dm_exec_query_stats QS

交叉应用sys.dm_exec_sql_text(sql_handle)QT

在plan_generation_num > 1

为了qs.plan_generation_num

选择前50 qt.text作为sql_text,总和(QS。total_worker_time)作为total_cpu_time,

和(QS。execution_count)作为total_execution_count,

和(QS。total_worker_time) /总和(QS。execution_count)作为avg_cpu_time,

计数(*)为number_of_statements

从sys.dm_exec_query_stats QS

交叉应用sys.dm_exec_sql_text(QS。sql_handle)QT

集团通过qt.text

为了total_cpu_time降序统计总的CPU时间

通过avg_cpu_time倒序统计平均单查询的CPU时间

-计算运行状态中工作进程的个数

select count(*)为workers_waiting_for_cpu,s.scheduler_id

从sys.dm_os_workers O

内部联接sys.dm_os_schedulers S

在o.scheduler_address = s.scheduler_address

和s.scheduler_id<255

在o.state = 'runnable

集团通过s.scheduler_id

表空间大小查询

创建表# TB(表名称举例,记录编号int,储备空间varchar(100),利用空间的varchar(100),索引使用varchar varchar(100),未使用的空间varchar(100)。

插入# TB exec sp_msforeachtable'exec sp_spaceused

SELECT * FROM #结核病



选择

表名,

记录数,

铸造(LTrim(RTrim(替换(替换('kb ',')))为int) / 1024 MB预留空间,

铸造(LTrim(RTrim(替换(替换('kb ',')))为int) / 1024使用空间MB,

铸造(LTrim(RTrim(替换(替换('kb ',')))为int) / 1024 / 1024 GB的使用空间,

铸造(LTrim(RTrim(替换(替换('kb ',')))为int) / 1024使用空间MB指数,

铸造(LTrim(RTrim(替换(替换('kb ',')))为int) / 1024不使用空间MB

从#结核病

在铸造(LTrim(RTrim(替换(替换(空间,'kb ','))为int) / 1024 > 0

通过记录数倒序

通过使用空间MB desc

表#结核病

-由于连接未释放,查询是否过高导致CPU丢失

SELECT * FROM master.dbo.sysprocesses

那里的SPID > 50

和waittype = 0x0000

时间= 0

状态= 'sleeping

和last_batch < DateAdd(分钟,- 10,getdate())

和login_time < DateAdd(分钟,- 10,getdate())

-强制释放空连接

select'kill + RTrim(SPID)从master.dbo.sysprocesses

那里的SPID > 50

和waittype = 0x0000

时间= 0

状态= 'sleeping

和last_batch < DateAdd(分钟,- 60,getdate())

和login_time < DateAdd(分钟,- 60,getdate())

查看当前会话和占用最高CPU资源的执行语句(及时CPU)

选择SPID,CMD,CPU,physical_io,memusage,

(选择前1 {文字}::fn_get_sql(sql_handle))sql_text

从主CPU执行的顺序,降序,physical_io desc

查看缓存中可占用大内存查询(未在当前缓存中释放)的可重用查询的少数数量——全局

选择前100 usecounts,objtype,p.size_in_bytes,{ } { }的SQL文本。

从sys.dm_exec_cached_plans P外应用sys.dm_exec_sql_text(p.plan_handle)SQL

为了usecounts,p.size_in_bytes desc

选择前25 qt.text,qs.plan_generation_num,qs.execution_count,DBID,objectid

从sys.dm_exec_query_stats QS

交叉应用sys.dm_exec_sql_text(sql_handle)QT

在plan_generation_num > 1

为了qs.plan_generation_num

选择前50 qt.text作为sql_text,总和(QS。total_worker_time)作为total_cpu_time,

和(QS。execution_count)作为total_execution_count,

和(QS。total_worker_time) /总和(QS。execution_count)作为avg_cpu_time,

计数(*)为number_of_statements

从sys.dm_exec_query_stats QS

交叉应用sys.dm_exec_sql_text(QS。sql_handle)QT

集团通过qt.text

为了total_cpu_time降序统计总的CPU时间

通过avg_cpu_time倒序统计平均单查询的CPU时间

-计算运行状态中工作进程的个数

select count(*)为workers_waiting_for_cpu,s.scheduler_id

从sys.dm_os_workers O

内部联接sys.dm_os_schedulers S

在o.scheduler_address = s.scheduler_address

和s.scheduler_id<255

在o.state = 'runnable

集团通过s.scheduler_id

选择creation_time n'statement编译时间

last_execution_time n'last执行时间

total_physical_reads n'physics读取时间总数

total_logical_reads / execution_count n'per逻辑读取次数

total_logical_reads n'logic读取时间总数

total_logical_writes n'logic写时代的总数

execution_count n'execution时代

CPU的总时间ms'used total_worker_time / 1000 N

在total_elapsed_time / 1000 n'is MS总时间

(total_elapsed_time / / 1000 execution_count)n'average时间

子串(st.text,(QS。statement_start_offset / 2)+ 1,

((statement_end_offset案例

当数据长度(1 st.text)

其他qs.statement_end_offset结束

QS。statement_start_offset) / 2)+ 1)n'execution声明

从sys.dm_exec_query_stats QS

交叉应用sys.dm_exec_sql_text(QS。sql_handle)ST

在子(st.text,(QS。statement_start_offset / 2)+ 1,

(案例statement_end_offset

当数据长度(1 st.text)

其他qs.statement_end_offset结束

QS。statement_start_offset) / 2)+ 1)不喜欢%提取%

为了total_elapsed_time / execution_count desc
推荐文章1
广告