MSSQL定时自动整理碎片(mssql定时碎片整理)
自动整理碎片的实现
本文主要讨论如何在MS SQL数据库中定时自动整理碎片。
在计算机磁盘及其它存储媒体存在很多文件,每次删除或者修改的文件,都会使磁盘碎片增多,产生极大的磁盘频繁,往往是计算机或者数据库运行性能下滑的元凶。需要定期整理碎片来提高数据库或者计算机性能。
MS SQL在2000版本以后,提供了整理磁盘碎片的功能。要实现自动整理,可以考虑创建一个存储过程或者存储过程来实现,使用SQL-Server Agent来定期调用存储过程。
以“数据库名字”为例,实现定时自动整理碎片代码如下:
— 创建一个存储过程来定期的自动整理磁盘碎片
–IF OBJECT_ID (‘dbo.usp_CleanFragments’,’P’ ) IS NOT NULL
–DROP PROCEDURE dbo.usp_CleanFragments
CREATE PROCEDURE dbo.usp_CleanFragments
AS
BEGIN
DECLARE @cmd VARCHAR(100)
SET @cmd = ‘ALTER DATABASE [数据库名字] REORGANIZE’
EXEC (@cmd)
END
— 使用SQL Server Agent来定期调用储存过程
EXECUTE msdb.dbo.sp_add_job @job_name = N’数据库碎片清理’, @enabled = 1
EXECUTE msdb.dbo.sp_add_jobstep @job_name = N’数据库碎片清理’, @step_name = N’数据库碎片清理’,
@subsystem = N’TSQL’, @command = N’exec dbo.usp_CleanFragments’,
@retry_attempts = 15, @retry_interval = 3;
EXEC msdb.dbo.sp_add_jobschedule @job_name = N’数据库碎片清理’, @name = N’每月清理一次’,
@freq_type = 4, @freq_interval = 1, @freq_subday_type = 4,
@freq_subday_interval = 25, @freq_relative_interval = 0,
@freq_recurrence_factor = 1, @active_start_date = 20190404,
@active_end_date = 99991231, @active_start_time = 0, @active_end_time = 235959;
如上代码所示,我们首先创建一个存储过程,来完成每次整理碎片的过程,然后使用SQL-Server Agent去定期调用这个存储过程,实现自动整理碎片。
总而言之,MS SQL提供了自动整理碎片的功能,可以通过创建存储过程及通过SQL-Server Agent创建定期任务的方式来实现。这样可以大大减少管理人员的精力消耗,提高工作效率,维护数据库性能。