监控 DB2 活动之使用解释工具分析SQL(2)_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

监控 DB2 活动之使用解释工具分析SQL(2)

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:SQL数据库
黑客防线网安网讯:  收集解释数据  解释工具由多个单独的工具组成,而并非所有的工具需要的都是相同类型的解释数据。因此,可收集两种不同类型的解释数据:  全面解释数据(Comprehensive explain data)...

  收集解释数据

  解释工具由多个单独的工具组成而并非所有的工具需要的都是相同类型的解释数据因此可收集两种不同类型的解释数据:

  全面解释数据(Comprehensive explain data)包含关于一条 SQL 语句的访问计划的详细信息。此信息跨多个不同的解释表存储。
  解释快照数据(Explain snapshot data)。包含一条 SQL 语句的当前内部表示以及所有相关信息。此信息存储在 EXPLAIN_STATEMENT 解释表的 SNAPSHOT 列中。
  您或许已经想到,有多种收集这两种解释数据的方法。收集解释数据的可行方法包括:

  执行 EXPLAIN SQL 语句
  设置 CURRENT EXPLAIN MODE 特殊寄存器
  设置 CURRENT EXPLAIN SNAPSHOT 特殊寄存器
  在 PRECOMPILE 或 BIND 命令中使用 EXPLAIN 绑定选项
  在 PRECOMPILE 或 BIND 命令中使用 EXPLSNAP 绑定选项
  EXPLAIN SQL 语句

  为单独一条动态 SQL 语句收集全面解释信息和解释快照数据的方法之一就是执行 EXPLAIN SQL 语句。该语句的基本语法是:

  EXPLAIN [ALL | PLAN | PLAN SELECTION]
  <FOR SNAPSHOT | WITH SNAPSHOT>
  FOR [SQLStatement]

  其中,SQLStatement 表示要为其收集解释数据和/或解释快照数据的 SQL 语句。(指定的语句必须是一条有效的 INSERT、UPDATE、DELETE、SELECT、SELECT INTO、VALUES 或 VALUES INTO SQL 语句。)

  若在 EXPLAIN 语句中指定了 FOR SNAPSHOT 选项,则仅为指定动态 SQL 语句收集解释快照信息。另一方面,若指定的是 WITH SNAPSHOT 选项,则指定动态 SQL 语句的全面解释信息和解释快照数据均会被收集。但若未使用任一选项,则仅收集全面解释数据,而不会产生任何解释快照数据。

  要为 SQL 语句 SELECT * FROM DEPARTMENT 收集全面解释数据和解释快照信息,可像下面这样执行 EXPLAIN 语句:

  EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENT

  另一方面,如果希望仅为这条 SQL 语句收集解释快照数据,可像下面这样执行 EXPLAIN 语句:

  EXPLAIN ALL FOR SNAPSHOT FOR SELECT * FROM DEPARTMENT

  最后,如果仅要为 SQL 语句 SELECT * FROM DEPARTMENT 收集全面解释数据,像下面这样执行 EXPLAIN 语句:

  EXPLAIN ALL FOR SELECT * FROM DEPARTMENT

  务必注意,EXPLAIN 语句未执行指定 SQL 语句,也未显示所收集的解释信息。要查看收集到的信息,必须使用其他解释工具(下文中将介绍这样的工具)。

  CURRENT EXPLAIN MODE 和 CURRENT EXPLAIN SNAPSHOT 特殊寄存器

  在您希望为单独一条动态 SQL 语句收集解释和/或解释快照信息时,EXPLAIN SQL 语句非常有用,尽管如此,若有大量 SQL 语句需要分析,使用这种方法将极为耗时。要为多条动态 SQL 语句收集相同的信息,一种更好的方法就是在执行一组动态 SQL 语句之前,设置所提供的一种或两种特殊解释工具寄存器。随后,语句准备好执行时,即可为所处理的各条语句收集解释和/或解释快照信息。(但在解释和/或解释快照信息收集完毕后,语句本身可能执行,也可能不会执行。)

  以这种方式使用的两个解释工具特殊寄存器就是 CURRENT EXPLAIN MODE 特殊寄存器和 CURRENT EXPLAIN SNAPSHOT 特殊寄存器。CURRENT EXPLAIN MODE 特殊寄存器是使用 SET CURRENT EXPLAIN MODE SQL 语句设置的,CURRENT EXPLAIN SNAPSHOT 特殊寄存器是使用 SET CURRENT EXPLAIN SNAPSHOT SQL 语句设置的。SET CURRENT EXPLAIN MODE SQL 语句的基本语法是:

  SET CURRENT EXPLAIN MODE <=>
  [NO |
  YES |
  EXPLAIN |
  REOPT |
  RECOMMEND INDEXES |
  EVALUATE INDEXES |
  RECOMMEND PARTITIONINGS |
  EVALUATE PARTITIONINGS]

  SET CURRENT EXPLAIN SNAPSHOT SQL 语句的基本语法是:

  SET CURRENT EXPLAIN SNAPSHOT <=> [YES | NO | EXPLAIN | REOPT]

  可想而知,若 CURRENT EXPLAIN MODE 和 CURRENT EXPLAIN SNAPSHOT 特殊寄存器均设置为 NO,解释工具即被禁用,不会捕获任何解释数据。另一方面,若任一特殊寄存器被设置为 EXPLAIN,则相应的解释工具即被激活,每当一条动态 SQL 语句准备好执行时,就会为其收集全面解释信息或解释快照数据(若两个特殊寄存器均这样设置,则同时收集这两种信息)。但语句本身并不执行。若任一特殊寄存器被设置为 YES,行为与任一寄存器设置为 EXPLAIN 时基本相同,但存在一个重要的差异:为其收集解释信息的动态 SQL 语句会在适当的解释/解释快照数据收集完备后立即执行。

  若 CURRENT EXPLAIN MODE 或 CURRENT EXPLAIN SNAPSHOT 特殊寄存器被设置为 REOPT,解释工具将被激活,只要一条静态或动态 SQL 语句在执行时的语句再优化过程中得到处理 —— 也就是说,在该语句中所用的主变量、特殊寄存器或参数标记的实际值可用时,解释信息或解释快照数据(若两个特殊寄存器均按此设置,则同时收集这两种信息)就会被捕获。

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-10656-1.html
网站维护教程更新时间:2012-03-21 03:07:51  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer