SQL Server 数据库资源占用分析

摘要:
1.1查看数据库当前用户连接数和最耗时的查询USEmasterGO--看一下当前的数据库用户连接有多少--如果要指定数据库就把注释去掉SELECT*FROMsys.[sysprocesses]WHERE[spid]˃50--ANDDB_NAME([dbid])='gposdb'SELECT*FROM[sys].[dm_exec_sessions]WHERE[session_id]˃50--使用下面

1.1查看数据库当前用户连接数和最耗时的查询

SQL Server 数据库资源占用分析第1张SQL Server 数据库资源占用分析第2张
USEmaster
GO
--看一下当前的数据库用户连接有多少--如果要指定数据库就把注释去掉
SELECT * FROM sys.[sysprocesses] WHERE [spid]>50 --AND DB_NAME([dbid])='gposdb'
SELECT * FROM [sys].[dm_exec_sessions] WHERE [session_id]>50


--使用下面语句看一下各项指标是否正常,是否有阻塞,这个语句选取了前10个最耗CPU时间的会话--可以指定具体分析的数据库
SELECT TOP 10
  [session_id],
  [request_id],
  [start_time] AS '开始时间',
  [status] AS '状态',
  [command] AS '命令',
  dest.[text] AS 'sql语句', 
  DB_NAME([database_id]) AS '数据库名',
 [blocking_session_id] AS '正在阻塞其他会话的会话ID',
 [wait_type] AS '等待资源类型',
 [wait_time] AS '等待时间',
 [wait_resource] AS '等待的资源',
 [reads] AS '物理读次数',
 [writes] AS '写次数',
 [logical_reads] AS '逻辑读次数',
 [row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] ASder 
 CROSSAPPLY 
 sys.[dm_exec_sql_text](der.[sql_handle]) ASdest 
WHERE [session_id]>50 --AND DB_NAME(der.[database_id])='QQXYSocialBusinessDB'  
ORDER BY [cpu_time] DESC



--在SSMS里选择以文本格式显示结果
 SELECT TOP 10 dest.[text] AS 'sql语句'
 FROM sys.[dm_exec_requests] ASder 
 CROSSAPPLY 
 sys.[dm_exec_sql_text](der.[sql_handle]) ASdest 
 WHERE [session_id]>50  
 ORDER BY [cpu_time] DESC
View Code

1.2 检查是否有sql语句等待资源

SQL Server 数据库资源占用分析第3张SQL Server 数据库资源占用分析第4张
/*如果SQLSERVER存在要等待的资源,那么执行下面语句就会显示出会话中有多少个worker在等待;
如果当前SQLSERVER里面没有任何等待资源,那么下面的SQL语句不会显示任何结果;
*/

SELECT TOP 10
   [session_id],
   [request_id],
   [start_time] AS '开始时间',
   [status] AS '状态',
   [command] AS '命令',
   dest.[text] AS 'sql语句', 
   DB_NAME([database_id]) AS '数据库名',
   [blocking_session_id] AS '正在阻塞其他会话的会话ID',
  der.[wait_type] AS '等待资源类型',
  [wait_time] AS '等待时间',
  [wait_resource] AS '等待的资源',
  [dows].[waiting_tasks_count] AS '当前正在进行等待的任务数',
  [reads] AS '物理读次数',
  [writes] AS '写次数',
  [logical_reads] AS '逻辑读次数',
  [row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] ASder 
INNER JOIN [sys].[dm_os_wait_stats] ASdows 
  ON der.[wait_type]=[dows].[wait_type]
CROSSAPPLY 
sys.[dm_exec_sql_text](der.[sql_handle]) ASdest 
WHERE [session_id]>50  
ORDER BY [cpu_time] DESC
View Code

1.3 查数据库服务器资源总数和已使用数

SQL Server 数据库资源占用分析第5张SQL Server 数据库资源占用分析第6张
--查看CPU数和user scheduler数和最大工作线程数,检查worker是否用完也可以排查CPU占用情况

--查看最大工作线程数
SELECT cpu_count AS CPU数,scheduler_count ASuser_scheduler数目
    ,max_workers_count AS最大工作线程数
    ,(SELECT COUNT(0) FROM sys.dm_os_schedulers) AS 当前线程数 FROMsys.dm_os_sys_info

--查看机器上的所有schedulers包括user 和system--通过下面语句可以看到worker是否用完,当达到最大线程数的时候就要检查blocking(阻塞)了

--SELECT--scheduler_address,--scheduler_id,--cpu_id,--status,--current_tasks_count,--current_workers_count,active_workers_count--FROM sys.dm_os_schedulers



--查询CPU占用高的语句

SELECT TOP 10 total_worker_time/execution_count ASavg_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
           ELSEstatement_end_offset
        END - statement_start_offset)/2)
     FROMsys.dm_exec_sql_text(sql_handle)
     ) ASquery_text
FROMsys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC
View Code

1.4 查询缺失的索引

SQL Server 数据库资源占用分析第7张SQL Server 数据库资源占用分析第8张
USEmaster
GO


--查询缺失索引

SELECT DatabaseName = DB_NAME(database_id)
     ,[Number Indexes Missing] = count(*) 
FROMsys.dm_db_missing_index_details
GROUP BY DB_NAME(database_id)
ORDER BY 2 DESC;


