SQLScript 计划分析器是一种新的性能分析工具,主要用于存储过程和函数。启用 SQLScript 计划分析器后,将为每个调用语句生成一个表格结果。结果表包含开始时间、结束时间、CPU 时间、等待时间、线程标识以及每个预定义操作的一些附加详细信息。预定义操作可以是分析存储过程和函数的引擎性能所考虑的任何事情,包括编译和执行时间。表格结果显示在 HANA 的新监控视图 M_SQLSCRIPT_PLAN_PROFILER_RESULTS 中。 备注当前,仅支持存储过程。
有两种方法可以启动剖析器和检查结果。
可将 ALTER SYSTEM 命令与以下语法结合使用: 代码语法ALTER SYSTEM CLEARFOR SESSION FOR PROCEDURE
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
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 命令根据 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 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 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';