Oracle Trace文件中mxlc的含义

时间:2012-09-06 16:03:16

标签: oracle oracle11g

我在跟踪文件中看到以下内容:

  

绑定#3 oacdty = 01 mxl = 128(35) mxlc = 36 mal = 00 scl = 00 pre = 00
  oacflg = 03 fl2 = 1000010 frm = 01 csi = 31 siz = 0 off = 168
  kxsbbbfp = ffffffff79f139a8 bln = 128 avl = 35 flg = 01 value =“1234 W   1234 West,West Groves City“

我想知道mxlc值是什么?

2 个答案:

答案 0 :(得分:4)

我引用

Bind #n
oacdty  - Datatype code 
mxl     - Maximum length of the bind variable value (private maximum length in parentheses)
mxlc    - Unknown    :(
mal     - array length
scl     - Scale
pre     - Precision
oacflg  - Special flag indicating bind options
fl2     - second part of oacflg
frm     - Unknown        :(
csi     - Unknown        :(
siz     - Amount of memory to be allocated for this chunk
off     - Offset into this chunk for this bind buffer
kxsbbbfp- Bind address
bln     - Bind buffer length
avl     - actual value length
flg     - bind status flag
value   - Value of the bind variable

Source(本书的& snippet

这本书也引用了 -

  

目前没有关于三个参数的信息。

哪些是mxlcfrmcsi

答案 1 :(得分:2)

<强>摘要

mxlc似乎是绑定变量的最大字符数,但前提是该变量使用字符长度语义。

方式

我搜索了My Oracle Support mxlc。几乎每篇文章都有mxlc=00,唯一的例外涉及NVARCHARNCHAR。以下代码基于文档ID 552262.1中的代码。我更改了变量大小(99123 char),如果使用了字符长度语义,则每次mxlc都设置为变量大小。

<强>代码

create table t1(ncol1 nvarchar2(100), col1 varchar2(100));

alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 4';

VAR nvar1 NVARCHAR2(99)
VAR var1 VARCHAR2(123 char)
EXEC :nvar1 := 'nvarchar'
EXEC :var1 := 'varchar'

SELECT * FROM T1 WHERE ncol1 = :nvar1 and col1 = :var1;
ALTER SESSION SET EVENTS '10046 trace name context off';

<强>结果:

 Bind#0
  oacdty=01 mxl=2000(198) mxlc=99 mal=00 scl=00 pre=00
  oacflg=03 fl2=1000010 frm=02 csi=2000 siz=4000 off=0
  kxsbbbfp=0e702edc  bln=2000  avl=16  flg=05
  value=0 6e 0 76 0 61 0 72 0 63 0 68 0 61 0 72 
 Bind#1
  oacdty=01 mxl=2000(369) mxlc=123 mal=00 scl=00 pre=00
  oacflg=03 fl2=1000010 frm=01 csi=873 siz=0 off=2000
  kxsbbbfp=0e7036ac  bln=2000  avl=07  flg=01
  value="varchar"

更多问题

通常mxlmxlc之间的关系是有道理的。对于我系统上的NVARCHAR,UTF16,每个字符将有2个字节,因此198和99.我的数据库是UTF8,一个字符最多可能占用4个字节。也许Oracle猜测平均大小将是3个字节,因此123和369.显然它可能超过369,也许这只是分配的初始内存,它可以在以后增长?

但你的数字,36和35,对我来说没有意义。当然字节数永远不会是 LESS 而不是字符数?甲骨文做出错误猜测,还是某些客户端程序发送错误数据?