Oracle的SQL Health-Check (SQLHC) 脚本是一个非常有用的工具,它可以帮助数据库管理员(DBAs)分析和优化SQL查询的性能。以下是SQLHC脚本执行的主要健康检查方面的概述:
与SQL语句相关的对象的统计信息:
这部分检查与SQL语句直接相关的数据库对象(例如表和索引)的统计信息。
检查对象的统计信息是否最新,因为过时的统计信息可能导致优化器选择非最佳的执行计划。
CBO参数:
CBO (Cost-Based Optimizer) 参数对优化器选择执行计划有很大影响。
SQLHC会检查与优化器行为相关的初始化参数,例如
optimizer_mode
、optimizer_index_cost_adj
、optimizer_index_caching
等,以确定它们是否设置得当。CBO系统统计信息:
系统统计信息提供了系统的运行时环境信息,诸如CPU速度和IO性能。
这些信息帮助CBO更准确地估算操作代价。
CBO数据字典统计信息:
数据字典统计信息是关于数据库本身结构的元数据统计信息。
检查这些统计信息可以帮助了解数据字典对象的分布和使用情况,这对SQL执行计划可能有影响。
CBO动态性能视图统计信息:
动态性能视图(如V$视图)提供实时的系统性能信息。
SQLHC检查这些视图中的统计信息,来分析当前数据库活动和历史性能数据。
当你运行SQLHC脚本时,它会收集这些方面的信息,并生成一个报告。报告通常包含以下内容:
执行计划分析
SQL语句的执行历史
相关初始化参数设置
对象统计信息
系统和会话级别的性能信息
等待事件和瓶颈分析
使用SQLHC的好处在于它不需要在目标数据库中安装额外的工具或代码。你只需要提供需要分析的SQL语句的标识符(比如SQL_ID),然后脚本会执行必要的查询和检查,并生成报告。这使得SQLHC成为在生产环境中快速诊断和分析性能问题的有力工具。
对于更深入的分析,SQLT(SQLTXPLAIN)是一个更全面的工具,它不仅包含了SQLHC的所有功能,还增加了更多的数据收集和分析功能。但不同于SQLHC,SQLT需要在数据库中安装附加的代码。在使用SQLT之前,通常建议先运行SQLHC以获得初步的性能分析。
安装与使用
从MOS(My Oracle Support)的Doc ID 1366133.1中下载“sqlhc.zip”文件到数据库服务器,也可以通过关注公众号并加作者微信来寻求安装文件。
运行该脚本请按照以下步骤操作:
使用SYS账户或具有访问数据字典视图权限的用户连接到SQL*Plus。
登录到相应的容器,否则将无法访问对象。
运行“sqlhc.sql”脚本。在此过程中,需要输入两个必需的参数:
Oracle Pack许可证(调优、诊断或无)[T|D|N]。虽然SQLHC无需许可证且免费,但如果已经安装了诊断包或调优包,SQLHC可以使用AWR报告中的信息。因此,它会询问您的服务器是否已经获得了诊断包或调优包的授权。如果有,则输入“T”。
要分析的SQL的有效SQL_ID。请勿输入PL/SQL包的SQL_ID,因为虽然这样不会触发错误,但也不会产生有用的结果。例如:
SQL>@sqlhc/sqlhc.sql T 5mz8u3b34u9gw
该脚本执行完毕后,会在执行的同一目录中生成一个ZIP文件。




