资讯详情

SQL SERVER

SQL Server数据库文件恢复技术

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE备份数据库文件,直接复制数据库文件mdf和日志文件ldf的方式。下面将主要讨论一下后者的备份与恢复。假设你能熟练地使用这篇文章SQL Server Enterprise Manager(SQL Server和SQL Server Quwey Analyser(SQL Server查询分析器)1.正常备份和恢复方法在正常情况下,我们需要备份一个数据库,首先从运行的数据服务器中断数据库,或者停止整个数据库服务器,然后复制文件。卸下数据库的命令:Sp_detach_db 数据库名连接数据库的命令:Sp_attach_db或者sp_attach_single_file_dbs_attach_db [@dbname =] ′dbname′, [@filename1 =] ′filename_n′ [,...16]sp_attach_single_file_db [@dbname =] ′dbname′, [@physname =] ′physical_name′这种方法可以正确恢复SQL Sever7.0和SQL Server 2000数据库文件,重点是备份时必须mdf和ldf备份两份文件,mdf文件是数据库数据文件,ldf是数据库日志文件。例子:假设数据库为test,其数据文件为test_data.mdf,日志文件为test_log.ldf。让我们讨论如何备份和恢复数据库。卸下数据库:sp_detach_db 'test'连接数据库:sp_attach_db 'test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_data.mdf','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf'sp_attach_single_file_db 'test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_data.mdf'2、只有mdf文件恢复技术由于种种原因,如果我们当时只备份了mdf文件,所以恢复是一件非常麻烦的事情。如果您的mdf文件是由当前的数据库生成的,所以很幸运,也许你使用它sp_attach_db或者sp_attach_single_file_db可以恢复数据库,但会出现以下提示信息设备激活错误。物理文件名称 'C:/Program Files/Microsoft SQL Server/MSSQL/data/test_Log.LDF' 可能有误。已创建名为 'C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.LDF' 新日志文件。然而,如果您的数据库文件是从其他计算机上复制的,不幸的是,上述方法可能不起作用。您可能会得到类似于以下错误信息服务器: 消息 1813,级别 16,状态 2,行 1未能打开新数据库 'test'。CREATE DATABASE 将终止。设备激活错误。物理文件名称 'd:/test_log.LDF' 可能有误。怎么办?别担心,我们举例说明恢复方法。A.我们使用默认方法建立一个供恢复使用的数据库(如test)。可以在SQL Server Enterprise Manager里面建立。B停止数据库服务器。C.将刚刚生成的数据库的日志文件test_log.ldf删除,使用要恢复的数据库mdf文件覆盖刚才生成的数据库数据文件test_data.mdf。D启动数据库服务器test状态是怀疑。此时此数据库无法操作。E设置数据库,允许直接操作系统表。此操作可在SQL Server Enterprise Manager选择数据库服务器,按右键,选择属性,在服务器设置页面中选择允许直接修改系统目录。以下句子也可以用来实现。use mastergosp_configure 'allow updates',1go reconfigure with overridegoF.设置test紧急修复模式update sysdatabases set status=-32768 where dbid=DB_ID('test')此时可以在SQL Server Enterprise Manager在数据库中可以看到数据库中的表,但只有系统表G以下是数据库日志文件的实际恢复操作重建dbcc rebuild_log('test','C:/Program Files/Microsoft SQL Server/MSSQL/Data/test_log.ldf')如果在执行过程中遇到以下提示:服务器: 消息 5030,级别 16,状态 1,行 1该操作无法排他地定数据库。DBCC 完成执行 DBCC 输出错误信息,请联系系系系统管理员。[brown][/i]如果您刚才在F步骤中使用该数据库,则表明您的其他程序正在使用该数据库SQL Server Enterprise Manager打开了test然后退出库的系统表SQL Server Enterprise Manager就可以了。完成正确执行的提示应与:警告: 数据库 'test' 日志已重建。事务的一致性已经丧失。 DBCC CHECKDB 验证物理一致性。数据库选项必须重置,多余的日志文件可能需要删除。DBCC 完成执行 DBCC 输出错误信息,请联系系系系统管理员。此时打开在SQL Server Enterprise Manager数据库的状态是仅供DBO使用。此时,您可以访问数据库中的用户表。H验证数据库的一致性(可省略)dbcc checkdb('test')一般执行结果如下:CHECKDB 发现了 0 分配错误和 0 一致性错误(在数据库中 'test' 中)。DBCC 完成执行 DBCC 输出错误信息,请联系系系系统管理员。I。将数据库设置为正常状态sp_dboption 'test','dbo use only','false'如果没有错,恭喜,恢复后的数据库现在可以正常使用了。J在最后一步中,我们需要恢复步骤E中设置的允许直接修改系统目录。因为通常直接操作系统表是一件危险的事情。当然,我们可以SQL Server Enterprise Manager内部恢复也可以用以下句子完成sp_configure 'allow updates',0go reconfigure with overridego

日志文件缩小全接触
摘要:缩小日志文件的全接触(全文共4413字)-点击 在这里阅读全文
2006年01月10日
事务全攻略
摘要:事务有ACID属性 即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性(全文共10579字)-点击 在这里阅读全文
2005年12月31日
《MS SQL Server 2000管员手册》系列——36. 解决常见的效能问题

36. 解决常见的效能问题什么是瓶颈 发现问题一般效能瓶颈SQL Server组态设定本章总结在整本书中,您看到了可以使用的工具和可以修改的参数,来帮助您发现与解决效能问题。例如,前一章学到如何利用 SQL 陈述式和预存程序来辨识问题,以及如何调整那些陈述式和程序达成最佳化效能。本章则帮助您简单地找到需要的信息,以便解决各种效能问题,并检视一些其它章节讨论过跟效能有关的主题,提供检验效能问题的参考方案,与说明一些与效能监视和系统调整有关的附加信息。我们将从复习 瓶颈 (bottleneck)的定义开始。然后看看如何使用 Windows 2000 系统监视器(在 Windows NT 中称为效能监视器),以及如何使用 Microsoft SQL Server Enterprise Manager 来确定效能问题是否存在。接着是如何解决一般效能问题,该问题发生在好几种层级中,包括应用程序、SQL Server、操作系统和硬件等层级。用在系统容量计划的主要规则已经在 第 6 章 说明过,但本章还会再复习一次,因为它们可以用来分析现有的系统,以确定是否需要附加硬件来改善效能。最后将复习前几章提过的好几种 SQL Server 设定参数,用来调整系统效能的改变方式。在本章的结尾,您将可以识别效能瓶颈,并确定导致瓶颈的原因。虽然不是每次都能解决问题,但是只要肯花时间以及资源来处理这些问题,大部分问题是可以解决的。什么是瓶颈  瓶颈 一词通常用来讨论软件和硬件效能问题,也就是系统中一个组件或一组组件可能限制系统效能的状况。例如,缺少足够容量的 I/O 子系统会导致一个严重的瓶颈-它会使整个系统变慢。(在本章的 <I/O子系统> 一节中会详细的讨论这种情况。)几乎所有系统中活动的组件都可能导致瓶颈。瓶颈可以由一个组件所引起,例如一个磁盘,或由一组组件所引起,例如I/O子系统,或由不同组件的组合所引起。例如,您可能首先检测到一个 I/O 子系统瓶颈。解决这个问题的方法是透过增加更多的磁盘来支持发生问题系统中的 I/O 数量(硬件解决方案),或透过最佳化低效率查询来减少 I/O 的发生(软件解决方案),或两者都使用。当 I/O 问题被解决时,可能会发现现在产生 CPU 瓶颈,并需要增加 CPU 的速度或 CPU 的数量。发现问题 要确定系统是否有问题存在,首先要观察系统效能。例如,使用者是否在执行数据库查询或修改时,受到比预期更慢的反应时间。这是效能问题或瓶颈的一般状况。也许您会注意到,当执行某种查询时,系统上所有其它的操作会执行得比平常慢。因此将着重于造成问题的最佳化查询,或者在较少使用者存取系统时,试着同时执行查询来找出原因。另一个确定是否有问题存在的途径是定期的测试和监控系统。可以使用的工具包括 Windows 2000 系统监视器和 SQL Server Enterprise Manager。本节会学习如何使用这两种工具检查系统的状况,也将学习用在监视 SQL Server 过程的 sp_wh 0-7356-1266-8预存程序。________________________________________说明 如果需要使用 SQL Profiler和SQL Query Analyzer 来侦测和 SQL 陈述式有关的效能问题,请参阅 第 35 章 。________________________________________系统监视器 Windows2000 系统监视器不仅支持 Windows2000 计数器,也支持 SQL Server计数器。这些计数器监控系统功能随时间的变化以确定系统中的状态,例如 CPU 利用的百分率或 SQL Server 快取命中比率。(本章也提供关于特定效能计数器的信息。)您可以随时观察监视器,或将数据记录到档案中,以后再检视。要使用系统监视器监视系统,请依下列步骤进行:1. 按 开始 / 程序集 / 系统管理工具 / 效能 ,进入系统监视器窗口。 2. 指定您是否以图表格式、报表格式或记录数据格式来检视计数器数据,或是在工具列上点选合适的按钮,检视之前存在数据记录文件的数据。图36-1显示在 系统监视器 中的图表检视。如果选择检视记录文件,对话框会显示在您开启的档案上。   图36-1 Windows 2000 效能监视器3. 要在 效能 窗口中加入一个检视的计数器,请在工具列中按一下加号按钮,会出现 新增计数器 对话框,如图36-2所示。点选 本机计算机计数器 ,检视本机系统的计数器,或者点选 从下列计算机选择计数器 ,并从下拉式清单上选择一个远程计算机名称,检视该计算机的计数器。   图36-2 「新增计数器」对话框4. 从 效能对象 下拉式清单上选择 System 对象。这些对象代表系统组件。您选择的对象计数器将显示在对话框左边角落的清单上。要观察所有对象的计数器,按一下 所有计数器 。如果想要监视某些特定的计数器,点选 从清单选取计数器 ,然后选择清单上的计数器。有些计数器不只一种,这些例子都将显示在对话框右边角落的清单上。要选择一个或多个特定例子来检视的话,就点选 从清单选取例项 ,或者点选 所有例项 来检视全部的例子。 5. 按一下 新增 ,所选择的计数器就会新增到 效能 窗口。(如果选择一个计数器的多种例项,它们会全部新增进去。)您可以继续新增计数器。准备要回到 效能 窗口时按一下 关闭 ,您就能看到计数器提供的效能数据。图36-3显示三种计数器回传的结果:Context Switches/Sec、Total Server Memory (KB)和% Processor Time。   图36-3 实时系统监视器要将效能数据存入记录文件中,请跟着下面程序:1. 在 效能 窗口左边窗格中展开 效能记录文件及警示 。在 计数器记录文件 上按一下右键,并从快捷菜单中选择 新增记录文件设定 。出现 新记录文件设定 对话框后,在这里输入您的记录文件设定名称,如图36-4所示,最后按一下 确定 。   图36-4 「新记录文件设定」对话框2. 出现新的记录档案后窗口就被命名了。在 一般 签页中,按一下 新增 。 新增计数器 对话框出现,选择您要记录的计数器,就像之前步骤3~5所描述的一样。 一般 签页也让您可以变更记录文件名称,并且指定效能数据多久检查一次。 3. 按一下 记录文件 页签,设定记录档案的附加属性。图36-5显示这些设定,该档案将在它的名称之后加入日期,并且设定成二位档案型态。   图36-5 新的记录档案窗口中的「记录文件」签页4. 按一下 排程 页签。这个签页中,您为记录文件指定一个开始和结束时间。您也可以选择开启一个新的记录文件,或者当目前记录文件关闭时执行指令。 5. 按一下 确定 关闭窗口,并将记录档案信息存盘。如果您选择立即开启记录,当您点选 确定 时,记录就会开始启动。这个记录档案的项目将显示在 效能 窗口,如图36-6所示。 您可以在有规律的基础上使用效能监视器来检查系统的状态。每日或每星期的监控是个好主意,这样您可以了解您的系统,以便于当异常的现象发生时,您能够识别这个现象的原因。将效能数据保存到记录档案以备稍后的检查,这也是建议的方法-记录档案中的数据总会派上用场,您可以比较系统更改前后的效能数据,确定这个更改是否是好的。您也可以使用这些记录文件来比较使用者和系统活动是如何从一种状态变更到另一种状态的。例如,您可能注意到,在本月的最近几天,使用者活动比其它时间要多。这样您将确保您的系统能够处理在这些尖峰值时的负载。

  图36-6 效能 窗口,显示一个新计数器记录的项目Enterprise Manager 除了自动的日常管理功能以外,Enterprise Manager 可以用来协助监控 SQL Server 过程与锁定。(请参阅 第 19 章 关于锁定的信息。)例如,您可以收集关于程序锁定和对象锁定的数据-在这些情况下,一个对象可以是数据表、数据库或暂存数据表。要检视这些信息,请按照下列步骤操作。1. 在 Enterprise Manager 窗口展开 SQL Server/SQL Server群组/管理资料夹/目前活动 ,如图36-7所示。 目前活动 数据夹包含三个数据夹: 处理器信息 、 锁定/处理序识别码 和 锁定/对象 。   图36-7 展开 Enterprise Manager 中的「目前活动」资料夹2. 按一下 处理器信息 来检视当前连接到 SQL Server 的使用者名称和他们的程序 ID;这些使用者程序状态(执行、睡眠、或是背景);他们连接了哪些数据库;他们执行了哪些指令和应用程序;等待时间(使用者花在等待可用资源的时间);CPU、实体 I/O、和每个程序的内存使用量;以及每个程序的封锁状态(程序封锁他人或是被他人封锁)。要看这些信息,必须将窗口滚动条往右移。图36-8显示了这些信息。 3. 按一下 锁定/处理序识别码 ,在右侧窗格中检视系统程序识别码(SPID)的清单,如图36-9所示。在右侧窗格的一个 SPID 上按二下,以显示 处理序详细信息 对话框,如图36-10所示。这个对话框显示了程序执行的最后一个 T-SQL 指令。   图36-8 Enterprise Manager 中的「处理器信息」

  图36-9 显示在「锁定/处理序识别码」窗格的 SPID

  图36-10 「处理序详细信息」对话框4. 展开 锁定/处理序识别码 数据夹,以检视当前锁定的 SPID,如图36-11所示。   图36-11 展开的「锁定/处理序识别码」数据夹5. 按一下左侧窗格中的一个 SPID 以检视该程序特定的锁定信息,如图36-11所示。这些信息包括锁定的类型、锁定的模式、锁定的状态和锁定的拥有者。锁定的类型包括下列之一: o  RID 数据列锁定  o  KEY 索引中的数据列锁定  o  PAG 数据或索引页锁定  o  EXT Extent锁定  o  TAB 数据表锁定,包含该数据表的所有数据和索引页  o  DB 数据库锁定  锁定模式可以是下列之一: o  S 共享锁定  o  X 独占锁定  o  U 更新锁定  o  BU 大量更新锁定  o  IS 意图(intent)共享  o  IX 意图独占  o  SIX 具有意图独占的共享  o  Sch-S 编译查询的结构描述(schema)锁定  o  Sch-M DDL 操作的结构描述锁定  锁定的状态可以是下列之一: o  GRANT 指锁定将被授予该程序  o  WAIT 表示该程序由其它程序封锁,并等待一个锁定  o  CNVT 表示锁定被转换成另一种锁定类型  6. 展开 锁定/对象 数据夹,检视具有锁定的对象的清单,如图36-12所示。可以被锁定的对象有数据表、暂存数据表、数据库等等。   图36-12 展开的「锁定/对象」数据夹7. 按一下被锁定的数据库或数据表名称,在右侧窗格中检视它的锁定信息,如图36-13所示。这些信息和在 锁定/处理序识别码 数据夹中点选 SPID 后出现的内容相同,只是观看的角度不一样而已。   图36-13 检视对象的锁定信息sp_who 预存程序 您也可以在 Query Analyzer 或 OSQL 提示中执行下面指令,来检视程序的信息:sp_who activeGO在 Query Analyzer 中执行这个指令的结果如图36-14。如果一个程序被锁定了,blk字段将显示正在锁定程序的SPID。当使用者抱怨交易太慢时,您可以执行这个指令来找出问题。很多时候您会发现大部份被封锁的程序是被另一个程序封锁的,一旦找出产生问题的程序所在,就能确定封锁这么久的原因。

  图36-14 执行 sp_who 的结果您应该经常监控锁定,以确定是否有些程序占有一个锁定的时间太长,以及是否程序经常被其它程序封锁(它们有 WAIT 状态)。但是通常使用者的抱怨多半由于封锁问题引起的响应时间太慢。如果封锁发生得太频繁或太长时间,您可能要确定哪个程序占有独占锁定或数据表锁定。这些锁定可能是导致封锁的原因,并监控程序执行的 SQL 陈述式。然后如果可能试着最佳化这些陈述式,使它们更快的释放锁定或避免占有数据表锁定。一般而言,一个程序用很多时间等待获得一个锁定时,该程序会使用更多的时间来完成。因此,减少锁定竞争可以提高交易响应时间。________________________________________相关信息 关于锁定的更多信息,请参阅< 在线丛书 >并索引 显示锁定 ,并选择在 找到的主题 对话框中的 显示锁定信息 。________________________________________一般效能瓶颈 您已经了解如何使用效能监视工具,如系统监视器、Enterprise Manager、Query Analyzer 和 Profiler,而您也准备要对付效能瓶颈了。在本节中,我们将看到一些很普通的效能瓶颈和不同的解决方案。这些瓶颈大部分是相互关联的,且一个瓶颈可能伪装成另一种瓶颈的形式。您必须寻找硬件和软件导致的瓶颈-很多效能问题发生于瓶颈的组合。可能导致瓶颈的硬件包括 CPU、内存和 I/O 子系统;可以导致瓶颈的软件包括 SQL Server 应用程序和 SQL 陈述式。下面章节我们将更详细地检验每种问题。CPU 一个普通的效能问题就是缺少马力。系统的处理能力取决于系统中 CPU 的数量、类型和速度。如果您没有足够的 CPU 能力,您可能无法快速的处理交易以令使用者满意。要使用系统监视器来确定 CPU 利用的百分率,请检查 Processor 对象中的 %Processor Time 计数器(选择多处理器系统中的所有 CPU)。如果您的 CPU 长时间执行在 75% 或更高的情况下(75% 是根据 第 6 章 设定的规则所要求的最大值),您更可能遇到 CPU 瓶颈。如果您看到了低于 60% 的稳定 CPU 使用率,您仍然可以透过在系统中增加更快的 CPU 或更多的 CPU 中获益。在决定升级您的 CPU 之前,确定监控了系统的其它特性。例如,如果您的 SQL陈述式效率很低,您可能执行了很多非必要的程序,而最佳化这些陈述式就可以帮助您降低 CPU 利用。或者假设 SQL Server 数据快取的快取命中比率低于 90%。您可能需要增加内存到数据快取中(也就是增加 max server memory 参数或增加系统的物理内存),这允许更多的数据存入快取和更少的实体磁盘 I/O 操作,导致了较低的 CPU 使用率。有时只增加处理器,您就可以获得更好的系统效能,特别是您从单处理器系统开始。然而,并不是所有应用程序都能适应多处理器系统的规模。SQL Server 本身的延展性很好,但并不是所有执行的 SQL 陈述式都需要延展性。一个程序一次只能在一个 CPU 上执行,而且对于单个 SQL 陈述式单个 CPU 已经足够了。为了效能的延展,您的 SQL Server 必须同时执行很多 SQL 陈述式-多个陈述式可以同时在不同 CPU 上执行,因此多个 CPU 能同时处理这些陈述式。一般而言,您可以透过使用更多和更快的 CPU 来提高效能。然而,在某些情况下,在增加更快的 CPU 之同时,您必须扩大内存和 I/O 容量,否则您可能只将这个瓶颈转移到另一个位置,甚至可能是新的 CPU。例如,如果您原来有一个 CPU 瓶颈,而您透过增加一个 CPU 解决了这个问题,但您可能会发现您的系统执行了更多的工作,因此导致了更多的磁盘 I/O,然后您会发现一个 I/O 瓶颈的发生。另外,确保检查您决定增加的 CPU 的快取大小。CPU 的快取越大,效能将越好,特别是在多处理器系统中。简单地说,如果您决定您需要更多的处理能力,您可以增加 CPU 或用更快的代替现有 CPU。例如,如果您的系统有两个 CPU,但是可以扩展为四个,那么可以增加两个同类型的 CPU,或替换四个全新更快的 CPU。如果您的系统已经具有了最大数量的 CPU,而您又需要更多的处理能力,那么就用更快的 CPU 来替换它们。例如,让我们假设您有四个 200 MHz 的 CPU。您可以用更快的 CPU 来替换它们,例如 500 MHz。更快的 CPU 将执行更快的完成程序。内存 内存是 SQL Server 效能最关键性的组件之一。由于内存和 I/O 子系统的关连性,因此它是非常重要的。例如,在 I/O 密集型系统中(执行大量 I/O 的系统),可以让 SQL Server 用来储存数据的内存越多,所必须执行的实体 I/O 越少。这是因为数据可以在数据快取中找到,而不是在磁盘中。SQL Server 具有一个复杂的快取系统,透过尽可能从内存中存取数据来提高系统效能,而不存取磁盘,因为存取磁盘将提供较低的效能。您可以从内存中存取的数据越多,您的系统效能越好,这是因为执行的实体 I/O 越少。内存存取要比实体磁盘存取快得多。在一些情况下,内存数量的不足可能导致明显的磁盘瓶颈。这是因为系统无法有效地进行快取将导致更多的实体磁盘 I/O 操作。要看 SQL Server 正在使用多少系统内存,就用系统监视器来检查 SQL Server:Memory Manager 物件中的 Total Server Memory (KB)计数器。如果 SQL Server 没有用到如您预期的内存大小,也许就要调整内存的参数设定(如本章稍后 <SQL Server组态设定> 一节所述。)。要确定您是否有足够的快取数量,请使用效能监视器来检查 SQL Server:Buffer Manager 物件中的 Buffer Cache Hit Ratio 计数器。通常的规则是您需要有 90% 或更高的快取命中比率。如果这个命中比率低于 90%,请增加更多的内存。注意,在一些情况下,您的系统无法达到 90% 的快取是由于应用程序的特性。这可能是因为相同的数据分页很少被重新使用,而系统又频繁地刷新快取中旧的数据分页以存入新的资料分页。________________________________________说明 SQL Server 2000 根据系统可用内存和内存参数设定,动态地为缓冲快取分配内存。一些外部资源(例如打印程序和其它的应用程序等)可能导致 SQL Server 释放大部分的内存来为其它程序使用。仔细监控系统内存,如果可能的话,请将 SQL Server 分隔在它自己的系统中。关于使用内存参数的详细说明,请参阅 第 30 章 以及本章后面的 < SQL Server组态设定 > 一节。________________________________________I/O 子系统 在 I/O 子系统中的瓶颈是数据库系统中最容易发生的硬件问题。它仅次于撰写拙劣的 SQL 陈述式,拙劣的 SQL 陈述式是最大的效能问题。幸运的是,I/O 子系统也是最容易解决的效能问题之一。在很多情况下,增加磁盘可以完全消除这个效能瓶颈。I/O 子系统问题来自于磁盘只能以特定速率工作的事实。例如,一个磁盘可能具有每秒85次 I/O 的处理能力。如果磁盘负荷过多,那么这些磁盘的 I/O 会产生队列,而 SQL Server 将遇到较长的 I/O 等待时间。这些较长的 I/O 等待时间可能导致过长时间的锁定占有,或执行绪在等待资源时处于空闲状态。最终结果将是整个系统的效能受损,进而导致愤怒的使用者抱怨他们的交易使用太长的时间。在大多数情况下,I/O 子系统效能问题的发生是因为 I/O 子系统没有正确的规划它所执行的负载。关于规划的主题在 第 5 章 和 第 6 章 中已详细讨论,但让我们在这里简单的回顾一下。大小的规划是必须的,因为单一磁盘每秒可以执行 I/O 次数受到限制。当交易记录文件执行多数循序性 I/O 时,就会像交易记录文件一样,磁盘可能达到每秒 150 次 I/O 而不会负载过量。另一方面,当数据文件执行随机性 I/O 时,就像数据文件一样,相同的磁盘可能只有每秒 85 次 I/O。如果系统需要执行更高的 I/O,那么等待时间将变得很长。要确定是否过度使用磁盘驱动器,请使用效能监视器对象 PhysicalDisk 和 LogicalDisk监控计数器(稍后将在本节中讨论)。计数器收集关于实体和逻辑磁盘 I/O 行为的数据,例如每秒磁盘中发生的读取和写入。您必须使用 Windows NT/2000 指令 DISKPERF 启动磁盘效能计数器。这些计数器在安装操作系统时可用,但您应该知道如何启动与关闭计数器。计数器在收集数据时会占用系统资源,如 CPU 的时间,因此您应该只在要监视系统 I/O 时使用它们。您可使用 Windows NT/2000 指令 DISKPERF 来启动或关闭计数器。要知道 DISKPERF 是否启动,请在命令提示字符下键入下列指令:diskperf如果 DISKPERF 已经启动,您将看到这个讯息:"本系统的实体磁盘效能计数器已设为启动"。如果 DISKPERF 没有开启,您将看到这个讯息:"本系统的逻辑和实体磁盘效能计数器现在设定为不启动。"要启动 DISKPERF,请在命令提示字符下键入下列指令:diskperf -Y要停用 DISKPERF,请执行该指令:diskperf -N在 DISKPERF 生效前,您必须重新启动计算机。键入下面指令来看更多的DISKPERF 选项:diskperf ?有特殊重要性的计数器是 Disk Writes/Sec、Disk Reads/Sec、Avg. Disk Queue Length、Avg. Disk Sec/Write和Avg. Disk Sec/Read。这些计数器可以帮助您确定磁盘子系统是否过度使用。PhysicalDisk 和 LogicalDisk 对象都提供这些计数器。如果要详细检视这些计数器提供的信息,当增加计数器时,请在 新增计数器 对话框中按一下 说明 。我们来看一个使用计数器的例子。假设您的系统有一个 I/O 瓶颈,您将检查PhysicalDisk 对象中的 Avg. Disk Sec/Transfer、Avg. Disk Sec/Read和Avg. Disk Sec/Write 计数器,因为它们监视磁盘需要执行读写的时间量,过长的等待时间表示您过度使用磁盘驱动器或磁盘阵列。一般的规则是这些计数器的正常读数在千分之 1 到 15 秒(0.001到0.015)之间,但是在尖峰时期可能达到千分之 20 秒(0.020)。如果您观察到高于千分之 20 秒的数值,您可能会遇到一个 I/O 子系统效能问题。同时也检查 Disk Writes/Sec 和 Disk Reads/Sec。让我们假定这些值计数器显示每个磁盘每秒 20 次写入和 20 次读取,总共 40 次 I/O,且容量为每秒 85 次 I/O。同时如果您的磁盘等待时间较长的话,磁盘驱动器就可能故障了。另一方面,如果磁盘执行每秒 100 次 I/O,且等待时间大约千分之 20 秒或更多,则您需要增加磁盘来提高效能。使用 RAID 数组时,如果您想确定您的系统正在执行的 I/O 有多少的话,就将在效能监视器中看到的每秒 I/O 次数除以数组中磁盘的总数量和 RAID 资源占用的因子。下表列出了使用 RAID 技术时产生读写的实体 I/O 次数。表36-1 每个RAID层级读写执行的实体I/O次数RAID层级  读取  写入0 1 11或10 1 25 1 4一般情况下,更正 I/O 子系统瓶颈的最佳途径是增加更多的磁盘。但是请记得考虑 I/O 瓶颈的其它可能原因,例如较低的快取命中速率以及执行交易的 I/O 太多。(在大多数情况下,快取命中速率低于 90% 就太低了。)如果您发现了一个 I/O 瓶颈,请回顾 第 6 章 中的说明,来确定您系统需要的磁盘数量。故障组件 有时您的系统可能遇到由故障组件引起的效能问题。如果故障组件没有完全失效而仅仅是效能降低,那这可能是一个很难排除的问题,因为问题的多样性和复杂性以及它的解决方案已经超出了本书的范围。但是这里有几个辨识故障组件问题的诀窍:•  比较磁盘和数组 当在效能监视器中检视统计资料时,比较相似的组件。如果您发现两个磁盘执行 I/O 的速率相同,却显示不同的等待时间,那么较慢的磁盘可能遇到了问题。  •  监控指示灯 网络集线器通常有碰撞指示灯。如果您注意到某个网络区段出现了异常的高碰撞,这时您可能有故障组件,也许是网络卡或是网络缆线。  •  了解您的系统 您花在系统上的时间越多,您越能了解系统的特性。当系统不正常运作时您就会发现。  •  使用效能监视器 这是一个监控系统行为的好方法。  •  阅读记录文件 养成常常检查 SQL Server 和 Windows2000 事件检视(Event Viewer)系统和应用程序记录的习惯。每天回顾这些记录文件可以在问题失控前发现问题。  应用程序 造成效能问题的另一个系统组件是 SQL Server 应用程序。这些问题可能发生在应用程序代码或在应用程序执行时的 SQL 陈述式中。本节提供一些提示和准则,用来解决和 SQL Server 应用程序有关的效能问题。最佳化执行计划 正如我们在 第 35 章 所看到的,选择一个最佳的执行计划和数据存取方法对于查询是很重要的。不幸的是,并没有一定的公式来确定最佳的计划。SQL Server 自动选择查询最佳化器的计算为最佳的执行计划。随着您熟悉联结操作的不同类型,您可能可以透过分析以确定最佳执行计划。通常您需要试过各种不同的计划后,才能找到最佳方法。使用索引 正如我们在 第 17 章 和 第 35 章 所看到的,正确索引的使用对于好的效能是十分重要的。使用索引来找出所需的数据,这只需要 10 到 20 个 I/O 操作,而透过数据表扫描找出所需的数据,则可能需要成千上万的 I/O 操作。不过必须谨慎地使用索引。记住,在使用 INSERT、UPDATE 或 DELETE 陈述式修改数据表的各种数据时,索引将自动更新,显示更改后的数据,因此会产生比平常更多的 I/O 操作。注意不要建立太多索引,否则用来维护这些索引的资源占用可能会影响数据修改的效能。使用预存程序 正如我们在 第 21 章 中所看到的,预存程序被用来在服务器上执行预先包装和预先编译的SQL陈述式。从应用程序呼叫预存程序对效能有所帮助,因为改善了服务器上 SQL 陈述式的可重复使用性,也减少了网络的流量。由于预存程序执行在服务器上,可以减少客户端和服务器之间传送的数据数量,您可以在预存程序中将程序程序化并将数据筛选处理,而不用在应用程序中执行这些动作。SQL Server 组态设定 SQL Server 2000 使用虚拟方式自行调整组态,但是有些调整参数仍然可以用来变更您的系统操作和执行的方式。在本节中,您将学到如何设定这些选项,以及它们如何影响到您系统的操作。在大多数情况下,是不需要更改这些参数的,但是了解它们是什么以及它们做什么使您有机会决定是否更改它们。您可以使用 Enterprise Manager 或 sp_configure 来设定。要使用 Enterprise Manager,请在您要设定的服务器名称上按右键并从快捷菜单中选择 内容 ,显示 SQL Server属性 窗口。这个窗口包含9个页签,每个页签都有您可以设定的选项。下面将说明这些页签以及它们的选项。当使用 sp_configure 设定这些选项时,某些选项是设定为进阶(advanced)的。(下面几节将说明哪些是进阶选项。)您必须将 show advanced options 选项设定为1(启用),这样才可以使用 sp_configure 来更改一个进阶选项。预设情况下该选项设定为0(禁用)。(当使用 Enterprise Manger 来设定进阶选项时,您不需要担心这个选项。)要设定 show advance options,请使用下面的陈述式:sp_configure "show advanced options", 1GO通常,要使用 sp_configure 设定某个选项,请使用下面的语法:sp configure "option name", valueaffinity mask 选项 affinity mask 选项是用来指定在多处理器环境中,SQL Server 执行绪可以在哪些CPU 上执行。默认值为0,指定由 Windows 2000 排程算法来决定执行绪关连性。非零值设定了一个 bitmap,用来定义可以执行 SQL Server 的 CPU。十进制数值1(或二进制位屏蔽值00000001)指明只使用CPU 1、2(或00000010)指明只使用CPU 2、3(或00000011)指明使用CPU 1和CPU 2,等等。这个选项是进阶选项,表示在使用 sp_configure 设定该选项时,必须设定 show advanced options 为1。它也可以用 Enterprise Manager 来设定。要这样做,请选择 SQL Server属性 窗口中的 处理器 页签,在 处理器控制 区域,选择您要 SQL Server 使用的 CPU 旁的复选框。按一下 套用 和 确定 来储存更改。您必须停止并重新启动 SQL Server,使该更改生效。在指定的 SQL Server 系统上,您必须设定 affinity mask 选项,允许 SQL Server使用所有的 CPU。在没有指定的 SQL Server 系统上(包括需要 CPU 时间的其它处理程序),您可能要试着设定 affinity mask,这样 SQL Server 才会留下一个 CPU 不用而用其余的 CPU。lightweight pooling 选项 lightweight pooling 选项用来设定 SQL Server 使用 lightweight 执行绪或细微模式(fibers)。使用细微模式可以减少内容切换(context switches),允许 SQL Server(而不使用 Windows NT 或 Windows 2000 的排程程序)掌控排程。如果您的应用程序在多处理器系统中执行,且您看到了大量的内容切换,您可能需要将 lightweight pooling 参数设定为1,这将启用 lightweight pooling,然后监控内容切换的数量,来核对它们是否已经减少了。默认值为 0,这样会禁用细微模式。lightweight pooling选项也是一个进阶选项,在使用sp_configure 设定该选项时,必须将show advanced options设定为1。它也可以用Enterprise Manager来设定。选择 SQL Server属性 窗口中的 处理器 页签,在 处理器控制 区域,选取 使用Windows NT Fibers 复选框来启用该选项,或者清除这个复选框来禁用该选项。按一下 套用 ,按一下 确定 ,然后停止并重新启动SQL Server以使该选项生效。max server memory选项 SQL Server 动态地分配内存。要指定 SQL Server 分配给缓冲集区的最大内存数(单位为MB),您可以设定 max server memory 选项。因为 SQL Server 需要一些时间来释放内存,所以如果您有其它的应用程序定期的需要内存,那么应该设定 max server memory,这样 SQL Server 就会为其它应用程序保留一部分内存。默认值为 2147483647,这表示 SQL Server 请求系统能尽量提供内存,而当其它应用程序需要内存和释放内存时,动态地分配和解除分配内存。建议在 SQL Server 系统中使用这个设定。如果您要更改这个设定,请计算您可以给 SQL Server 的最大内存数量,从全部的物理内存中减去 Windows 2000 需要的内存加上其它非 SQL Server 使用需要的内存。这是一个进阶选项,在使用 sp_configure 设定该选项时,show advanced options 必须被设定为1。要使用 Enterprise Manager 来设定该选项,在 SQL Server 属性 窗口中选择 内存 页签,并调整 最大值(MB) 滑动杆。接着按一下 动态设定SQL Server的内存 。这个选项的更改将立即生效,不需要停止并重新启动 SQL Server。(如果按一下 使用定量的内存 ,您就能设定内存的固定值。这可以限制 SQL Server 分配内存的量,而在内存分配到固定值后,不再释放内存。)min server memory 选项 min server memory 选项指定分配给 SQL Server 缓冲集区的最小内存数,单位为 MB。在 SQL Server 为其它应用程序保留过多内存的系统中,设定这个参数将很有用。例如,服务器当成数据库服务器的同时,还用作打印和档案服务,在这种环境中,SQL Server 可能释放太多的内存给这些其它的应用程序。这样会减慢使用者的响应时间。min server memory 的默认值为0,允许 SQL Server 动态的分配和解除分配内存。建议使用这个设定,但是如果您的服务器不只用作 SQL Server,可能就需要更改这些设定。这是一个进阶选项,在使用 sp_configure 设定该选项时,show advanced options 必须被设定为 1。您可以使用 Enterprise Manager 来设定该选项,请在 SQL Server 属性 窗口中选择 内存 页签,调整 最小值(MB) 滑动杆,并按一下 动态设定SQL Server的内存 。这个选项的更改将立即生效,不需要停止并重新启动 SQL Server。recovery interval选项 recovery interval 选项定义了系统在故障事件中回复的最大时间,单位为分钟。SQL Server 使用这个设定以及内建的算法,决定执行自动检查点的频率,这样回复工作将在指定的分钟数内完成。根据在系统中有多少工作发生,SQL Server 决定两次检查点之间应该有多久的间隔时间。如果有很多工作要执行,检查点执行的频率将比平常多。执行的工作越少,从失效回复的时间越少。另外,回复间隔越长,检查点间允许的间隔时间越长。透过减少检查点数量来增加回复间隔将提高效能(由于检查点导致大量的磁盘写入,这将使使用者交易时间慢几秒钟),但它也增加了回复 SQL Server 所需要的时间。默认值为 0,指定 SQL Server 确定间隔-大约1分钟的回复时间。增加 recovery interval 选项是有风险的。通常使用 5 到 15 分钟的值,但这完全取决于您在系统失效时是否能冒等待 5 到 15 分钟的风险来等待数据库的回复。一般说来,您可能要增加 recovery interval,以减少每个检查点的频率以及它们大量的写入,因此允许使用者在 I/O 子系统中更自由的执行他们的交易,而不会中断。这是一个进阶选项,在使用 sp_configure 设定该选项时,show advanced options 必须被设定为 1。要使用 Enterprise Manager 设定这个选项,请在 SQL Server 属性 窗口中选取 数据库设定 页签,并在 复原间隔(分钟) 文字方块中键入一个值。这个选项的更改将立即生效,不需要停止并重新启动 SQL Server。本章总结 在本章中,您学到了成为 DBA 将遇到的一般效能问题。您也看到如何使用系统监视器和 Enterprise Manger 来监控系统,并帮助定位效能瓶颈。另外您还学到了如何检测以及解决一般系统效能问题。本书让您学习如何管理 SQL Server 2000、何谓管理 SQL Server 2000 和为什么要管理 SQL Server 2000。您现在应该可以有效的管理和调整您的 SQL Server 系统了,并能够顺利有效地执行日常管理任务。我们希望您能够喜欢阅读这本书,就像我们在写作本书时获得乐趣一样。

《MS SQL Server 2000管理员手册》系列——35. 使用SQL Query Analyzer和SQL Profiler

35. 使用SQL Query Analyzer和SQL Profiler使用SQL Query Analyzer 使用SQL Profiler最佳化T-SQL陈述式本章总结本章我们将继续 第 21 章 中关于预存程序的说明。本章将学习如何利用 SQL Query Analyzer 和 SQL Profile 分析预存程序和其它陈述式。从分析中可以确定 T-SQL 陈述式是否有效率。一个有效的 SQL Server 查询会使用适当的操作次序和适当的索引,来减少过程的行列数并使 I/O 操作数达到最小。用 Query Analyzer 可以检视 SQL Server query optimizer 为 T-SQL 陈述式选择的执行计划。query optimizer 是用来为每个 T-SQL 陈述式找寻最佳执行计划的模块。query optimizer 分析每个 T-SQL 陈述式,考虑大量可能的执行计划,并根据所需要的资源和程序时间来计算每个计划的资源消耗。选择最不会消耗资源的计划。每个计划的资源消耗决定于系统收集关于数据的统计结果,但这些资料不一定是最新的。因为您可能比 query optimizer 更了解数据库和数据内容,所以能够决定比 query optimizer 更好的计划。使用 Query Analyzer 提供的信息,可以决定 query optimizer 提供给陈述式的计划是否有效率。如果确定它不够好,就试着修改 T-SQL 陈述式或用 SQL 提示将陈述式最佳化。本章将学习如何使用 Query Analyzer,以及如何最佳化 T-SQL 陈述式。使用 Profiler 可以分析 SQL Server 系统内部活动,以确定哪些 SQL 陈述式和预存程序的使用造成系统资源的负担。有了这项信息,就能先调整这些陈述式和预存程序。本章除了学习如何使用 Profiler 外,也将说明如何最有效地使用 Profiler 提供的信息。使用 SQL Query Analyzer Microsoft SQL Server 2000 提供的 Query Analyzer 工具,取代 Windows (ISQL/W)中的 Interactive SQL 成为 SQL 图形接口。然而您可能注意到 Query Analyzer 显示在任务管理员中的是 isqlw.exe。可以用 Query Analyzer 来处理 T-SQL 陈述式,并检视这些陈述式的结果。Query Analyzer 也可以被当作除错工具,用于评估 query optimizer 为 T-SQL query optimizer 陈述式所产生的执行计划。执行 T-SQL 陈述式 Query Analyzer 最基本的功能是执行 T-SQL 陈述式,并显示陈述式结果。依照下列步骤用 Query Analyzer 来执行 T-SQL 陈述式:1. 点选 开始 / 程序集 / Microsoft SQL Server / Query Analyzer ,会显示联机到SQL Server 对话框,如图35-1所示。利用这个对话框和 SQL Server 系统联机。   图35-1 联机到 SQL Server 对话框2. 在 SQL Server 文字方块中键入服务器名称。可以是本地服务器或远程服务器的名称。选一个想要连接的本地服务器,会显示如图35-1中的黑点。SQL Server 之下的复选框,可指定系统未运作时是否要开启服务器。在 联机使用 区域中选择用来联机 SQL Server 的验证方式。如果选择使用 Windows 的账户验证,就不必指定使用者名称或密码,因为 Windows 2000 的账号会被用于验证存取 SQL Server 上。如果选择使用 SQL Server 的账户验证,就必须指定 SQL Server 使用者名称和密码,才能存取 SQL Server。 3. 按一下 确定 ,联机到指定的 SQL Server 上,并启动 Query Analyzer。当Query Analyzer 窗口出现时,只能看到 Query 和巡览窗格,但是一旦开始传送 T-SQL 陈述式,窗口就会变更。最大化 Query 窗格会填满整个 Query Analyzer 窗口,如图35-2所示。在工具列的下拉式清单中选取所要执行查询的数据库。图35-2显示选择 master 数据库,本范例中会在下拉式清单中选取 Northwind 数据库。   图35-2 SQL Query Analyzer 窗口4. 选择数据库之后,在右边窗格中键入 T-SQL 陈述式,在这个范例中,请键入『SELECT * FROM customers』。现在有多个选项可用,可以按一下工具列上的 剖析查询 按钮(蓝色的查核记号)来检查 T-SQL 陈述式的语法,或者按一下 执行查询 按钮(朝右的绿色三角形)来执行陈述式。按 取消查询执行 按钮(正方形)可停止查询的执行。图35-3显示了对 Northwind 数据库的 customers 数据表的完整查询。 一旦传送了 T-SQL 陈述式,Query Analyzer 将建立一个窗格,让您可以垂直和水平的卷动来检视结果,如图35-3所示。Query Analyzer 还可以用来帮助您调整您的 T-SQL 陈述式,您将会在本章的 <最佳化T-SQL陈述式> 一节中看到。

  图35-3 完整的 Query Analyzer 查询检视执行计划和修改 T-SQL 陈述式 Query Analyzer 也可以用来检视执行计划,这个执行计划是 Query Optimizer 为您的 T-SQL 陈述式所做的选择。这个特性可帮助您判断 T-SQL 陈述式是否有效率,并确定应该选择哪条执行路径和数据存取路径。然后您可以修改 T-SQL 陈述式和数据库架构,检查效能是否得以提高。要使用 Query Analyzer 来检视 T-SQL 陈述式的评估执行计划,请按照下列步骤操作:1. 在 Query Analyzer 窗口键入需要 Query Analyzer 评估的 T-SQL 陈述式后,按下 显示评估的执行计划 按钮(这个按钮在数据库选择下拉式清单的右边),或者按Ctrl+L,显示 评估的执行计划 窗格,如图35-4。在这个窗格中,查询透过图形来描述,每个操作的消耗与资料存取的方法都在此显示。在图35-4的窗格中,出现索引名称 Customers.PK_Customers,表示丛集索引 Customers.Pk_Customers 被用来存取资料。   图35-4 评估的执行计划窗格2.  评估的执行计划 窗格中还提供其它附加数据。要检视操作的附加数据,请将鼠标光标移动到操作图标上。就会出现一个弹出窗口,其中包含附加数据,如图35-5所示。   图35-5 检视关于操作的附加数据这个弹出窗口包含下列信息: o  实体作业 查询所执行的操作,例如索引扫描、联结和总计等等。如果实体操作被显示为红色,那是 Query Optimizer 发出的警告,这时您应该固定 T-SQL 陈述式。  o  估计的数据列记数 预估由操作检索的列数。  o  估计的数据列大小 需要检索的列的估计大小。  o  估计的I/O耗用/估计的CPU耗用 由该操作占用的估计 I/O 资源和 CPU时间。越低的值意味着该 T-SQL 陈述式越有效率。  o  估计的执行数 该操作在 T-SQL 陈述式中执行的次数。  o  估计的耗用 由 Query Optimizer 决定的操作消耗。这个消耗显示为T-SQL 陈述式的总消耗百分数。  o  估计的子树耗用时间 执行前面部分和这一部分 T-SQL 陈述式的消耗。如果存在多个子树,这个选项允许您检视执行每个子树的消耗。  o  自变量 T-SQL陈述式使用的自变量。  ________________________________________说明 执行计划(execution plan)描述了 Query Optimizer 如何选择执行 T-SQL 陈述式,并包括步骤的次序和所使用的操作类型。数据存取方法(Data Access Method)是描述数据库对象(数据表、索引等)如何被存取的一种对象。这两者是相关联的,因为在有些时候,数据存取方法被考虑为执行计划的一部分。当然也可以单独的考虑。________________________________________接下来将看到使用 Query Analyzer 较为复杂的范例。范例显示低效率的 T-SQL陈述式对效能的影响:减慢响应时间,并占用其它程序的系统资源。现在先看一个使用 Query Analyzer 检视和修改 T-SQL 陈述式执行计划的范例。修改 T-SQL 陈述式能达到较好的效能。在许多情况下,可以建立更有效、功能更佳的 T-SQL 陈述式。接下来会说明几种 T-SQL 陈述式,它们属于较复杂的预估执行计划类型。这些范例使用 Northwind 数据库中的 Orders 数据表。现在来检视这个数据表的组织。这个信息会帮助确定 Query Optimizer 是否选择了适当的执行计划。Orders 数据表在 OrderID 一栏中有一个名为 PK_Orders 的丛集索引,另外还有八个其它的索引,如图35-6中的 Manage Indexes 对话框所示。(要存取这个对话框,请在 Enterprise Manager中,展开一个服务器组,展开一个服务器,展开 数据库 数据夹,展开 Northwind 数据库,然后选取 数据表 数据夹。在右侧窗格中的 Orders 数据表上按鼠标右钮,并从快捷菜单中选择 所有工作 ,接着选择 管理索引 。或者只要从 Query Analyzer 工具 菜单中直接选择 管理索引 ,接着从下拉式菜单中选择 Orders 数据表。)

  图35-6 管理索引对话框检视计划和修改 SELECT 陈述式 本节中,这个查询的范例要求获得关于订单的信息,这些订单是由职员 ID 为 4的职员储存的。请在 Qery Analyzer 输入以下查询,并执行 显示评估的执行计划 :SELECT OrderID, CustomerID, EmployeeID, OrderDateFROM ordersWHERE EmployeeID = 4在该职员的组织中,每个职员处理订单的一小部分,因此可能需要 SQL Server在进行查询时使用 EmployeeID索引。但是,Query Analyzer 显示的却是 SQL Server 使用的存取方法是 PK_Orders 丛集索引,如图35-7中的 评估的执行计划 窗格所示。

  图35-7 评估的执行计划窗格显示了使用 PK_Orders 丛集索引。要 Query Optimizer 使用 EmployeeID 索引,可以使用 SELECT 陈述式的提示(hint),程序代码如下(提示将在本章的 <使用提示> 一节中讨论。):SELECT OrderID, CustomerID, EmployeeID, OrderDateFROM orders WITH (INDEX ( EmployeeID))WHERE EmployeeID = 4________________________________________说明 在 SQL Server 7 中,较好用的索引提示是 INDEX=index_name。在 SQL Server 2000 中,较好用的索引提示是 INDEX(index_name)。________________________________________透过这个信息,可以指示 Query Optimizer 使用所需要的执行计划,而不是 Query Optimizer 选择的计划。调整过的评估执行计划窗格如图35-8所示。可以从显示的数据存取方法中看到,使用的是 EmployeeID 索引,然后传回一个书签搜寻(bookmark lookup),该查询将获得来自数据库的数据。(书签搜寻搜索一列数据的内部识别码。)

  图35-8 调整过后的评估执行的计划窗格Query Optimizer 是一个有效率的工具,以不断的更新统计数据,提供选择最佳的执行计划。由于不同的公司行号可能更清楚自己的组织和数据,所以某些情况下,公司可以选择比 Query Optimizer 更有效率的最佳执行计划。________________________________________注意 使用提示代替 Query Optimizer 的选择时,必须承担变更可能带来的风险。虽然数据遗失或损毁的机率不大,不过可能对系统的执行效能产生的是负面的影响。________________________________________检视联结操作 执行联结操作比执行选取操作多出了更过的执行过程,稍后会在评估执行的计划窗格中看到。联结操作会对数个数据表进行存取的动作,并在存取后组合所搜寻的数据。(联结在 第 14 章 中讨论)。请在 Query Analyzer 输入以下的联结操作范例:SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,      LastName, OrderDateFROM Orders Join Employees ON Orders.EmployeeID = Employees.EmployeeID之前的陈述式包括 SQL-92 JOIN 操作元。建议使用此操作元在 SQL Server 2000中执行连结。下面的陈述式使用较传统的连结语法:SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,      LastName, OrderDateFROM Orders, EmployeesWHERE Orders.EmployeeID = Employees.EmployeeIDT-SQL 陈述式在 EmployeeID 资料行中联结了 Orders 和 Employees 资料表。评估执行计划结果如图35-9所示。

  图35-9 显示在评估执行的计划窗格的联结操作在窗格中可以看到两个子树中哪个的消耗较大,也可以看到规划联结操作的类型。SQL Server 支持多种不同的联结操作,包括杂凑联结(hash join)、巢状循环联结(nested loops join)和合并联结(merge join)。复杂的联结操作,执行计划会相对的变得复杂。由于您的目的是要减少占用 CPU 时间总量,以及减少执行 I/O 操作的数目,所以必须判断是否使用了好的执行计划。有时可以使用提示来指定需要使用的特殊索引,从而减少 CPU 和 I/O 行为。在这个查询中,由于联结是指定在 WHERE 子句中的唯一操作,这个执行计划应该是最适合的。检视总计操作 下面显示的 T-SQL 陈述式执行连结操作和总计操作,请在 Query Analyzer 中输入:SET QUOTED_IDENTIFIER ONGO SELECT CustomerID, SUM("Order Details".UnitPrice)FROM Orders JOIN "Order Details" ON Orders.OrderID = "Order Details".OrderIDGROUP BY CustomerID________________________________________说明 因为数据表名称 Order Details 包含了一个关键词和一个空格,所以必须使用选项 SET QUOTED_IDENTIFIER ON。要获得更多关于这个选项的信息,请参阅《在线丛书》索引中的 SET QUOTED_IDENTIFIER。________________________________________这个复合操作的评估执行的计划窗格显示在图35-10。

  图35-10 显示在评估执行的计划窗格中的总计操作检视预存程序 要显示预存程序的执行计划,可以简单的在 Query Analyzer 中呼叫预存程序。Query Analyzer 会显示所呼叫预存程序的评估执行计划,如图35-11所示的 sp_who。(需要注意的是,预存程序的执行计划相当复杂)。即使不确定组成预存程序的 T-SQL 陈述式,也可以显示该预存程序的执行计划。

  图35-11 在评估执行的计划窗格中的预存程序使用对象浏览器 对象浏览器(Object Browser)包含在 SQL Server 2000 中,用来提升 Query Analyzer 的功能。启动 Query Analyzer 时,会在左边窗口看到 对象浏览器 。 对象浏览器 分成数据库对象区和通用对象区两部份。在数据库对象区,可以浏览像数据表和检视表等对象;在通用对象区,可以存取系统对象和菜单。可以利用 物件浏览器 找出所提供的信息后,然后决定用的信息。数据库对象  对象浏览 顶端部份含有数据库对象,可以立即看到预设数据库以及所建立的数据库,并显示所属的 SQL Server。想要知道在 对象浏览 之中有哪些可用信息,只要展开对象即可。先展开 Northwind 数据库,然后展开 使用者数据表 。现在可看到 Northwind 数据库中可用的数据表,如图35-12所示。

  图35-12 检视对象浏览中的数据表接着展开一个使用者定义数据表,然后展开包含关于字段、索引、条件约束、资源依存性、触发程序信息的数据夹。图35-13显示展开的 Orders 数据表。或者可以展开数据夹,检视关于系统数据表、检视表、预存程序、功能和使用者定义数据类型的信息。在 Query Analyzer 中提供对象信息,是相当方便的,这样在建立 SQL 陈述式和预存程序时,就不需要再检查 Query Analyzer 以外的对象信息。不但可以在 对象浏览 中检视信息,还可以编辑对象、拖曳对象,甚至可以建立指令码和修改对象,将功能加在一个已经很实用的工具中。

  图35-13 展开在对象浏览中的数据表通用对象 在 对象浏览 较下面的部份是名为通用对象(Common Objects)的数据夹,这个数据夹中包含了如设定功能、光标功能、日期和时间功能以及数学功能等对象信息的数据夹。因此您可以很快地存取一个要使用的功能而不须查询语法。在这个区域展开数据夹的话,将显示设定选项,如图35-14所示。将这些功能拖曳到 Query 窗格中,或者用鼠标点选这个功能以显示一个简要描述。这对于 ad-hoc 查询过程是相当方便的。

  图35-14 在对象浏览的通用对象中展开一个数据夹除了存取全域变量之外,您还可以存取很多其它有用的快捷菜单,如数学和字符串功能。继续展开对象,您可以用这些菜单得到参数要求的信息。例如,图35-15显示展开 数学函数 中的 参数 数据夹。

  图35-15 检视对象浏览中的参数数据夹使用SQL Profiler 除了 Query Analyzer 以外,SQL Profiler 工具也可以帮助找出低效率的 T-SQL陈述式。Profiler 可以显示所有系统中执行的 T-SQL 陈述式,并用图形加以显示。您也可以使用多种排序和筛选选项,找出使用了最多 CPU 和 I/O 资源的 T-SQL 陈述式。有了这些信息就可以确定在调整系统时需要集中焦点在哪些 T-SQL 陈述式上。对于透过应用程序呼叫的 T-SQL 陈述式,可以检视 T-SQL 陈述式,并决定利用存取应用程序来源程序代码时的效率如何。SQL Server 2000 中的 Profiler 工具类似 SQL Server 7 中的 Profiler 工具,当然有些加强的功能。其中一项新功能是引用追踪模板,用来建立追踪档案。(在确定能够使用这个功能追踪 SQL Server 之后,追踪才能建立)。在 SQL Server 7 中,追踪功能只能以手动建立。要呼叫 Profiler 工具并执行追踪,请遵循下列步骤:1. 按一下 开始 / 程序集 / Microsoft SQL Server / Profiles 。在 Profiler 刚出现时,会看到一个空的 Profiler 窗口。在 Profiler 中如果没有打开任何窗格,就不会剖析任何陈述式。 2.&nb

标签: s8n电力连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台