SQL Server 数据库巡检脚本

标签: sql server 数据库 | 发表时间:2013-03-25 23:10 | 作者:maco_wang
出处:http://blog.csdn.net
--1.查看数据库版本信息
select @@version
--2.查看所有数据库名称及大小
select sp_helpdb
--3.查看数据库所在机器的操作系统参数
exec master..xp_msver
--4.查看数据库启动的参数
exec sp_configure
--5.查看数据库启动时间
select convert(varchar(30),login_time,120)
from master..sysprocesses where spid=1
--6.查看数据库服务器名
select 'Server Name:'+ltrim(@@servername)
--7.查看数据库实例名
select 'Instance:'+ltrim(@@servicename) 
--8.数据库的磁盘空间呢使用信息
exec sp_spaceused
--9.日志文件大小及使用情况
dbcc sqlperf(logspace)
--10.表的磁盘空间使用信息
exec sp_spaceused 'tablename'
--11.获取磁盘读写情况
select 
@@total_read [读取磁盘次数],
@@total_write [写入磁盘次数],
@@total_errors [磁盘写入错误数],
getdate() [当前时间]
--12.获取I/O工作情况
select @@io_busy,
@@timeticks [每个时钟周期对应的微秒数],
@@io_busy*@@timeticks [I/O操作毫秒数],
getdate() [当前时间]
--13.查看CPU活动及工作情况
select
@@cpu_busy,
@@timeticks [每个时钟周期对应的微秒数],
@@cpu_busy*cast(@@timeticks as float)/1000 [CPU工作时间(秒)],
@@idle*cast(@@timeticks as float)/1000 [CPU空闲时间(秒)],
getdate() [当前时间]
--14.检查锁与等待
exec sp_lock
--15.检查死锁
exec sp_who_lock --自己写个存储过程即可
/*
create procedure sp_who_lock
as
begin
	declare @spid int,@bl int,
	@intTransactionCountOnEntry int,
	@intRowcount int,
	@intCountProperties int,
	@intCounter int
	create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint)
	IF @@ERROR<>0 RETURN @@ERROR
	insert into #tmp_lock_who(spid,bl) select 0 ,blocked
	from (select * from sysprocesses where blocked>0 ) a 
	where not exists(select * from (select * from sysprocesses where blocked>0 ) b 
	where a.blocked=spid)
	union select spid,blocked from sysprocesses where blocked>0
	IF @@ERROR<>0 RETURN @@ERROR
		-- 找到临时表的记录数
		select @intCountProperties = Count(*),@intCounter = 1
		from #tmp_lock_who
	IF @@ERROR<>0 RETURN @@ERROR
	if @intCountProperties=0
	select '现在没有阻塞和死锁信息' as message
	-- 循环开始
	while @intCounter <= @intCountProperties
	begin
	-- 取第一条记录
	select @spid = spid,@bl = bl
	from #tmp_lock_who where id = @intCounter 
	begin
	if @spid =0 
		select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
	else
		select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
	DBCC INPUTBUFFER (@bl )
	end
	-- 循环指针下移
	set @intCounter = @intCounter + 1
	end
	drop table #tmp_lock_who
	return 0
end
*/

--16.用户和进程信息
exec sp_who
exec sp_who2

--17.活动用户和进程的信息
exec sp_who 'active'

--18.查看进程中正在执行的SQL
dbcc inputbuffer(进程号)
exec sp_who3

--19.查看所有数据库用户登录信息
exec sp_helplogins 

--20.查看所有数据库用户所属的角色信息
exec sp_helpsrvrolemember

--21.查看链接服务器
exec sp_helplinkedsrvlogin

--22.查看远端数据库用户登录信息
exec sp_helpremotelogin
 
--23.获取网络数据包统计信息
select 
@@pack_received [输入数据包数量],
@@pack_sent [输出数据包数量],
@@packet_errors [错误包数量],
getdate() [当前时间]

--24.检查数据库中的所有对象的分配和机构完整性是否存在错误
dbcc checkdb

--25.查询文件组和文件
select 
	df.[name],df.physical_name,df.[size],df.growth, 
	f.[name][filegroup],f.is_default 
from sys.database_files df join sys.filegroups f 
on df.data_space_id = f.data_space_id 

--26.查看数据库中所有表的条数
select  b.name as tablename ,  
        a.rowcnt as datacount  
from    sysindexes a ,  
        sysobjects b  
