热门标签 | 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注意:
如果跟踪文件中存在的登录不再出现在系统中,则数据库引擎优化顾问将忽略该登录,并在默认情况下使用当前正在执行优化过程的登录。如果出现这种情况,则系统将在数据库引擎优化顾问的优化日志中写入一条消息。

优化时间限制

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


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文讨论了在使用sp_msforeachdb执行动态SQL命令时,当发生错误时如何捕获数据库名称。提供了两种解决方案,并介绍了如何正确使用'?'来显示数据库名称。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
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社区 版权所有