草上飞

搜索引擎优化、网站技术、服务器安全、站长工具等相关交流

« 秀胸门-猫扑秀胸大赛将引发一个新的门

定时清除Sql server日志的必要性

前几日有站长反应,论坛http://bbs.linkhelper.cn老是突然打不开,一直在加载状态。telnet 80端口畅通,证明IIS没有问题。
登陆到服务器上,也不能正常打开论坛。
重启IIS后,能短暂恢复正常,然后又马上不正常了。
根据以往经验分析,估计是因为数据库有死锁造成。运行p_lockinfo存储过程,发现果真有死锁。
发现dnt_stats表有死锁情况。开始以为是论坛的统计程序出现问题,网上搜索DZ 死锁,没找到解决办法。
后来想,会不会是因为数据库空间不足?打开数据库存储目录一看,竟然发现数据库日志达到50G了,很长时间没有清理过数据库日志了。
赶紧运行了数据库日志收缩代码,网站恢复正常。
数据库日志收缩代码如下:
use bbs
go
dump transaction bbs with no_log --截断已提交的事务日志

dbcc shrinkfile (2,0) --收缩日志空间
go
建议:建立Sql server的工作计划,每天定时执行。
附Sql server死锁进程查看与结束的存储过程。

/*--处理死锁

查看当前进程,或死锁进程,并能自动杀掉死进程

因为是针对死的,所以如果有死锁进程,只能查看死锁进程
当然,你可以通过参数控制,不管有没有死锁,都只查看死锁进程

--邹建 2004.4--*/

/*--调用示例

exec p_lockinfo
--*/
CREATE   proc p_lockinfo
@kill_lock_spid bit=1, --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
declare @count int,@s nvarchar(4000),@i int
select id=identity(int,1,1),标志,
进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
域名=nt_domain,网卡地址=net_address
into #t from(
select 标志='死锁的进程',
spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=a.spid,s2=0
from master..sysprocesses a join (
select blocked from master..sysprocesses group by blocked
)b on a.spid=b.blocked where a.blocked=0
union all
select '|_牺牲品_>',
spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
status,hostname,program_name,hostprocess,nt_domain,net_address,
s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @count=@@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 标志='正常的进程',
spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
declare @spid varchar(10),@标志 varchar(10)
while @i<=@count
begin
select @spid=进程ID,@标志=标志 from #t where id=@i
insert #t1 exec('dbcc inputbuffer('+@spid+')')
if @标志='死锁的进程' exec('kill '+@spid)
set @i=@i+1
end
end
else
while @i<=@count
begin
select @s='dbcc inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i
insert #t1 exec(@s)
set @i=@i+1
end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
end

 


GO
 

  • 相关文章:
  • quote 3.天津卷帘门
  • http://www.tieyijuanlianmen.com
  • 天津舒心门/天津卷帘门/天津防火门/天津水晶门/天津车库门/天津玻璃门

    天津市津达门业有限公司是一家专业的门类加工制造企业,拥有一批多年从事工业门设计、制造的生产技术人员,充分吸收了拥有先进门类制作技术的德国、法国等国家的先进经验,经融合、创新,使一些新型材料得以在新技术灵活应用,形成了独有的门类制作及安装工艺。

    经过多年努力,公司现已拥有卷帘门,车库门,水晶卷帘门,电动卷帘门,玻璃门,防火门等。公司还推出了维修、保养、卷门帘加工等服务,为客户提供更加廉价便捷的服务。

    公司在2004—2007年间,连续4年成为大连舒心门业有限公司天津地区独家总代理,经销舒心复合卷帘门窗系列。

    公司与客户真诚合作,本着求质、求量、求认真、求新、求变、求发展的经营理念,为客户提供成熟的产品
  • 2010-6-29 17:24:11 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Arwen Build 90619

© 2008 Designed By 草上飞 QQ:1469886   沪ICP备08014007号   Powered By Z-Blog