IT EASY, IT IS! | 第一集:从‘美国梦’到‘AI梦’的DeepLearning女神 ‘李飞飞’
2018-07-17
关于DB性能优化的一切|利用MaxGauge进行DB深度优化2
2018-05-02

 

V$SQL_BIND_CAPTURE

目录

1 Basic Info. 2

1.1 概要… 2

1.2 支持… 2

1.3 列… 2

2 参考事项… 3

2.1形成Bind Capture的时刻… 3

2.2 获取绑定值… 3

2.3 绑定值历史… 3

3 例题… 3

4 关联信息… 4

5 外部参考… 4

 

1 Basic Info

1.1 概要

V$SQL_BIND_CAPTURE视图提供SQL Cursor中使用Bind Variable时相应Bind Variable的名称、类型及值等信息。

1.2 支持

10g以上

1.3 列

名称 类型 说明
ADDRESS 8) Parent Cursor的Address
HASH_VALUE NUMBER Parent Cursor的哈希值.
SQL_ID VARCHAR2(13) 与Unique SQL ID. V$SQL的SQL_ID列连接。
CHILD_ADDRESS 8) Child Cursor的地址
CHILD_NUMBER NUMBER Child Cursor的编号
NAME VARCHAR2(30) Bind Variable的名称. 例: :name
POSITION NUMBER SQL语句中Bind Variable的位置。从1开始。
DUP_POSITION NUMBER 指Bind Variable的名字有重复时,最初Bind Variable的位置。
DATATYPE NUMBER Bind Variable的数据类型。与oracle内部使用的数字。
DATATYPE_STRING VARCHAR2(15) 对于Bind Variable的数据类型的可识别的名称。例:NUMBER, VARCHAR2
CHARACTER_SID NUMBER National character set identifier
PRECISION NUMBER Precision (for numeric binds)
SCALE NUMBER Scale (for numeric binds)
MAX_LENGTH NUMBER 最大绑定长度
WAS_CAPTURED VARCHAR2(3) 对绑定值进行捕捉时,记录捕捉成功与否
LAST_CAPTURED DATE 对绑定值可以捕捉时的最近时间
VALUE_STRING VARCHAR2(4000) 对绑定值的字符串
VALUE_ANYDATA ANYDATA 对绑定值的Sys.AnyData描述

2 参考事项

2.1形成Bind Capture的时刻

Oracle在以下的点执行Bind Capture.

  • SQL在硬解析的时刻使用Bind Variable,且赋予绑定值的情况
  • 形成Bind Capture之后, 修改绑定值的情况。但Oracle为了将性能开销降到最小化需要间隔15分钟再执行捕获(Capture)。即, 要时常注意Bind Capture的值不是一直输出是最新的值.

2.2 获取绑定值

Oracle 10g之前想知道具体SQL语句中使用中的Bind值的时候执行Processstate Dump, 或Audit。但是, 使用V$SQL_BIND_CAPTURE能从简单查询中看出绑定变量。各个工具提供的值可以总结如下.

  • Processstate Dump: 具体Session(Process) “现在”执行中的SQL语句中的绑定值的目录
  • SQL Trace: 具体会话或系统执行的所有SQL语句中的绑定值
  • V$SQL_BIND_CAPTURE: SQL各种语句中最近使用的绑定值
  • Audit: 对具体表或整个对象Select/Insert/Update/Delete的SQL语句和绑定值

2.3 绑定值历史

通过V$SQL_BIND_CAPTURE视图的历史版本DBA_HIST_SQLBIND视图,可以确认特定SQL语句中使用的绑定值。

3 例题

SQL> CREATE TABLE bind_test(id INT);

SQL> var x number;

SQL> EXEC  😡 := 1;

SQL> select * from bind_test where id = :x’;

 

SQL> SELECT name, position, was_captured,

to_char(last_captured,’yyyy/mm/dd hh24:mi:ss’), value_string

FROM v$sql_bind_capture

WHERE sql_id = (SELECT sql_id FROM v$sql WHERE sql_text =

(‘select * from bind_test where id = :x’)

 

NAME             POSITION           WAS_CAPTURED            LAST_CAPTURED          VALUE_STRING

—-     ——–   ———- ————–                      ————

:X       1                         YES                    2007/10/13 00:16:19          1

4 关联信息

  1. _OPTIM_PEEK_USER_BINDS参数
  2. V$SQL_BIND_DATA视图
  3. V$SQL_BIND_METADATA视图
  4. DBA_HIST_SQLBIND

5 参考资料

  1. http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/dynviews_2114.htm

Leave a Reply

Be the First to Comment!

Notify of
avatar
wpDiscuz