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创建定期任务的方式来实现。这样可以大大减少管理人员的精力消耗,提高工作效率,维护数据库性能。


数据运维技术 » MSSQL定时自动整理碎片(mssql定时碎片整理)