建索引的方法:ALTER INDEX?ALL ON DOA REORGANIZE
sp_who active? --看看哪个引起的阻塞,blk sp_lock? --看看锁住了那个资源id,objid,select object_name(objid) 得到 dbcc inputbuffer(@blk) -- 看看是那个语句
----------------------------------------------------------------------------
优化SQLServer的配置.sql
%% ******************************************************************************************************/ go
exe(小写c)?sp_configure?"awe?enabled","1"--内存可以支持64g exe(小写c) sp_configure?"lightweight pooling","0"--不使用nt纤程 exe(小写c) sp_configure?"priority boost","1"--增加sqlserver优先级 exe(小写c) sp_configure?"network packet size?(b)","8192"--增加sqlserver网络包的大小
reconfigure?with override
go
--优化数据库设置 declare?@currentdatabase?sysname select @currentdatabase?= db_name((select dbid from master.dbo.sysprocesses wherespid = @@spid)) exe(小写c) sp_dboption @currentdatabase,'select into/bulkcopy','true' --对大容量数据操作不记录日志 exe(小写c) sp_dboption @currentdatabase,'trunc. log on chkpt.','true' --自动截断日志 exe(小写c) sp_dboption @currentdatabase,'auto create?statistics','true'--自动创建统计 exe(小写c) sp_dboption @currentdatabase,'auto update?statistics','true'--自动更新统
?
查看SQL版本号:
看SP补丁打全了没。
?
1、收缩数据库( 日志文件) 2、重建索引 3、数据库硬盘所在区域? db服务器性价比比较好的方式是搭建raid5 追求性能的话是raid0? 使用perfmon观察disk queue,看是否一直高于1,如果长时间高于1说明磁盘性能有问题,意味着磁盘操作需要排队完成。考虑升级存储设备 加入“Page?Life?Expectancy”如果这个值始终小于300秒,意味着你需要更大的内存(在Sql Server: Buffer Manager里) 加入“Buffer Cache?hit ratio” 如果这个值小于90%,意味着你需要更大的内存.(在Sql Server: Buffer Manager里)
4、数据库锁检查 use?master? go? declare?@spid int,@bl int? DECLARE?s_cur CURSOR FOR? 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? OPEN s_cur? FETCH NEXT FROM s_cur INTO @spid,@bl? WHILE?@@FETCH_STATUS = 0? 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 )? FETCH NEXT FROM s_cur INTO @spid,@bl? end? CLOSE?s_cur? DEALLOCATE?s_cur
exe(小写c) sp_who2
5、看一下任务管理器,如果Sql Server 占有的内存即使在服务器最忙得时候都不超过2GB,而你有4GB内存,可以考虑在Windows boot.ini启动文件中加入 /3GB变量。这样SqlServer就可以使用3GB的内存,多1GB意味着更大的缓存,可以不用到Disk取频繁读取了 6、运行profiler,跟踪器 只选Stored procedure?和 T-Sql,在Filter(过滤) tab,选duration(时长)大于5000,这告诉跟踪器只捕捉运行时间超过5秒的程序。 你可以根据自己的情况调整这个变量。目的是找到制造麻烦的SQL. 7、运行sp_who2,看blk by 栏, 如果这栏不是空白,有一个数字, 这就是造成阻塞(blocking)的线程id. 然后运行DBCC Inputbuffer(线程id),你就可以看见这个线程在干什么。 8、确认你的客户端程序使用connection pooling,并在完成任务后关闭连接。Sqlserver默认255个连接,如果使用connection pooling,这个值应该足够应付大多数情况。 如果你确认255不够,可以使用sp_configure重设这个值 9、如果你不做日常维护,请立即开始。 经常用 DBCC indexDefrag. 每隔一段时间用DBCC DBREINDEX?重建 index. 你可以运行 DBCC Showcontig,然后看Scan Density ,如果主要的大表Scan Density < 40%,意味着你有严重的Fragmentation(碎片),该用DBCC REINDEX去整理了
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|