sqlserver常用 的统计命令
2016-06-25 20:32
549 查看
1、查看某个数据库的在线连接数
SELECT * FROM
[Master].[dbo].[SYSPROCESSES] WHERE [DBID]
IN
(
SELECT
[DBID]
FROM
[Master].[dbo].[SYSDATABASES]
WHERE
NAME='数据库名称'
)
2、列出前50条占用cpu较高的sql
SELECT TOP 50
total_worker_time/execution_count AS [Avg CPU Time],
(SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.dm_exec_sql_text(sql_handle)) AS query_text, *
FROM sys.dm_exec_query_stats
ORDER BY [Avg CPU Time] DESC
3、当前sql执行的进程
4、锁定的sql
select request_session_id spid,object_name(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='object'
--spid 锁表进程
--tableName 被锁表名
--解锁:
declare @spid int
Set @spid =57--锁表进程
declare @sql varchar(1000)
set @sql='kill'+cast(@spid as varchar)
exec(@sql)
5、等待执行的sql
SELECT
blocking_session_id '阻塞进程的ID',
wait_duration_ms '等待时间(毫秒)',
session_id '(会话ID)'FROM
sys.dm_os_waiting_tasks
6、查看锁信息进程
create table #t(req_spid int,obj_name sysname)
declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname
declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb
select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid
go
drop table #t
SELECT * FROM
[Master].[dbo].[SYSPROCESSES] WHERE [DBID]
IN
(
SELECT
[DBID]
FROM
[Master].[dbo].[SYSDATABASES]
WHERE
NAME='数据库名称'
)
2、列出前50条占用cpu较高的sql
SELECT TOP 50
total_worker_time/execution_count AS [Avg CPU Time],
(SELECT SUBSTRING(text,statement_start_offset/2,(CASE WHEN statement_end_offset = -1 then LEN(CONVERT(nvarchar(max), text)) * 2 ELSE statement_end_offset end -statement_start_offset)/2) FROM sys.dm_exec_sql_text(sql_handle)) AS query_text, *
FROM sys.dm_exec_query_stats
ORDER BY [Avg CPU Time] DESC
3、当前sql执行的进程
SELECT spid, blocked, DB_NAME(sp.dbid) AS DBName, program_name, waitresource, lastwaittype, sp.loginame, sp.hostname, a.[Text] AS [TextData], SUBSTRING(A.text, sp.stmt_start / 2, (CASE WHEN sp.stmt_end = -1 THEN DATALENGTH(A.text) ELSE sp.stmt_end END - sp.stmt_start) / 2) AS [current_cmd] FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A WHERE spid > 50 ORDER BY blocked DESC, DB_NAME(sp.dbid) ASC, a.[text];
4、锁定的sql
select request_session_id spid,object_name(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='object'
--spid 锁表进程
--tableName 被锁表名
--解锁:
declare @spid int
Set @spid =57--锁表进程
declare @sql varchar(1000)
set @sql='kill'+cast(@spid as varchar)
exec(@sql)
5、等待执行的sql
SELECT
blocking_session_id '阻塞进程的ID',
wait_duration_ms '等待时间(毫秒)',
session_id '(会话ID)'FROM
sys.dm_os_waiting_tasks
6、查看锁信息进程
create table #t(req_spid int,obj_name sysname)
declare @s nvarchar(4000)
,@rid int,@dbname sysname,@id int,@objname sysname
declare tb cursor for
select distinct req_spid,dbname=db_name(rsc_dbid),rsc_objid
from master..syslockinfo where rsc_type in(4,5)
open tb
fetch next from tb into @rid,@dbname,@id
while @@fetch_status=0
begin
set @s='select @objname=name from ['+@dbname+']..sysobjects where id=@id'
exec sp_executesql @s,N'@objname sysname out,@id int',@objname out,@id
insert into #t values(@rid,@objname)
fetch next from tb into @rid,@dbname,@id
end
close tb
deallocate tb
select 进程id=a.req_spid
,数据库=db_name(rsc_dbid)
,类型=case rsc_type when 1 then 'NULL 资源(未使用)'
when 2 then '数据库'
when 3 then '文件'
when 4 then '索引'
when 5 then '表'
when 6 then '页'
when 7 then '键'
when 8 then '扩展盘区'
when 9 then 'RID(行 ID)'
when 10 then '应用程序'
end
,对象id=rsc_objid
,对象名=b.obj_name
,rsc_indid
from master..syslockinfo a left join #t b on a.req_spid=b.req_spid
go
drop table #t
相关文章推荐
- 在 CentOS7 上安装 MongoDB
- Mysql备份和恢复
- Mac xampp 安装redis + PHPredis
- Oracle查询昨天的记录
- 系统视图
- Mysql事务&字符集
- Oracle 获取当前日期及日期格式
- Java实现Mybatis将数据批量插入到Oracle数据库
- 使用mysql的Concat链接数据
- 数据库审计-hexorbase
- mysql重复插入insert时更新ON DUPLICATE KEY UPDATE
- 使用redis设计幂等接口
- MySql 修改字段名称和数据类型
- 数据库三大范式,我的理解
- Mongoose轻松搞定MongoDB,不要回调!
- Mongoose轻松搞定MongoDB,不要回调!
- MySQL5.7安装与配置(YUM)
- PL/SQL详细介绍,设置oracle相关
- 数据库连接池性能比对
- 数据库概述(一)