SELECT  TOP 10 
  [Total Cost]  = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0) 
  , avg_user_impact
  , TableName =statement
  , [EqualityUsage] =equality_columns 
  , [InequalityUsage] =inequality_columns
  , [Include Cloumns] =included_columns
FROMsys.dm_db_missing_index_groups g 
INNER JOINsys.dm_db_missing_index_group_stats s 
    ON s.group_handle =g.index_group_handle 
INNER JOINsys.dm_db_missing_index_details d 
    ON d.index_handle =g.index_handle
ORDER BY [Total Cost] DESC;
View Code

1.5 查询表的字段及长度

SQL Server 数据库资源占用分析第9张SQL Server 数据库资源占用分析第10张
declare @temp_tabels table(serial int,name NVARCHAR(500),xtype nvarchar(20))

insert @temp_tabels
select ROW_NUMBER() over(order by name) as serial,name,xtype=case when xtype='v' then 'view' when xtype='u' then 'table' end
from dbo.sysobjects where xtype in ('v','u')

--select * from @temp_tabels

declare @index int
declare @tablename nvarchar(50)
declare @tabletype nvarchar(10)
declare @temp_sql nvarchar(max)
declare @tablecount int
select @tablecount=count(serial) from @temp_tabels

set @index=1
set @temp_sql=''

while exists(select serial from @temp_tabels where serial=@index)
begin
    select @tablename=name,@tabletype=xtype from @temp_tabels where serial=@index
    --insert @temp_tablematedata 
    if(@index=@tablecount)    
        set @temp_sql=@temp_sql + 'select ''' + @tablename + '''as tablename,''' + @tabletype + '''as tabletype,a.name as fieldname, P.Value as fieldDesc,b.name as fieldtype,fieldlength= case when b.name=''nvarchar''then a.length/2 else a.length end from syscolumns  as a left join systypes as b on a.xtype=b.xusertype left join sys.extended_properties P on a.ID=P.major_id and a.colid=P.minor_id where id=OBJECT_ID(''' + @tablename + ''') '
    else
        set @temp_sql=@temp_sql + 'select ''' + @tablename + '''as tablename,''' + @tabletype + '''as tabletype,a.name as fieldname, P.Value as fieldDesc,b.name as fieldtype,fieldlength= case when b.name=''nvarchar''then a.length/2 else a.length end from syscolumns  as a left join systypes as b on a.xtype=b.xusertype left join sys.extended_properties P on a.ID=P.major_id and a.colid=P.minor_id where id=OBJECT_ID(''' + @tablename + ''') union all '
    set @index=@index+1

    print @temp_sql
end

SET @temp_sql = 'select tablename,tabletype,fieldname,fielddesc
    , (case when fieldtype in(''varchar'',''nvarchar'') then fieldtype+''(''+convert(varchar(50),fieldlength)+'')''else fieldtype end) as fieldtype 
    from ('+ @temp_sql +') AllTableInfo '


exec(@temp_sql)
View Code

免责声明:文章转载自《SQL Server 数据库资源占用分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ChromeMac系统U盘安装提示 这个安装macOS Mojave 应用程序副本已损坏,不能用来安装下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

sql语句创建文件夹、判断文件夹、创建数据库、表、

代码 USEmaster;GOifexists(select*fromsys.databaseswherename='TestDB')dropdatabaseTestDB--创建文件夹EXECsp_configure'showadvancedoptions',1GORECONFIGUREGOEXECsp_configure'xp_cmdshell',1R...

oracle 存储过程的基本语法 及注意事项

oracle 存储过程的基本语法 1.基本结构CREATE OR REPLACE PROCEDURE 存储过程名字(    参数1 IN NUMBER,    参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGIN END 存储过程名字2.SELECT INTO STATEMENT  将select查询的结果存入到变...

SQl Server Tsql基本编程 ,循环语句 ,存储过程

一些比较重要但是不一定经常用的 句子 Tsql定义变量 declare @a int ; 定义的变量前面必须用@,数据类型是SQL里的数据类型,执行的时候要把需要的有关联的代码一起执行,单独执行一条没有用。 赋值 set @a=‘aaa’; select @a=‘aaa’; 这两种都可以进行赋值, select @a 可以直接打印出a的值。 print@a...

数据库基本概念及简单的单表操作

一:MySQL的基本介绍:MySQL是一种关系型数据库mysql是属于Oracle旗下的一款数据库产品。分为商业版和社区版 技术角度分析:MySQL数据库是一种C/S(客户端/服务器)模型的服务     B/S(浏览器/服务器)MySQL的网络通信模型为:NIO+连接池来实现,支持高并发的应用场景   SQL: Structred Query Langu...

SQL数据库面试题

Database工程师面试 问题描述:为管理岗位业务培训信息,建立3个表:S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄C (C#,CN ) C#,CN 分别代表课程编号、课程名称SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩要求实现如下5个处理:1. 使用标准SQ...

Java下拼接执行动态SQL语句(转)

     在实际业务中经常需要拼接动态SQL来完成复杂数据计算,网上各类技术论坛都有讨论,比如下面这些问题:         http://bbs.csdn.net/topics/390876591         http://bbs.csdn.net/topics/390981627         https://www.linkedin.com/g...