专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » 数据库引擎优化顾问:SQL Server 2008数据库引擎优化顾问和索引优 »正文

数据库引擎优化顾问:SQL Server 2008数据库引擎优化顾问和索引优

来源: 发布时间:星期日, 2009年2月8日 浏览:52次 评论:0
="t18">除了可以处理 Microsoft SQL Server 新数据库功能以外数据库引擎优化顾问在具体操作方面也区别于 Microsoft SQL Server 2000 索引优化向导尽管这两个工具都提供了图形用户界面 (GUI) 和命令提示符界面但熟悉索引优化向导用户应注意以下更改

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

在 SQL Server 2000 中只有 sysadmin 固定服务器角色成员可以使用索引优化向导来优化数据库在 SQL Server 中通过使用数据库引擎优化顾问sysadmin 角色成员仍可以优化数据库但目前 db_owner 固定数据库角色成员同样可以优化自己所拥有数据库
ms173448.note(zh-cn,SQL.100).g注意:
首次使用时必须由具有系统管理员权限用户启动数据库引擎优化顾问以化应用化后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 <username> –P <password>

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

使用数据库引擎优化顾问时命令行语法为:
复制代码

dta -s Session1 –D AdventureWorks – 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 <database> 语句添加到脚本 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 <database> 语句将数据库上下文从 MyDB 更改为 AdventureWorks

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

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

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

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

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

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

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

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

优化时间限制

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

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: