您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

SQLScript 计划分析器

SQLScript 计划分析器是一种新的性能分析工具,主要用于存储过程和函数。启用 SQLScript 计划分析器后,将为每个调用语句生成一个表格结果。结果表包含开始时间、结束时间、CPU 时间、等待时间、线程标识以及每个预定义操作的一些附加详细信息。预定义操作可以是分析存储过程和函数的引擎性能所考虑的任何事情,包括编译和执行时间。表格结果显示在 HANA 的新监控视图 M_SQLSCRIPT_PLAN_PROFILER_RESULTS 中。 备注当前,仅支持存储过程。

启动分析器

有两种方法可以启动剖析器和检查结果。

ALTER SYSTEM

可将 ALTER SYSTEM 命令与以下语法结合使用: 代码语法ALTER SYSTEM SQLSCRIPT PLAN PROFILER [] := START | STOP | CLEAR := FOR SESSION | FOR PROCEDURE  备注无法按会话 ID 和过程名进行过滤。 命令的行为如下:

  • 启动 当执行 START 命令时,分析器会检查是否已应用完全相同的过滤器,如果已应用,则忽略该命令。您可以在监控视图 M_SQLSCRIPT_PLAN_PROFILERS 中检查已启用剖析器的状态。结果仅在过程执行完成后可用。如果按过程名应用过滤器,则只返回最外层过程调用。 示例代码a) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR SESSION 111111;b) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR SESSION 222222;c) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR SESSION 222222; -- ignored because the profiler has already been started for session 222222d) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR PROCEDURE P1;e) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR PROCEDURE S1.P1; -- not ignored, the filter is not the same (P1 != S1.P1)f) ALTER SYSTEM START SQLSCRIPT PLAN PROFILER ; -- every procedures will be profiled

  • 停止执行 STOP 命令时,如果过滤条件中包含所有已启动的命令,则分析器将禁用它们(不需要完全匹配的过滤器)。STOP 命令不会影响已剖析的结果。from the example above>g) ALTER SYSTEM STOP SQLSCRIPT PLAN PROFILER FOR SESSION 222222; -- only b) will be disabledh) ALTER SYSTEM STOP SQLSCRIPT PLAN PROFILER FOR PROCEDURE P1; -- both d) and e) will be disabledi) ALTER SYSTEM STOP SQLSCRIPT PLAN PROFILER; -- both a) and f) will be disabled

  • 清除CLEAR 命令与剖析器的状态无关(正在运行或已停止)。CLEAR 命令根据 M_SQLSCRIPT_PLAN_PROFILER_RESULTS 中的 PROCEDURE_CONNECTION_ID、PROCEDURE_SCHEMA_NAME 和 PROCEDURE_NAME 清除剖析的结果。如果未清除结果,则在达到最大容量时将自动删除最早的数据。j) ALTER SYSTEM CLEAR SQLSCRIPT PLAN PROFILER FOR SESSION 222222; -- deletes records with PROCEDURE_CONNECTION_ID = 222222k) ALTER SYSTEM CLEAR SQLSCRIPT PLAN PROFILER FOR PROCEDURE S1.P1; -- delete records with PROCEDURE_SCHEMA_NAME = S1 and PROCEDURE_NAME = P1l) ALTER SYSTEM CLEAR SQLSCRIPT PLAN PROFILER; -- deletes all records

    备注 不检查 的有效性或存在性。

    SQL 提示

    可以使用 SQL HINT 命令通过以下语法启动分析器: 代码语法CALL <procedure name> WITH HINT(SQLSCRIPT_PLAN_PROFILER);

    SQL 提示是启用分析器的最便捷方法。这样,分析结果将作为附加结果集返回。如果已通过 ALTER SYSTEM 命令启用分析器,则结果也将在监控视图中可见。

    目前,提示命令和系统命令都可用于为匿名块启用 SQLScript 计划分析器。 示例代码使用 SQL 提示的示例DO BEGIN select * from dummy;END WITH HINT(SQLSCRIPT_PLAN_PROFILER); -- returns additional result set 示例代码使用系统命令的示例ALTER SYSTEM START SQLSCRIPT PLAN PROFILER FOR SESSION ;DO BEGIN select * from dummy;END; -- profiling result can be checked in m_sqlscript_plan_profiler_results

    检查状态和结果

    可以使用以下命令检查剖析器的状态:

    SELECT * FROM M_SQLSCRIPT_PLAN_PROFILERS;

    可以使用以下命令检查结果:

    SELECT * FROM M_SQLSCRIPT_PLAN_PROFILER_RESULTS;

    示例代码示例ALTER SYSTEM START SQLSCRIPT PLAN PROFILER;CALL P1;CALL P2;SELECT * FROM M_SQLSCRIPT_PLAN_PROFILER_RESULTS WHERE PROCEDURE_NAME = 'P1' OR PROCEDURE_NAME = 'P2';