MDF、LDF文件过大

USE [IVMS8100]
GO
/****** Object:  StoredProcedure [dbo].[ClearMemory]    Script Date: 04/13/2010 14:28:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/***start***/
----强制释放内存
CREATE PROCEDURE [dbo].[ClearMemory]
AS
BEGIN
--清除所有缓存
DBCC DROPCLEANBUFFERS  
--打开高级配置  
EXEC sp_configure 'show advanced options', 1
----设置最大内存值,清除现有缓存空间
EXEC sp_configure 'max server memory', 256
EXEC ('RECONFIGURE')
--设置等待时间
WAITFOR DELAY '00:00:01'
--重新设置最大内存值
EXEC  sp_configure 'max server memory', 4096
EXEC ('RECONFIGURE')
--关闭高级配置
EXEC sp_configure 'show advanced options',0
END
/***end***/
复制代码

 


 MDF、LDF文件过大导致访问慢的问题:

  还有一种情况是,虽然可以继续访问数据库,但是非常慢。查看MDF(Master Database File)和LDF(Log Database File)文件比较大。

  产生原因:

  1. 索引碎片过多;
  2. 频繁的DB操作,如果临时表和存储过程未及时清理;
  3. 异常状况下,占用的DB空间未释放。

  解决方案:

  1. 磁盘整理。或者升级系统,单磁盘转磁盘阵列;
  2. 分多个数据库;
  3. 重建DB,将其分为多个文件组,存放不同的表,并将文件组存放在不同的磁盘中;
  4. 重建DB索引;
  5. 收缩MDF、LDF。

其中,以上解决方案中最易实现、最容易的就是收缩MDF和LDF文件。

网上有很多图文并茂的操作方式,就不再赘述。有操守的程序员还是应该给出可执行的SQL代码来。

以下给出的例子适合在SQL Server 2008上运行。有很多SQL Server 2005和SQL Server 2000的例子现在已经没意义了!

以下代码数据库名称为“IVMS8100v3”,请审阅:

复制代码
--收缩MDF:
DBCC SHRINKFILE ('IVMS8100v3',1)

--收缩LDF:
USE [master]
GO
ALTER DATABASE IVMS8100v3 SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE IVMS8100v3 SET RECOVERY SIMPLE --简单模式
GO
USE IVMS8100v3
GO
DBCC SHRINKFILE (N'IVMS8100v3_log' , 11, TRUNCATEONLY)

GO

USE [master]
GO
ALTER DATABASE IVMS8100v3 SET RECOVERY FULL WITH NO_WAIT
GO
ALTER DATABASE IVMS8100v3 SET RECOVERY FULL --还原为完全模式
GO
复制代码

猜你喜欢

转载自baobaojinjin.iteye.com/blog/2233729