oracle 识别解析问题 1
解析对全部性能影响的可变因素非常多。在某些情况下,可以简单地忽略它。在其他情况下,它是造成性能问题的主要原因。如果存在解析问题,这通常代表应用不能正确处理它。这是个主要问题,因为通常要改变应用的行为,你需要修改相应的代码。开发人员需要知道解析的影响以及如何在写代码时尽可能避免相关问题。
1.1 识别解析问题
当寻找解析问题时,很容易会遇到强迫性的混乱优化。发生这类问题的原因是,多个动态性能视图包含的计数器详细记录了软解析、硬解析和执行的次数。这些计数器和基于它们的比率一样,都是没用的,因为它们没有提供关于解析花费时间的信息。
请注意对于解析,这才是真正的问题,因为它们没有标准周期。实际上,根据SQL语句的复杂度和它引用的对象,解析的周期通常会相差几个数量级。简单地说,这些计数器只能告诉你数据库引擎是否完成少量或大量的解析,而没有关于是否存在问题的信息。因此,实际中它们只用来做趋势分析。
如果你遵循第一部分和第二部分提供的建议,那么应该清晰地知道,唯一有效识别解析问题的方法,就是衡量数据库引擎花费了多少时间来解析SQL语句。如果要查找单个会话或是整个系统的全部时间信息,可以查询提供时间模型统计信息的动态性能视图。这些视图包括v$sess_time_model、v$sys_time_model和在12.1多租户环境下的v$con_sys_time_model。
例如,下面查询的输出显示了一个会话花费了大量时间(将近59%)来解析SQL语句的信息:
WITH db_time AS
(select sid, value
FROM v$sess_time_model