热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer2008数据库引擎优化顾问与索引优化向导之间的差别

除了可以处理MicrosoftSQLServer的新数据库功能以外,数据库引擎优化顾问在具体操作方面也不同于MicrosoftSQLServer2000索引优化向导。尽管这两个工具

除了可以处理 Microsoft SQL Server 的新数据库功能以外,数据库引擎优化顾问在具体操作方面也不同于 Microsoft SQL Server 2000 索引优化向导。尽管这两个工具都提供了图形用户界面 (GUI) 和命令提示符界面,但熟悉索引优化向导的用户应注意以下更改。

有关数据库引擎优化顾问的新功能的完整列表,请参阅数据库引擎优化顾问功能。
优化数据库所需的权限

在 SQL Server 2000 中,只有 sysadmin 固定服务器角色的成员可以使用索引优化向导来优化数据库。在 SQL Server 中,通过使用数据库引擎优化顾问,sysadmin 角色的成员仍可以优化数据库,但目前 db_owner 固定数据库角色的成员同样可以优化自己所拥有的数据库。
ms173448.note(zh-cn,SQL.100).gif注意:
首次使用时,必须由具有系统管理员权限的用户启动数据库引擎优化顾问以初始化应用程序。初始化后,sysadmin 固定服务器角色的成员和 db_owner 固定数据库角色的成员都可以使用数据库引擎优化顾问来优化数据库。但请注意,db_owner 角色成员只可以优化自己所拥有的数据库。有关详细信息,请参阅初始化数据库引擎优化顾问。

工作负荷上下文

索引优化向导使用选定要优化的数据库来评估工作负荷中的每条语句,而不管该语句最初是否是在该数据库的上下文中执行的。索引优化向导在一个优化会话中只能优化一个数据库。数据库引擎优化顾问可以在一个优化会话期间优化多个数据库。数据库引擎优化顾问使用脚本中的信息确定语句运行所在的数据库,并针对该数据库评估此语句。选定要优化的数据库不会影响评估语句的方式。

例如:

* AdventureWorks 数据库包含一个 Person.Contact 表,该表中包含 FirstName 和 LastName 列。
* 工作负荷 TuneQuery.sql 包含以下查询:

SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = "Abercrombie";
GO

* 在默认情况下,User1 连接到 MyDB 数据库。

在 SQL Server 2000 中,User1 从命令行发出以下命令,或使用索引优化向导 GUI 执行类似的步骤:

Itwiz -D AdventureWorks -I TuneQuery.sql –o rec.sql –U –P

此方法有效,因为 TuneQuery.sql 中的每条语句均针对 AdventureWorks 数据库(因为命令行 -D AventureWorks 中指定了它)进行了分析。TuneQuery.sql 在 AdventureWorks 数据库中有效,优化继续进行,并且未出现任何问题。

使用数据库引擎优化顾问时,命令行语法为:

dta -s Session1 –D AdventureWorks –if TuneQuery.sql –of rec.sql –U username –P password

由于默认情况下,User1 连接到 MyDB 数据库,因此系统将数据库上下文设置为 MyDB。然后,对 MyDB 数据库而不是对 AdventureWorks 分析 Transact-SQL 语句。该语句在 MyDB 中无效,因此被忽略。

为什么会出现这种情况?如果 User1 在未指定目标数据库的情况下使用 sqlcmd 或 SQL Server Management Studio 来执行 TuneQuery.sql,则 TuneQuery.sql 将针对 MyDB 执行分析,这将导致分析失败。数据库引擎优化顾问的操作与此类似。

应执行什么操作?采用以下方法将 USE 语句添加到脚本 TuneQuery.sql 中:

USE AdventureWorks;
GO
SELECT FirstName, LastName
FROM Person.Contact
WHERE LastName = "Abercrombie";
GO

数据库引擎优化顾问首先查看语句 USE AdventureWorks 并使用该信息将当前数据库设置为 AdventureWorks。然后,数据库引擎优化顾问在查看语句 SELECT FirstName, LastName FROM Person.Contact WHERE LastName = "Abercrombie" 时将针对 AdventureWorks 分析该语句(因为当前数据库上下文为 AdventureWorks)。这样,数据库引擎优化顾问就可以成功优化数据库。请注意,如果使用 sqlcmd 或 SQL Server Management Studio 执行以上脚本,则系统将针对 AdventureWorks 执行该语句,这是因为第一个 USE 语句将数据库上下文从 MyDB 更改为 AdventureWorks。

USE 语句可用于指定要对其执行语句的数据库。通常情况下,如果每条语句都使用完全限定的表名,则没有必要进行该操作。

由于数据库引擎优化顾问尝试查找每条语句运行所针对的相应数据库(以模拟执行环境),因此以下信息对于了解数据库引擎优化顾问如何处理不同类型的输入很重要。
SQL 文件/内联工作负荷

正如在前面部分中提到的,数据库引擎优化顾问使用 USE 语句(位于 Transact-SQL 查询之前)标识对其执行查询的数据库。数据库引擎优化顾问从 Transact-SQL 脚本文件中的第一条语句开始查看输入。它首先假设当前数据库是默认数据库。由于存在 USE 语句,因此会更改当前数据库的上下文(这些语句是针对当前数据库进行分析的)。
跟踪文件和跟踪表

数据库引擎优化顾问在分析跟踪文件时模仿 SQL Server Profiler的重播。它按照列出的顺序使用跟踪文件中的下列信息:

* 如果跟踪文件包含填充了 DatabaseName 列的事件,则数据库引擎优化顾问将使用该列查找对其执行该事件的数据库。
* 如果跟踪文件填充了 DatabaseID 列,则数据库引擎优化顾问将使用该列查找对其执行该事件的数据库。它将查询系统目录以找到与 DatabaseID 相对应的数据库名称。

ms173448.note(zh-cn,SQL.100).gif注意:
如果在收集跟踪文件后分离、附加、删除或创建了数据库,则 DatabaseID 和 DatabaseName 映射可能不会保持与创建跟踪文件时相同的状态。数据库引擎优化顾问无法确定此信息。如果出现这种情况,则应从跟踪文件中完全删除 DatabaseID,以防止数据库引擎优化顾问优化错误的数据库。

* 如果跟踪文件中不存在 DatabaseName 或 DatabaseID 列,则数据库引擎优化顾问确定要用于每条语句的数据库的方式与确定要用于跟踪文件中的每个 SPID 列的 Transact-SQL 脚本的方式相同。如果不存在 SPID 列,则将以与确定 Transact-SQL 脚本完全相同的方式确定数据库。

数据库引擎优化顾问在分析每条语句的过程中还使用登录信息(如同在 SQL Server Profiler 重播中)。服务器上的默认数据库随跟踪文件中显示的 LoginName 列值的改变而改变。
ms173448.note(zh-cn,SQL.100).gif注意:
如果跟踪文件中存在的登录不再出现在系统中,则数据库引擎优化顾问将忽略该登录,并在默认情况下使用当前正在执行优化过程的登录。如果出现这种情况,则系统将在数据库引擎优化顾问的优化日志中写入一条消息。

优化时间限制

使用数据库引擎优化顾问可指定优化时间,或指定无限制的优化时间。索引优化向导尚未提供此功能。有关详细信息,请参阅限制优化的持续时间和事件。


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
author-avatar
rge4688618
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有