如果更改绑定变量值,sql_id 是否会更改

Does sql_id change if bind variable values are changed

我有一个sql_id。相应的 SELECT SQL 查询有 4 个绑定变量。 我创建了一个程序,它让我知道它在过去 1 个月中 运行 1000 次。 所以基本上我想知道是否使用了同一个绑定变量的所有 1000 次。 对于最新的一个,我从 v$sql_bind_capture.

获得了绑定变量值

所以 v$sql_bind_capture 中的最新值是否被使用了 1000 次? sql_id 生成是否考虑生成 sql_id 的绑定值,或者是没有绑定值的查询用于生成 sql_id?

谢谢 塔伦

关于您的主要问题:

so basically I want to know that all 1000 times the same bind variable was used or not. There are 2 standard ways to do that:

  1. 在查询中添加提示“monitor”并检查 v$sql_monitor 中的绑定变量值。我有自己的脚本:https://github.com/xtender/xt_scripts/blob/master/rtsm/binds.sql

  2. 为您的sql_id启用跟踪:

    更改系统设置事件'sql_trace [sql:&sqlid] bind=true, wait=false';

&sqlid 是替换变量,您可以将其设置为您需要的 sql_id。然后你可以定期检查绑定变量跟踪文件,例如使用 grep.

不会,每次传递不同的绑定值不会导致SQL_ID改变。传递的不同绑定值可能会导致 sql 计划哈希值发生变化 (PHV),但不会导致 SQL_ID.