《转》SQL Server 2008 数据维护实务

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介:

SQL Server 2008 数据维护实务

http://blog.csdn.net/os005/article/details/7739553

http://www.cnblogs.com/xunziji/archive/2011/04/01/2002396.html

 

感觉蛮有用的,以前不清楚的地方,

都可以串起来了,

特别是重建索引和重新组织索引的区别。

还有邮件通知操作员的配置,正在学习。

~~~~~~~~~~~~~~~~~~~~~~~~~~

 

最近试用了下 Sql Server 2008 的    Maintenance Plans( 维护计划 ),感觉很不错很不错。一贯的延续了微软的风格,图形化界面操作,保准你掌握了这个,就能成为半个DBA了,哈哈,吹牛了,就是想说这个蛮不错的,特别是比这 Sql Server 2000 和 Sql Server 2005 来说,用户体验又好了一些。

 

废话不多说了,下面就开始详细介绍 Maintenance Plans( 维护计划 

 

官方对维护计划,即  Maintenance Plans 的解释:维护计划向导可以用于帮助您设置核心维护任务,从而确保数据库执行良好,做到定期备份数据库以防系统出现故障,对数据库实施不一致性检查。维护计划向导可创建一个或多个 SQL Server 代理作业,代理作业将按照计划的间隔自动执行这些维护任务。它使您可以执行各种数据库管理任务,包括备份、运行数据库完整性检查、或以指定的间隔更新数据库统计信息。创建数据库维护计划可以让SQL Server有效地自动维护数据库,保持数据库运行在最佳状态,并为管理员节省了宝贵的时间。

 

其实用一句话来说,Maintenance Plans( 维护计划 就是来帮你方便的管理和优化数据库。

 

其内部,仍然是封装了部分 T-Sql 语句和 job

 

Maintenance Plans( 维护计划 )主要能做的工作为:

 

1. 备份数据库(Back Up Database)

2. 更新统计信息(Update Statistics)

3. 检查数据库完整性(Check Database Integrity)

4. 清除历史记录(History Cleanup)

5. 清除维护(Maintenance Cleanup)

6. 收缩数据库(Shrink Database)

7. 通知操作员(Notify Operator)

8. 执行 Sql Server 代理作业(Execute SQL Server Agent Job)

9. 执行 T-SQL 语句(Execute T-SQL Statement)

10. 重新生成索引(Rebuild Index Task)

11. 重新组织索引(Reorganize Index)

 

 

1. 备份数据库(Back Up Database)

最常用,也是最重要的功能了,是用起来也很见很简单,直接从左边拖拽过来

之后,在“备份数据库任务” 上右键编辑或者直接双击红色的图标,进行详细配置,详细配置信息如下图所示:

大致一看,就能明白大多配置的意思。其中有几个还是需要特殊说明一下的。

数据库:该选项选择备份Sql Server 实例中的那几个库,可以多选

备份集过期时间:是备份的失效时间,数值在 0 -99999之间,代表永不过气,此选项也是比较有用的,如果磁盘空间不足,新的备份文件就会覆盖掉过期的备份文件

跨一个或多个文件备份数据库:适合多文件组的数据库

 

 

2. 更新统计信息

更新 MicrosoftSQL Server 中对 表和索引的统计信息,此任务使用 UPDATE STATISTICS 语句。这个还是蛮有用的,主要影响 Sql Server 创建更好的查询计划。

上图标红的按钮,可以查看该任务封装的SQL语句

 

 

3. 检查数据库完整性(Check Database Integrity)

 

其实就是 DBCC CHECKDB 的 T-Sql  的封装,没什么好说的。主要用来检查数据库的完整性,DBCC CHECKDB 及相关语句通常必须从磁盘将每个已分配的页读取到内存中,才能对其进行检查,所以极消耗性能,不建议在高峰期使用。

另外,鄙人一直找不到用 DBCC CHECKDB 这个语句的地方,可能还没有碰到相应的问题把,或者由于鄙人才疏学浅啦 

 

 

4. 清除历史记录(History Cleanup)

 

使用“‘清除历史记录任务对话框,可以丢弃 msdb 数据库表中旧的历史信息。 此任务支持删除备份和还原历史记录、SQL Server 代理作业历史记录和维护计划历史记录。  

其实个人观察,清除的应该是 日志里面的内容

 

 

5. 清除维护(Maintenance Cleanup)

这个功能很实用,绝对的实用,并且很简单,主要用来删除备份文件或其他文件,并且图形化界面,功能也很全面,有了这个功能,绝对不会再怕备份文件把磁盘占满了。

想当初,还写的是清除文件的bat,然后放到任务计划里面,现在想起来,那种操作真不犀利了,Sql Server 已经为我们考虑好了

 

详细配置看下图(主要包括:删除以下类型的文件、文件位置、文件保留时间)

 

 

6. 收缩数据库(Shrink Database)

这个功能鄙人不太常用,主要是用来减小数据库所占用的磁盘空间大小,下面就引用一段MSDN 的解释把:

使用“‘收缩数据库任务对话框可以创建一个任务,尝试减小所选数据库 的大小。使用下面的选项可以确定数据库收缩后在数据库中保留的未使用空间量(该百分比越大,数据库可收缩的量越小)。该数值取决于数据库中实际数据的百分 比。例如,某个 100 MB 数据库包含 60 MB 的数据和 40 MB 的可用空间,当可用空间百分比为 50% 时,则将保留 60 MB 的数据和 30 MB 的可用空间(因为 60 MB 的 50% 是 30 MB)。只会去除数据库中的多余空间。有效值为 到 100

此任务执行 DBCC SHRINKDATABASE 语句。

 

 

7. 通知操作员(Notify Operator)

 

使用的也是比较少,不过随着数据库重要性的上升,这个任务的重要程度也会提升的

摘自MSDN使用“‘通知操作员任务对话框可以向此维护计划中添加自动通知。若要使用此任务,必须启用数据库邮件并将 MSDB 正确配置为邮件主机数据库,而且还要具有一个带有有效电子邮件地址的 MicrosoftSQL Server 代理操作员。

此任务使用 sp_notify_operator 存储过程。

 

 

8. 执行 Sql Server 代理作业(Execute SQL Server Agent Job)

感觉比较鸡肋的功能,主要用来执行 job ,不知道怎么用,还不如在 SQL Server Agent 里面设置 Job

 

 

9. 执行 T-SQL 语句(Execute T-SQL Statement)

蛮有用的,设置也比较简单,超时时间最好设置下

 

 

10. 重新生成索引(Rebuild Index Task) 和 重新组织索引(Reorganize Index)

这两个比较重要,又比较常用,同时又有可比性,所以就放在一起说。其实,在维护中,一般只选择这两个中的其中一个,对于如何选择,则是表的大小和db请求压力等决定的。

重新生成索引比重新组织索引更彻底,更给力,但是对于在线DB来讲,影响也比较大.。下面是详细的解释:

无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数 据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。

您可以通过重新组织索引或重新生成索引来修复索引碎片。对于基于分区方案生成的已分区索引,可以在完整索引或索引的单个分区上使用下列方法之一。

重新组织索引:

若要重新组织一个或多个索引,可以使用带 REORGANIZE 子句的 ALTER INDEX 语句。此语句可以替代 DBCC INDEXDEFRAG 语句。若要重新组织已分区索引的单个分区,可以使用 ALTER INDEX 的 PARTITION 子句。

重新组织索引是通过对叶页进行物理重新排序,使其与叶节点的逻辑顺序 (从左到右)相匹配,从而对表或视图的聚集索引和非聚集索引的叶级别进行碎片整理。使页有序可以提高索引扫描的性能。索引在分配给它的现有页内重新组织, 而不会分配新页。如果索引跨多个文件,将一次重新组织一个文件,不会在文件之间迁移页。

重新组织还会压缩索引页。如果还有可用的磁盘空间,将删除此压缩过程中生成的所有空页。压缩基于 sys.indexes 目录视图中的填充因子值。

重新组织进程使用最少的系统资源。而且,重新组织是自动联机执行的。该进程不持有长期阻塞锁,所以不会阻止运行查询或更新。

索引碎片不太多时,可以重新组织索引。请参阅上面的表,了解有关碎片的指导原则。不过,如果索引碎片非常多,重新生成索引则可以获得更好的结果。

大型对象数据类型压缩

重新组织索引时,除了重新组织一个或多个索引外,默认情况下还将压缩聚集索引或基础表中包含的大型对象数据类型 (LOB)。数据类型 imagetextntextvarchar(max)nvarchar(max)varbinary(max) 和 xml 都是大型对象数据类型。压缩此数据可以改善磁盘空间使用情况:

重新组织指定的聚集索引将压缩该聚集索引的叶级别(数据行)包含的所有 LOB 列。

重新组织非聚集索引将压缩该索引中属于非键(包含性)列的所有 LOB 列。

如果指定 ALL,将重新组织与指定的表或视图相关联的所有索引,并压缩与聚集索引、基础表或带有包含列的非聚集索引相关联的所有 LOB 列。

如果 LOB 列不存在,则忽略 LOB_COMPACTION 子句。

重新生成索引:

重新生成索引将删除该索引并创建一个新索引。此过程中将删除碎片,通过使用指定的或现有的填充因子设置压缩页来回收磁盘空间,并在连续页中对索引行重新排序(根据需要分配新页)。这样可以减少获取所请求数据所需的页读取数,从而提高磁盘性能。

可以使用下列方法重新生成聚集索引和非聚集索引:

带 REBUILD 子句的 ALTER INDEX。此语句将替换 DBCC DBREINDEX 语句。

带 DROP_EXISTING 子句的 CREATE INDEX

每个方法执行的功能都相同,但如下表所示,也都各有优缺点需要考虑。

功能

ALTER INDEX REBUILD

CREATE INDEX WITH DROP_EXISTING

可以通过添加或删除键列、更改列顺序或更改列排序顺序来更改索引定义。*

**

可以设置或修改索引选项。

可以在单个事务中重新生成多个索引。

可以联机重新生成大部分索引类型,而不会阻止运行查询或更新。

已分区索引可以重新分区。

可以将索引移动到另一个文件组中。

需要额外的临时磁盘空间。

重新生成聚集索引的操作将重新生成相关的非聚集索引。

除非指定关键字 ALL

除非更改索引定义。

可以重新生成强制 PRIMARY KEY 和 UNIQUE 约束的索引,而不用删除并重新创建这些约束。

可以重新生成单个索引分区。

通过在索引定义中指定 CLUSTERED,可以将非聚集索引转换成聚集索引类型。执行此操作时必须将 ONLINE 选项设置为 OFF。不管将 ONLINE 设置成什么,都不支持从聚集索引到非聚集索引的转换。

** 如果通过使用相同的名称、列和排序顺序重新创建索引,则可以省略排序操作。重新生成操作将检查行是否在生成索引时进行了排序。

您也可以先使用 DROP INDEX 语句删除索引,然后使用一个单独的 CREATE INDEX 语句重新创建该索引,通过这种方式重新生成索引。将这些操作作为单独的语句执行有许多缺点,因此不推荐这样做。

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
9天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
16天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
28天前
|
SQL 存储 关系型数据库
一文搞懂SQL优化——如何高效添加数据
**SQL优化关键点:** 1. **批量插入**提高效率,一次性建议不超过500条。 2. **手动事务**减少开销,多条插入语句用一个事务。 3. **主键顺序插入**避免页分裂,提升性能。 4. **使用`LOAD DATA INFILE`**大批量导入快速。 5. **避免主键乱序**,减少不必要的磁盘操作。 6. **选择合适主键类型**,避免UUID或长主键导致的性能问题。 7. **避免主键修改**,保持索引稳定。 这些技巧能优化数据库操作,提升系统性能。
226 4
一文搞懂SQL优化——如何高效添加数据
|
26天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
16天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
88 6
|
3天前
|
SQL 数据管理 关系型数据库
如何在 Windows 上安装 SQL Server,保姆级教程来了!
在Windows上安装SQL Server的详细步骤包括:从官方下载安装程序(如Developer版),选择自定义安装,指定安装位置(非C盘),接受许可条款,选中Microsoft更新,忽略警告,取消“适用于SQL Server的Azure”选项,仅勾选必要功能(不包括Analysis Services)并更改实例目录至非C盘,选择默认实例和Windows身份验证模式,添加当前用户,最后点击安装并等待完成。安装成功后关闭窗口。后续文章将介绍SSMS的安装。
6 0
|
9天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
9天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。
|
9天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL条件控制:数据的“红绿灯”与“分岔路”
【4月更文挑战第19天】在Oracle PL/SQL中,IF语句与CASE语句扮演着数据流程控制的关键角色。IF语句如红绿灯,依据条件决定程序执行路径;ELSE和ELSIF提供多分支逻辑。CASE语句则是分岔路,按表达式值选择执行路径。这些条件控制语句在数据验证、错误处理和业务逻辑中不可或缺,通过巧妙运用能实现高效程序逻辑,保障数据正确流转,支持企业业务发展。理解并熟练掌握这些语句的使用是成为合格数据管理员的重要一环。
|
9天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL表达式:数据的魔法公式
【4月更文挑战第19天】探索Oracle PL/SQL表达式,体验数据的魔法公式。表达式结合常量、变量、运算符和函数,用于数据运算与转换。算术运算符处理数值计算,比较运算符执行数据比较,内置函数如TO_CHAR、ROUND和SUBSTR提供多样化操作。条件表达式如CASE和NULLIF实现灵活逻辑判断。广泛应用于SQL查询和PL/SQL程序,助你驾驭数据,揭示其背后的规律与秘密,成为数据魔法师。