30. Microsoft SQL服务器管理
SQL Server自动设定功能 数据库维护计划本章总结使用适当的设定,并在数据库中执行例行的维护任务,是让服务器最佳化的关键。本章中将学到 SQL Server 2000 中关于动态设定的特别功能,这些功能可简化设定数据库的程序。同时我们也将使用数据库维护精灵(Database Maintenance Plan Wizard)制作数据库的系统自动维护计划,使数据库保持在最佳状态。SQL Server 自动设定功能SQL Server 内含自动化的功能,用于减少与设定和调节关系型数据库管理系统(RDBMS)有关的负荷。由于这些功能是从 SQL Server 7.0 发展出来的,SQL Server 7.0 的使用者对这些功能应该不陌生。本章我们会学习这些功能的运作、如何利用它们降低数据库的工作量,以及在必要时消除自动化的功能设定。动态内存管理 动态内存管理 (dynamic memory management)可让 SQL Server 依据系统的规模分配内存大小,以便动态的管理缓冲快取区和程序快取区。由于 SQL Server 具动态内存管理功能,DBA 就不必手动控制快取区的大小。但在某些情况下,可能需要限制 SQL Server 所能使用的内存大小。动态内存管理的运作动态内存管理以不断监视系统中可用物理内存的大小以达到管理的功能。SQL Server 依需要以及可使用内存的量,决定增加或减少 SQL Server 内存共享区(将在下个部分说明)。当内存大小还算固定时,这个功能就很实用;但是当内存被用于处理系统中 SQL Server 以外的其它程序时,就会因为 SQL Server 不断改变内存的配置而产生问题。如果一台计算机的系统主要就是用来作为 SQL Server 数据库服务器,就很适合使用动态内存管理。在这类系统中,在 SQL Server 处理范围之外的动作,所用到的内存大小较固定,因此 SQL Server 会不断的自动配置内存,使工作有效率地进行,这样的配置会一直持续到没有再多的物理内存可供配置。如果现有的处理程序不需要更多的内存,系统就会一直保持这样的状态。若另一个程序又需要用到内存,SQL Server 就会解除新程序所需的内存大小,并配置让新的程序顺利使用。用来处理作业程序的计算机系统就不适合使用动态内存。由于内存的需求不断改变,处理程序就必需时常增减内存。在这样的系统下,内存的用量经常改变,SQL Server 就必须不断地设定和撤销内存的配置,增加系统的负担,也使处理过程缺乏效率。如果能在 SQL Server 中以手动方式配置固定的内存大小,或是预设 SQL Server 可配置的最大与最小的内存容量,可使这类系统运作得更好,稍后在本章会有更详细的说明。不论使用的是动态或是手动来管理内存,系统运作的好坏要看内存的运用是否能发挥最大的效果。透过监视 SQL Server 的内存配置,可以确定内存的使用量是否固定的变更,或者一直保持在稳定的状态。使用 Windows 2000 的效能监视器(Performance Monitor)可以监视内存,如 SQL Server 中的 Total Server Memory(KB效能计数器)。内存管理员(Memory Manager)对象会显示 SQL Server 最近消耗的内存大小(KB)。内存共享区SQL Server 动态地配置和撤销集区中的内存。内存共享区由下列组件的内存组成: 缓冲快取区 保留数据库中已被内存读取的数据页面,缓冲快取区通常占用了大部分的内存共享区。 连接内存 用在每个 SQL Server 的连接点。连接内存由可以持续追踪每个使用者内容的数据结构所组成,包含了光标位置信息、查询参数值、以及预存程序信息。 数据结构 含有关于锁定和数据库描述的全域信息,包括有关锁定拥有者、被锁定的类型、和各种不同的档案及档案群的信息。 纪录快取区 用来保存被写在交易纪录中的交易信息,也用在读取当前写入纪录快取区的纪录信息。纪录快取区提升了纪录写入的效能,和缓冲快取区是不同的。 程序快取区 用来储存 Transact-SQL 陈述式的执行计划,并储存程序执行时的所有步骤。因为内存配置是动态的,如果可以以动态内存管理,内存共享区会不断地增加或减少,而且内存共享区的五个区域也可以动态地改变各自的大小。这个功能是由 SQL Server 控制的。举例来说,若内存的需求较多,就会有较多的 T-SQL 陈述式被储存在程序快取区中,SQL Server 就会从缓冲快取区拿走一些内存给程序快取区使用。使用附加内存SQL Server 可以存取的内存大小要看 Windows 操作系统的使用量。Windows NT Server 4 支持 4GB 的内存,其中 2GB 用在使用者程序上,另外的 2GB 留给系统使用。这表示在 NT 4 中,SQL Server 可配置的内存限量在 2GB 之内。但是在 Windows NT Server 4 企业版中,每个程序处理所配置的虚拟内存空间比原先大了 50%(3GB)。可以做这样的扩充是因为系统本身的配置减少到 1GB。用在程序处理的虚拟内存增加,因此可以将内存共享区的大小扩充到将近 3GB。要使用这个 Windows NT 4 企业版中的支持,您必须在 Boot.ini 的档案启动数据行中加入 / 3GB的标记,这可以透过控制台的系统图标来完成。对于 Windows 2000 操作系统的两个版本,SQL Server 2000 企业版都可以用Windows 2000 Address Windowing Extensions(AWE)API 来提供更大的内存空间。在 Windows 2000 高阶服务器版中支持将近 8GB,而在 Windows 2000 Datacenter Server 中支持将近 64GB 的内存。AWE 只支持这两种操作系统,无法支持 Windows 2000 专业版。(详见本书 第二章 和< 在线丛书 >中的「在Windows 2000中使用AWE内存」。)内存设定选项下面 SQL Server 组态设定和内存配置有关。可以透过 SQL Server Enterprise Manager 或者 sp_configure 预存程序来设定组态。若要使用 sp_configure 来检视这些组态,必须将 show advanced options 的选项设定成 1。 awe enabled 让 SQL Server 使用扩充内存(之前提过的 AWE 内存)。这选项只能在 SQL Server 企业版中使用,而且只能用 sp_configure 来设定。 index create memory 限制在索引建立过程中排序的内存大小。index create memory 选项是自设的,大部分情况下它不需要调整。但是如果建立索引时遇到困难,可能要试着在默认值上增加选项的值。 max server memory 设定 SQL Server 可以分配给内存共享区的最大内存空间。如果 SQL Server 要动态地配置和撤销内存,就留下默认值设定;如果要静态地配置内存(因此使用空间不变),可将这个选项和 min server memory 设定成相同的值。 min memory per query 指定分配给执行查询的最小内存空间(KB)。 min server memory 设定 SQL Server 可以分配给内存共享区的最小内存空间,留下默认值给动态内存配置。如果要静态地分配内存,可将这个选项设成和 max server memory 相同的值。 set working set size 指定 SQL Server 分配的内存不能交换,即使其它程序可以更有效地使用内存。当 SQL Server 可以动态配置内存时,不应该使用 set working set size 选项。它应该只用于 min server memory 和 max server memory 设成相同数值时。这样一来,SQL Server 将分配无法变更的静态内存大小。________________________________________说明 要发挥 AWE 的内存选项的优势,必须将 SQL Server 2000 企业版与 Windows 2000 高阶服务器版或 Windows 2000 数据中心服务器版一起执行。________________________________________其它动态设定选项有些动态设定选项并不属于服务器内存,在 SQL Server 中也可使用。若保留这些选项的默认值,SQL Server 将动态地设定所有选项。默认值可以覆写,虽然这并非必要,但您仍应该知道使用手动设定时这些选项如何运作。使用 SQL Server Enterprise Manager 或 sp_configure 来设定选项(并不是所有的选项都可以透过 Enterprise Manager 来设定)。用 sp_configure 设定选项,在命令提示窗口中开启 Query Analyzer或 osql 联机,用参数执行预存程序如下:sp_configure "option name", value参数 option name 就是设定选项的名称,而 value 就是要设定的数值。如果执行命令时没有包含参数值,SQL Server 会回传给指定选项当前的值。要看所有选项的清单和它们的值,直接执行 sp_configure,不需任何参数。有些选项被视为进阶选项。为了用 sp_configure 来检视和设定这些选项,您必须先将 show advanced options 设定为1,语法如下:sp_configure "show advanced options", 1透过 Enterprise Manager 设定的选项不受 show advanced options 的影响。在 Enterprise Manager 中,选择服务器后按下鼠标右钮,在快捷菜单中选择 内容 进入 SQL Server属性(组态) 窗口,如图30-1所示。 图30-1 Enterprise Manager 中属性窗口的一般页签在窗口的页签可存取某些动态选项。接下来的章节中将描述 SQL 和内存无关的动态选项,并说明这些选项是否可在 Enterprise Manager 上设定,以及在×××到这些选项。锁定选项SQL Server 根据当前的需求来动态地设定系统中使用锁定的数量大小。您可以设定可用数量的最大值,限制 SQL Server 用在锁定上的内存数量。预设设定为 0,这允许 SQL Server 根据系统需求,动态地要求分配和撤销锁定。SQL Server 允许内存最高有 40% 用在锁定上。保持 locks 参数为默认值 0,并允许 SQL Server 根据需要分配锁定。这个选项是进阶选项,并且只能用 sp_configure 设定。复原间隔选项复原间隔表示 SQL Server 回复数据库所需要的每数据库最大分钟数。(请参阅本章中 < 自动检查点 > 一节。)SQL Server 回复数据库需要的时间要看最后一次的检查点何时发生。因此复原间隔(recovery interval)的值是 SQL Server 用来动态地决定何时执行自动检查点。举例来说,每次 SQL Server 关闭时,检查点会在所有数据库中执行,因此当SQL Server 再度启动,只需一点点时间复原。但如果 SQL Server 被强制停止(由于电源中断或其它失误),SQL Server 要再启动时,它将退回那些没有提交的交易来回复数据库,进行那些已经提交但在 SQL Server 停机时还没写入到磁盘中的交易。如果在特定的数据库中最后检查点正好在系统失误前执行的话,数据库的回复时间较短;如果最后检查点在系统失误之前很久的时间执行的话,回复时间较长。SQL Server 根据内建路径和复原间隔的设定来决定多久执行一次检查点。例如,如果将复原间隔设定为 5,SQL Server将 在每个数据库执行检查点, 这样数据库在失误后的回复时间约需五分钟。复原间隔的默认值为 0,表明由 SQL Server 自动设定。使用默认值时,回复时间少于1分钟,而且检查点几乎每分钟执行一次。很多情况下,检查点频繁执行会造成的效能降低。因此,大部分的时候您应该增加复原间隔的值来减少检查点的数量。您选择的值将视企业需求而定,看使用者在系统失误之后可以等多久。一般说来,设定 5~15 的值就行了(表示回复时间为 5~15 分钟)。复原间隔选项是进阶选项。可以在 Enterprise Manager 中的属性窗口设定。点选 数据库设定 页签,如图30-2所示。在 复原间隔(分钟) 方块中输入一个值。 图30-2 设定回复时间使用者连接选项SQL Server 动态设定使用者连接数,最多允许 32767 个使用者连结。透过设定联机使用者选项,您可以指定允许进入 SQL Server 的最大值(允许的使用者连接数也受限于应用程序和硬件)。使用者连接仍可动态地设定成最大值。举例来说,如果只有 10 个使用者登入,就分配 10 个使用者连接对象。如果达到最大值,而 SQL Server 还需要更多使用者连接的话,就会出现一个错误讯息,告知您使用者连接已达最大值。大部分的情况中,不需要改变联机使用者选项的默认值。注意每个连接约需要40KB 的内存。可以使用 SQL Server Query Analyzer,和下列的 T-SQL 陈述式来确定您的系统允许的使用者连接最大值:SELECT @@MAX_CONNECTIONS联机使用者选项是进阶选项,可以在 Enterprise Manager 中设定。只要点选服务器属性窗口中的 联机 页签,并在 使用者同时联机最大值 微调方块中输入一个数值,如图30-3所示。 图30-3 设定使用者连结开启对象选项 开启对象 (open objects)选项是进阶选项,只能用 sp_configure 设定,指定可同时开启的最大数据库对象个数,如数据表、检视表、预存程序、触发程序、规则和默认值,都可以在同时间启动。默认值 0 表示系统允许 SQL Server 动态地调整开启对象的数量。建议保留默认值设定。如果您做了改变,而 SQL Server 需要比设定还多的开放对象,就会收到错误讯息,告知超过系统允许的开放对象数量。还有,每个开放对象会消耗一些内存,所以系统需要更多物理内存来支持开放对象的数量。统计系统需要数据列统计来增加查询效能。SQL Server 能搜集数据表数据列中和数值分布有关的统计信息。Query Optimizer 利用这个信息决定查询的最佳执行方法。统计可以在两种数据列中取得:索引的一部分和不在索引中而在查询的述词中使用。留下 SQL Server 设定的数据库默认值,可使 SQL Server 自动建立两种型式的统计。索引栏数据和索引同时建立,非索引栏数据则在需要查询时建立(只有单一数据列而非多重数据列,如同稍后在 < 建立统计 > 这节所说明的一样)。一旦统计旧了(一段时间没有使用),SQL Server 会自动将它们去除。建立非索引数据列和索引数据列时,SQL Server 只用了数据表中的数据样本,而非每一资料行都用。这减少了作业的过度需求,但在某些情况下,样本并不能正确地显示数据的特征,统计将不完全精确。在 Enterprise Manager 中,可以设定或取消数据库自动建立统计的功能。首先开启所选定的数据库属性窗口,点选 选项 页签,就会看见 自动产生统计资料 的复选框。(图30-4显示范例distributions数据库的复选框)。这个选项由默认值挑选。 图30-4 distribution 数据库的属性窗口在数据库的属性窗口,也会看到 自动更新统计数据 的选项。这个选项说明SQL Server 在必要时将自动更新数据表数据列的统计。当数据表中大部分的数值改变时,这些统计就必须更新(透过更新、插入、或删除操作)。当多数资料改变,当前的统计就比较不精确。SQL Server 将自动决定何时应该更新统计。如果您选择撤除这个选项以建立统计的能力,您就必须使用手动执行任务,以确保数据库运作得宜。以下章节会告诉您如何手动建立与更新统计。建立统计您可以在数据表的特定数据列中,使用 T-SQL 指令 CREATE STATISTICS 来手动建立统计。手动建立统计和自动建立不同。手动可让您结合多重资料列的统计,产生如 复制值 和 相异值 的平均数。CREATE STATISTICS 的语法如下:CREATE STATISTICS stats_name ON table_name ( column [ , column... ] ) [ [WITH [ FULLSCAN | SAMPLE SIZE PERCENT ] [ , NORECOMPUTE ]您必须提供您要建立的统计名称、数据表名称、和至少一个数据列名称。可以指定多重数据列名称来搜集组合数据列的统计,但不能指定计算资料行或者 ntext、 text、or p_w_picpath 数据型别作为统计数据列。不管是完全扫描或个别取样都可以用作统计搜集。因为要扫瞄每数据行数据表,完全扫描花费的时间比个别取样久,但它会比较精确。如果您使用个别取样,您必须指定样本数据的百分比。NORECOMPUTE 指定撤销统计的自动更新能力,让统计不再代表数据能否使用。您也许要在数据列中建立统计,一起用在查询的述词中。举例来说,您可以在Northwind 数据库 Employees 数据表的 FirstName 和 LastName 数据列中建立统计,用员工的姓氏和名字来搜寻员工数据。T-SQL 程序代码的用法如下:CREATE STATISTICS nameON Northwind..Employees (FirstName, LastName)WITH FULLSCAN, NORECOMPUTE这个陈述式计算 FirstName 和 LastName 数据列中所有数据行的统计,并撤销统计的自动验算功能。如果数据库的所有数据表和所有数据列都用手动建立统计,却不想一栏一栏键入CREATE STATISTICS 陈述式的话,可用 sp_createstats 预存程序。预存程序将在下个部分说明。sp_createstats您可以经由预存程序 sp_createstats,在使用者数据表中所有合适的数据列建立统计。尚未有统计的资料列都将建立统计。每组统计只会在一个单一资料列中。sp_createstats 的语法如下:sp_createstats [ 'indexonly' ] [ , 'fullscan' ] [ , 'norecompute' ]indexonly 参数限定唯有索引内的数据列可以建立统计。fullscan 参数限定每一数据行都将执行完全扫瞄,而非随机取样。norecompute 参数限定不能在新的统计上自动更新统计。新的统计都以原先建立的资料列名称命名。更新统计SQL Server 用默认值自动更新统计。您可以使用 UPDATE STATISTICS 命令来撤销这个选项,改用手动更新统计。这个指令允许更新索引栏和非索引栏的统计。您也许要建立一个 UPDATE STATISTIC 的指令码,然后定期执行指令码,就像 SQL Server 的工作。这将有助于维持最新的统计,并且确保较好的查询效能。(见 第17章< 重建索引 > ,有更多关于语法和 UPDATE STATISTICS 选项的细节。)要设定或撤除特定统计的自动更新状态,可用 sp_autostats 预存程序,说明如下:sp_autostats利用系统的预存程序 sp_autostats,可以设定或撤除特定统计的自动更新。执行程序不会造成统计更新;更确切地说,它决定该不该出现自动更新。预存程序要和一个两个或三个参数一起呼叫:数据表名称、选择性标记和统计名称。标记说明自动更新的状态,并设定成 ON 或OFF。在数据表中显示目前所有统计的更新状态(索引栏和非索引栏统计),用指定的数据表名称执行指令。下面指令显示 Customers 数据表的统计状态:USE NorthwindGOsp_autostats CustomersGO输出显示每个统计的名称,不论自动更新设定在 ON 或OFF,或是最近的更新在何时。不要被输出的第一数据列上 Index Name 标题困扰。它表示所有统计,不是只有索引而已。如果您不需手动关掉这些统计的更新,它们会显示 ON 的状态, 就像 SQL Server 的默认值。要撤除 Northwind 数据库 Customers 数据表中所有统计的自动更新,必须使用下列指令:USE NorthwindGOsp_autostats Customers, 'OFF'GO您可以将标记值设成 ON 让自动统计更新再度运作。改变特定统计的状态或者索引的统计数据,包括个别的统计名称或索引名称。例如下列指令能设定 PK_Customers 索引的自动统计更新:USE NnorthwindGOsp_autostats Customers, 'ON', 'PK_Customers'GOCustomers 数据表中所有其它统计的状态将不改变。档案成长使用 SQL Server 2000 时,您可以设定数据文件依需要自动增长。这个功能很好用,因为它防止您不小心用完空间。然而不能因为这个功能就不监控数据库大小,或是偶尔才执行一下容量规划。您应该经常注意数据表的增长有多快。然后才能决定是否要定期删除不必要的档案(也许是一些数据表中的过期数据)。这么一来,就能减缓资料表的增长。随着数据表中数据数量的增加,查询会花更多时间,效能层级就下降。建立数据库时,设定自动档案增长的标题(如 第九章 所提),您将学会如何变更现有数据库的增长选项。自动档案增长选项可在 Enterprise Manager 中设定。 跟着下面的步骤执行: 1. 在 Enterprise Manager 左边的窗格中,展开一个服务器,选择 数据库 数据夹。在想要修改的数据库上按下鼠标右钮(以修改 MyDB 数据库为例),在快捷菜单中选择 内容 进入数据库的属性窗口。 2. 点选 数据文件 页签(如图30-5所示),看看数据库数据文件的属性。在 档案属性 中的选项是用来控制数据文件的成长方式。要让档案自动增长,勾选 自动成长 复选框。如果让档案自动成长,应该设限让档案不会无限制地增长。图30-5 MyDB 属性窗口的数据文件页签使用 档案大小上限 中的选项指定档案可成长的上限。点选 限制档案成长 并在微调方块中键入最大值。如果点选 不限制档案成长 ,您会发现磁盘驱动器子系统一不小心就装满数据,造成效能和操作问题。使用档案增长区中的选项可以限定档案增长的速度。如果点选 以MB表示 ,一旦数据文件满了,SQL Server 会依指定数值增加大小。如果点选 以百分比表示 ,SQL Server 将依照目前大小的百分率来增加资料文件大小。 3. 点选 交易记录文件 页签(如图30-6所示),设定交易记录的自动增长选项。这些选项的使用方法跟 数据文件 页签相同,在这里也应该为交易记录档案设限,档案才不会无限制成长。图30-6 MyDB 数据库属性窗口的交易记录文件页签自动档案增长功能在很多情况都很方便,只要确定您没有让档案意外地消耗掉系统所有的磁盘空间。检查点SQL Server 自动执行检查点操作。检查点的频率会依指定的 SQL Server 设定选项中复原间隔的数值自动计算。这个选项指定系统失效事件发生时,您所要等待的数据库回复时间(分钟)。检查点出现频率必须足以确保系统回复时间少于指定的分钟数。当 SQL Server 在 SHUTDOWN 陈述式或服务控制管理员中关闭时,检查点也会自动出现。您也可以用 CHECKPOINT 陈述式手动设立检查点。如果想要系统执行最佳化,而且又能允许很长的回复时间的话,可以将复原间隔设成很大的值,例如 60。这代表要是系统失效,要花 60 分钟才能完成自动回复。检查点出现造成大量磁盘写入,它们会从使用者交易中取走处理资源,因而减慢使用者的响应时间。这就是执行较少的检查点经常可以协助改善所有交易效能的原因。当然,这个值设太高,系统一失效的话,就会导致过长的停机时间。一般的复原间隔设定介于 5 到 15 分钟之间。复原间隔的默认值为 0。这个设定允许 SQL Server 依据系统负载来决定执行检查点的最佳时间。一般说来,使用默认值时,检查点约每分钟执行一次。如果您注意到检查点经常出现,可能就要调整复原间隔设定。要确定 SQL Server 是否过度执行检查点的话,就用 SQL Server 追踪标记-T3502。这个标记使得检查点信息被写在 SQL Server 错误记录中。注意检查点会出现在每个数据库中。数据库维护计划维护计划是一组任务,SQL Server 会自动在数据库根据您指定的时间表执行。 维护计划的目的在自动操作重要的管理任务,这样工作就不会被忽略,并能减少 DBA 的手动工作量。您可以替每个数据库建立个别的计划,为单一数据库建立多重计划,或是为多重数据库建立单一计划。建立维护计划时,您可以排定的四个主要管理任务类型是: 最佳化 完整性检查 完整数据库备份 交易纪录备份执行这些任务对于维持良好效能和可回复的数据库是很重要的。您的计划所要包括的最佳化任务类型,取决于您的数据库效能和使用率。执行完整性检查是用来确保健全且一致的数据库的好方法。还要有定期备份,以确保在系统失效或使用者错误的情况下,能够回复数据库。由于这些备份是如此的重要,您应该设立自动备份策略。我们稍后将在这个章节看到每个任务类型的更多细节。用 Database Maintenance Plan Wizard 建立一个维护计划。本章节中,您将学会如何使用这个精灵,如何在维护计划中显示工作和如何编辑计划。使用 Database Maintenance Plan Wizard 建立维护计划依下列步骤执行数据库维护计划精灵: 1. 用以下任一方式可启动 数据库维护计划精灵 : o 在 工具 菜单中选择 数据库维护计划 。o 在左边窗格中点选一个数据库名称,并在右边窗格中的 维护 标题下点选 新增维护计划 。如果没看到 维护 标题,检查是否在 检视 菜单中选择了 工作清单 。也许要向下卷动屏幕才看得到。o 点选一个数据库名称,在 工具 菜单中选择 精灵 ,展开 选择精灵 。对话框中的 管理 数据夹,然后选取 数据库维护计划精灵 。 o 展开左边窗格中的服务器,展开 管理 数据夹,在 数据库维护计划 上按下鼠标右钮,从快捷菜单中选择 新增维护计划 。o 在数据库名称上按下鼠标右钮并选择 所有工作 ,从快捷菜单上选取 维护计划 。一旦你开启精灵,你将会看到欢迎画面,如图30-7。 图30-7 「数据库维护计划精灵」的欢迎画面2. 选择 下一步 进入 选取数据库 画面,如图30-8所示。选择需要建立维护计划的一个或多个数据库。 3. 选择 下一步 进入 更新数据最佳化信息 画面,如图30-9所示。可为刚刚建立的数据库选择最佳化类型: o 重新组织数据及索引页 这个选项用特定的填满因子(或者每页的可用空间数)来改善更新的效能,除去或再造数据库中所有数据表的索引。只读数据表就不需要这个页面。对于经常插入或更新的数据表来说,索引页中最初的可用空间会开始填满,页面也开始拆分。选择这个选项可以重建索引,替未来的档案增长重新建立可用空间,避免页面拆分时造成的延迟和数据占用。 图30-8 选择数据库画面您可以选择根据可用空间的原始大小来重建索引,或者您可以指定一个新的保持空白页面比率。如果您设定的比率太高,就必须冒着数据读取效能降低的风险。如果您选择这个选项,就不能选下一个 Update Statistics Used By Query Optimizer 选项。________________________________________提示 移除与重建索引会比用 DBCC DBREINDEX 花时间, 正如 第17章< 重建索引 > 所讨论的一样。您也许会想建立自己的工作来重建索引,而不使用这个选项。________________________________________ 图30-9 更新数据最佳化信息画面o 更新查询最佳化所使用的统计数据 选择这个选项可使SQL Server 重新取样数据库中所有索引的分布统计。它用这个信息来选择查询的最佳执行计划。如果不必为了更新统计而改变预设选项(本章前面曾说明过),SQL Server 会自动产生统计,用相对应于每个索引的数据表中数据较小的比率来采样。这个选项可用来强制 SQL Server 执行另一个采样,使用较大比率的指定数据,或者决定多久 SQL Server 应该更新统计,而不是任由它决定。越大比率的资料采样,统计就越精确,但 SQL Server 也要花更多时间来产生统计。当索引栏中的数据被大量修改时,这个信息有助于改善效能。您可以用 SQL Server Query Analyzer 检验查询的执行计划,确定索引是否有效地使用,确定是否有必要选择这个选项。如果选了这个选项,就不能选之前 Reorganize Data And Index Pages 的选项。 o 从数据库档案中移除尚未使用的空间 这个选项可用来移除未使用的空间;这个过程也就是我们所知的档案收缩(file shrink)。可以指定应该有多大的未用空间才进行压缩,以及压缩之后要有多少比率的空间应该保留。一旦移除了可用空间,您可以用 DBCC SHRINKFILE 来缩减档案大小,如果需要的话,还能让它比刚建立时还小。这让之前被档案占用的磁盘空间可用于其它需要的地方。还有,移除未使用空间的压缩资料可以提高效能。在只读数据表中,压缩是不必要的。可以选择 变更 按钮进入 编辑重复执行作业排程 ,指定任务的执行时间,如图30-10所示。这些任务可以在系统使用率较低执行(如周末或晚上),因为它们需要花较多时间完成,可能会延迟响应使用者的时间。 4. 选择 下一步 进入 数据库完整性检查 画面,如图30-11所示。这个画面中,可以选择是否要执行完整性检查。完整性检查会执行 DBCC CHECKDB 指令来检验数据表和索引的配置与结构完整性(如果选择索引选项)。您可以选择检查中是否包括索引、SQL Server 是否应该修复发现的小问题(建议选择这个选项)、以及是否应该在备份之前执行所有的完整性检查。 如果选择在备份前执行检查,并在检查时发现问题,那么将不执行备份。点选 Change 来改变这些任务的执行时间。完整性检查可能花好几个小时执行, 这取决于您的数据库大小。因此要确定将它们安排在数据库使用率较低时执行。检查应该定期执行,也许每周或每月一次,或是在数据库备份前进行。图30-10 编辑重复执行作业排程对话框 图30-11 数据库完整性检查画面5. 选择 下一步 进入 指定数据库备份计划 画面,如图30-12所示。这个画面可以选择是否要建立自动备份计划(建议使用这个计划)。勾选 将数据库备份视为维护计划的一部份 ,即可以建立自动备份( 第32章 有关于备份的详细说明)。您可以指示 SQL Server 在完成时检验备份的完整性。SQL Server 会确定备份完成,而且所有的备份内容都能存取。您也可以指示备份是否要先储存在磁带或磁盘上。点选 Change 来改变备份的执行时间。 6. 选择 下一步 进入 指定备份磁盘目录 画面,如图30-13所示。只有当您在上个画面中指定备份到磁盘上,才会出现这个画面。如果指定备份到磁带,画面就不会出现。这里可以指定备份文件的位置,也可以使用预设的备份目录。如果所要备份的不只一个数据库(如 master、model、msdb),就将每个数据库备份放在它所属的子目录下,让备份档系统化。可以选择自动删除某段时间的备份文件来挪出磁盘空间,并可以指定备份文件的扩展名。图30-12 指定数据库备份计划画面 图30-13 指定备份磁盘目录画面7. 选择 下一步 进入 指定交易记录文件备份计划 ,如图 30-14 所示。这个画面和图 30-12 的 指定数据库备份计划 画面类似,不过这个画面的选项是用来建立备份交易纪录。交易纪录备份应该在数据库备份之间执行。要回复从上次数据库备份至今的任何变更,可以用交易纪录备份。换句话说,交易纪录备份让您回复数据库备份之间的数据。图30-14 指定交易记录文件备份计划画面如果您选择在磁盘上储存备份,下一个会看到的画面是 指定交易记录文件备份磁盘目录 ,在这个画面中可以提供备份文件位置信息。 8. 选择 下一步 进入 产生报告 画面,如图 30-15 所示。这个画面提供您建立报告的选项,包含维护计划任务执行的结果。在这个画面中,您也可以选择储存报告的位置、删除超过某日期的报告,并可以用电子邮件传送这份报告到指定的地址。 9. 选择 下一步 进入 维护计划历程记录 画面(图30-16)。这里可以选择维护历史报告是否要写入本机服务器的数据库数据表中,还可以设定报告的最大容量。您也可以将报告写入远程服务器并指定报告的最大容量。图30-15 产生报告画面 图30-16 维护计划历程记录画面10. 选择 下一步 进入 完成数据库维护精灵 画面,如图30-17所示。这个画面显示维护计划的摘要。这个计划有个预设的名称,但也可以在 计划名称 的文字方块中键入指定名称。检查摘要,如果想要改变任何选项可以回去修改。如果计划无误,就选择 完成 。图30-17 完成数据库维护精灵画面在维护计划中显示工作维护计划范例中,我们在四个类型里各建立一个任务。要看工作列表或排程任务,就开启 Enterprise Manager 左边窗格中 管理 数据夹,展开 SQL Server代理程序 ,然后选择 作业 ,如图30-18所示。 图30-18 用维护计划建立的作业编辑维护计划要编辑维护计划,先在 Enterprise Manager 左边窗格上点选已建立的数据库名称,然后选择右边窗格中 维护 标题之下的计划名称(或许必须向下卷动才看得到标题),数据库维护计划的对话框就会出现,如图 30-19 所示。完成数据修改后, 一般 页签允许指定哪些数据库适用于维护计划。其它的页签可改变原先 数据库维护计划精灵 中的设定。完成计划修改时点选 确定 ,维护计划就马上依照新的安排开始进行。________________________________________说明 您必须让 SQL Server Agent 从自动维护计划开始依进度执行。详情参见 第31章 。________________________________________ 图30-19 「数据库维护计划」对话框中的「一般」页签本章总结在这一章中,您已经学会 SQL2000 的动态设定功能,这个功能帮助您减少执行DBA 时数据库的使用量。您也学会制作数据库维护计划,可以自动执行管理任务。下一章将告诉您如何使用 SQL Agent 来定义工作和警示。透过设定工作和警示,您可以让管理任务的自动化更进一步。