where   a.id = b.id  
        and a.indid < 2  
        and objectproperty(b.id, 'IsMSShipped') = 0 

--27.得到最耗时的前10条T-SQL语句
;with maco as   
(     
    select top 10  
        plan_handle,  
        sum(total_worker_time) as total_worker_time ,  
        sum(execution_count) as execution_count ,  
        count(1) as sql_count  
    from sys.dm_exec_query_stats group by plan_handle  
    order by sum(total_worker_time) desc  
)  
select  t.text ,  
        a.total_worker_time ,  
        a.execution_count ,  
        a.sql_count  
from    maco a  
        cross apply sys.dm_exec_sql_text(plan_handle) t 

--28. 查看SQL Server的实际内存占用
select * from sysperfinfo where counter_name like '%Memory%'


--29.显示所有数据库的日志空间信息
dbcc sqlperf(logspace)

--30.收缩数据库
dbcc shrinkdatabase(databaseName)

作者:maco_wang 发表于2013-3-25 23:10:06 原文链接
阅读:136 评论:0 查看评论

相关 [sql server 数据库] 推荐:

SQL Server 数据库巡检脚本

- - CSDN博客数据库推荐文章
select '现在没有阻塞和死锁信息' as message. select '引起数据库死锁的是: '+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'. select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'.

大数据量下的SQL Server数据库自身优化

- - Oracle - 数据库 - ITeye博客
  1.1:增加次数据文件.   从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情况下有一个主数据文件(MDF)就够了,但是有些大型的数据库,由于信息很多,而且查询频繁,所以为了提高查询速度,可以把一些表或者一些表中的部分记录分开存储在不同的数据文件里.   由于CPU和内存的速度远大于硬盘的读写速度,所以可以把不同的数据文件放在不同的物理硬盘里,这样执行查询的时候,就可以让多个硬盘同时进行查询,以充分利用CPU和内存的性能,提高查询速度.

SQL Server数据库监控 - 如何告警

- - BlogJava-qileilove
 常用的告警方式大致有:短信、邮件、应用程序 (beep提示,图标提示,升窗提示等),可是不能一直坐在电脑前看着应用程序,或者用脚本部署监控,根本没有程序界面,所以通常用短信、邮件两种方式告警.   用程序发短信的方式一般有这两种:.   需要1张SIM卡,1个SIM卡读卡设备 (比如:短信猫),然后把设备连接到电脑,应用程序根据设备的软件接口,传参并发送短信.

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

SQL Server 面试

- - SQL - 编程语言 - ITeye博客
在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.

SQL Server 得到数据库中所有表的名称及数据条数

- - CSDN博客推荐文章
提到单个表的数据条数,大家都会想到 select count(*) from tablename. 如果是要得到数据库中所有表的条数呢. --方法一 if exists ( select *. end close mCursor deallocate mCursor go --显示结果 select TableName,RowsCount from TableSpace --方法二 select b.name as tablename ,.

向Sql Server数据库中导入固定格式的txt文本数据

- - CSDN博客推荐文章
文本数据量比较大的时候,一条条的输入基本不可能,写个程序来中转一下也是很麻烦,幸运的是sql server提供了比较简洁的方法. 轻松搞定固定格式文本数据导入,比mysql的sql代码还要简洁. 作者:wj512416359 发表于2014-12-26 16:21:18 原文链接. 阅读:0 评论:0 查看评论.

SQL Server优化50法

- - CSDN博客推荐文章
虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决.   查询速度慢的原因很多,常见如下几种:没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷).   I/O吞吐量小,形成了瓶颈效应.   没有创建计算列导致查询不优化.   内存不足网络速度慢查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).

SQL Server 中的事务

- - CSDN博客推荐文章
       事务要有非常明确的开始和结束点,SQL Server 中的每一条数据操作语句,例如SELECT、INSERT、UPDATE和DELETE都是隐式事务的一部分. 即使只有一条语句,系统也会把这条语句当做一个事务,要么执行所有的语句,要么什么都不执行.         事务开始之后,事务所有的操作都会写到事务日志中,写到日志中的事务,一般有两种:一是针对数据的操作,例如插入、修改和删除,这些操作的对象是大量的数据;另一种是针对任务的操作,例如创建索引.

SQL Server优化50法

- - CSDN博客数据库推荐文章
  虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决.   查询速度慢的原因很多,常见如下几种:. 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小,形成了瓶颈效应. 查询出的数据量过大(可以采用多次查询,其他的方法降低数据量).