MOSS 2007 SharedServices数据库过大问题解决

 问题:

MOSS 2007, WSS_Content数据库800G, SharedServices数据库每月10G的速度增长,已经达到240G.

解决方法:

将查询网上的资料,发现是过期的进程记录导致的, 通过运行EXEC DeleteExpiredSessions即可删除, select查询了一下, 34万条记录, 用了4个小时; 使用EXEC 命令删除时, 通常1,2个小时后报错, 总提示

Msg 1204, Level 19, State 4, Procedure DeleteExpiredSessions, Line 7
The instance of the SQL Server Database Engine cannot obtain a LOCK resource at this time. Rerun your statement when there are fewer active users. Ask the database administrator to check the lock and memory configuration for this instance, or to check for long-running transactions.

查看了一下存储过程:

CREATE PROCEDURE dbo.DeleteExpiredSessions 

        AS 

            DECLARE @now datetime 

            SET @now = GETUTCDATE()    

            DELETE [SharedServices1_DB].dbo.ASPStateTempSessions 

            WHERE Expires < @now 

            RETURN 0

决定不使用Delete命令, 而使用TRUNCATE TABLE命令, 因为这个命令更快速, 两个命令的差别请见最后部分.

操作步骤:

1. 备份SharedService数据库;

2. 执行TRUNCATE TABLE ASPStateTempSessions, 用时1秒钟;

3. Shunk数据库

数据库由240G降到2G了.

 

 

在sql server数据库中快速删除记录,清空表

若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是,TRUNCATE TABLE 速度更快,并且使用更少的系统资源和事务日志资源。

与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:

·         所用的事务日志空间较少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。

·         使用的锁通常较少。

当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。

·         如无例外,在表中不会留有任何页。

执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义与其索引和其他关联对象一起保留在数据库中。

 参考文章

http://www.jj54.com/370139-ASPStateTempSessions-Table-In-The-SSP-Database-Is-Not-Cleaned-Up-Automatically/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值