SQL Server内存不足解决,以及MDF、LDF文件过大导致访问慢的问题

  首选,感谢博主shield-hand的一篇文章(ms sql server缓存清除与内存释放)。写的非常细致、简洁。我这里并不是自己写博客,而是用自己的思维将众多博文或官网资料做一次整合。

    在讲解问题发生原因之前,我先贴出来解决方案。之后再详细剖析其深层次的原因。

 

  ms sql server缓存清除与内存释放这篇文章已经给出了非常完美的方案,我就不再赘述了。有一个问题需要注意下,就是脚本操作中最好修个成以下形式:

  

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

 

 


 

参考文献:

ms sql server缓存清除与内存释放
如何释放sql server 2005占用的内存?
windows 2003 server性能监视器(转)
SQL Server 存储过程
存储过程编写经验和优化措施
SQL SERVER读书笔记:内存
 
 
Log文件压缩
SQL Server 2008 清空删除日志文件
SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M .
SQLServer2005删除log文件和清空日志的方案(该方案为视图操作,新手可参考。)
 

 

 

 

 

你可能感兴趣的:(SQL Server)