收 藏 投 稿 繁 体 RSS 
站长吧-中国站长学习与交流的网站
首 页 运 营 学 院 建 站 论 坛
Web master8.net  
 网站运营  
  欢迎在本站发布信息,在线投递稿件请点这里。编辑QQ:4908220,欢迎联系交流。
业界动态 创业故事 推广研究 策划盈利 电子商务 企业平台
  站长工具
SEO查询 Whois查询 Pr查询 域名查询 IP查询 网页编辑器
 建站服务  
  如有建站意向,请尽快联系我们,以便安排时间... 建站服务 QQ4908220 QQ:4908220
作品展示 服务范围 服务流程 服务报价 联系方式 付款方式
文章正文  » 您的当前位置: 首页 >> 学院 >> 数据库 >> MySQL
使用SQL Query Analyzer和SQL Profiler
  来源:互联网 | 时间:2006-04-14 | 浏览:   相关评论 | 报告错误 | 发布文章
【字号: | | 】 【背景色 杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)
使用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, OrderDate
FROM orders
WHERE 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, OrderDate
FROM 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, OrderDate
FROM Orders Join Employees ON Orders.EmployeeID = Employees.
EmployeeID
之前的陈述式包括 SQL-92 JOIN 操作元。建议使用此操作元在 SQL Server 2000中执行连结。下面的陈述式使用较传统的连结语法:
SELECT OrderID, CustomerID, Employees.EmployeeID, FirstName,
     LastName, OrderDate
FROM Orders, Employees
WHERE Orders.EmployeeID = Employees.EmployeeID
T-SQL 陈述式在 EmployeeID 资料行中联结了 Orders 和 Employees 资料表。评估执行计划结果如图35-9所示。

 
 
图35-9 显示在评估执行的计划窗格的联结操作
在窗格中可以看到两个子树中哪个的消耗较大,也可以看到规划联结操作的类型。SQL Server 支持多种不同的联结操作,包括杂凑联结(hash join)、巢状循环联结(nested loops join)和合并联结(merge join)。复杂的联结操作,执行计划会相对的变得复杂。由于您的目的是要减少占用 CPU 时间总量,以及减少执行 I/O 操作的数目,所以必须判断是否使用了好的执行计划。有时可以使用提示来指定需要使用的

分页 [1] [2] [3]
lrth
  • 上一篇:浅谈在网页上显示日期的两种方法
  • 下一篇:Skype出台海外赔偿方案

  • 我要投稿  打印本文  推荐本文  加入收藏  返回顶部  关闭窗口
    搜模板(www.somoban.com) 原创网站模板交易平台
    阿里妈妈再掀疯狂采购风,网站广告位严重告急,急召天下站长
    基于PHP+MySQL的整站、模块、插件开发等或者按需求实现相应功能;
基于各PHP主流建站系统CMS,BBS,BLOG等的模板定制,完全手写代码;
整站数据迁移或备份恢复;网页代码优化、重构;整站常规SEO优化;网站技术支持;
点击了解详情...
    站长论坛
    • 验证码: