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)文件比较大。
产生原因:
- 索引碎片过多;
- 频繁的DB操作,如果临时表和存储过程未及时清理;
- 异常状况下,占用的DB空间未释放。
解决方案:
- 磁盘整理。或者升级系统,单磁盘转磁盘阵列;
- 分多个数据库;
- 重建DB,将其分为多个文件组,存放不同的表,并将文件组存放在不同的磁盘中;
- 重建DB索引;
- 收缩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