【Oracle】arraysize的研究(存在疑问)


  1. SYS@proc> desc aaa;
  2.  Name                                      Null?    Type
  3.  ----------------------------------------- -------- ----------------------------
  4.  ID1                                                NUMBER(38)
  5.  ID2                                                NUMBER(38)
  6.  ID3                                                NUMBER(38)
  7.  ID4                                                NUMBER(38)

  8. SYS@proc> select * from aaa;

  9.        ID1        ID2        ID3        ID4
  10. ---------- ---------- ---------- ----------
  11.          1          1          1          1
  12.          1          1          1          0

  13. SYS@proc> select * from aaa1;

  14.        ID1        ID2        ID3        ID4
  15. ---------- ---------- ---------- ----------
  16.          1          1          1          0
  17.          1          1          1          1

  18. SYS@proc> select * from aaa where id1/id2=1 and id3/id4=1;
  19. ERROR:
  20. ORA-01476: divisor is equal to zero



  21. no rows selected

  22. SYS@proc> set arraysize 1
  23. SYS@proc> /

  24.        ID1        ID2        ID3        ID4
  25. ---------- ---------- ---------- ----------
  26.          1          1          1          1
  27. ERROR:
  28. ORA-01476: divisor is equal to zero



  29. SYS@proc> select * from aaa1 where id1/id2=1 and id3/id4=1;
  30. select * from aaa1 where id1/id2=1 and id3/id4=1
  31.                                           *
  32. ERROR at line 1:
  33. ORA-01476: divisor is equal to zero

  1. SYS@proc> drop table aaa2 purge;

  2. Table dropped.

  3. SYS@proc> create table aaa2 (id1 int,id2 int,id3 int,id4 int,flag int);

  4. Table created.

  5. SYS@proc> insert into aaa2 values(1,1,1,1,1);

  6. 1 row created.

  7. SYS@proc> insert into aaa2 values(1,1,1,1,2);

  8. 1 row created.

  9. SYS@proc> insert into aaa2 values(1,1,1,1,3);

  10. 1 row created.

  11. SYS@proc> insert into aaa2 values(1,1,1,1,4);

  12. 1 row created.

  13. SYS@proc> insert into aaa2 values(1,1,1,1,5);

  14. 1 row created.

  15. SYS@proc> insert into aaa2 values(1,1,1,1,6);

  16. 1 row created.

  17. SYS@proc> insert into aaa2 values(1,1,1,1,7);

  18. 1 row created.

  19. SYS@proc> insert into aaa2 values(1,1,1,1,8);

  20. 1 row created.

  21. SYS@proc> insert into aaa2 values(1,1,1,1,9);

  22. 1 row created.

  23. SYS@proc> insert into aaa2 values(1,1,1,1,10);

  24. 1 row created.

  25. SYS@proc> insert into aaa2 values(1,1,1,0,0);

  26. 1 row created.

  27. SYS@proc> commit;

  28. Commit complete.

  29. SYS@proc> analyze table aaa2 compute statistics;

  30. Table analyzed.

  31. SYS@proc> set arraysize 1
  32. SYS@proc> select * from aaa2 where id1/id2=1 and id3/id4=1;

  33.        ID1        ID2        ID3        ID4       FLAG
  34. ---------- ---------- ---------- ---------- ----------
  35.          1          1          1          1          1
  36.          1          1          1          1          2
  37.          1          1          1          1          3
  38.          1          1          1          1          4
  39.          1          1          1          1          5
  40.          1          1          1          1          6
  41.          1          1          1          1          7
  42.          1          1          1          1          8
  43.          1          1          1          1          9
  44. ERROR:
  45. ORA-01476: divisor is equal to zero



  46. 9 rows selected.
  47. --从大量结果上看,arraysize为1或者2是一样的。这里为9预见。

  48. SYS@proc> select * from aaa2;

  49.        ID1        ID2        ID3        ID4       FLAG
  50. ---------- ---------- ---------- ---------- ----------
  51.          1          1          1          1          1
  52.          1          1          1          1          2
  53.          1          1          1          1          3
  54.          1          1          1          1          4
  55.          1          1          1          1          5
  56.          1          1          1          1          6
  57.          1          1          1          1          7
  58.          1          1          1          1          8
  59.          1          1          1          1          9
  60.          1          1          1          1         10
  61.          1          1          1          0          0

  62. 11 rows selected.

  63. SYS@proc>

  1. SYS@proc> set arraysize 2
  2. SYS@proc> select * from aaa2 where id1/id2=1 and id3/id4=1;

  3.        ID1     ID2     ID3    ID4     FLAG
  4. ---------- ---------- ---------- ---------- ----------
  5.      1     1     1     1     1
  6.      1     1     1     1     2
  7.      1     1     1     1     3
  8.      1     1     1     1     4
  9.      1     1     1     1     5
  10.      1     1     1     1     6
  11.      1     1     1     1     7
  12.      1     1     1     1     8
  13. ERROR:
  14. ORA-01476: divisor is equal to zero



  15. 8 rows selected.
语句对应的10046,可以看出是返回了9行,但是从上边看是8行,很奇怪。
  1. PARSING IN CURSOR #140496887317072 len=48 dep=0 uid=0 oct=3 lid=0 tim=1514130832420098 hv=3007681721 ad='812bd000' sqlid='7cfwyuytnb55t'
  2. select * from aaa2 where id1/id2=1 and id3/id4=1
  3. END OF STMT
  4. PARSE #140496887317072:c=0,e=1221,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=2576342259,tim=1514130832420093
  5. EXEC #140496887317072:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,plh=2576342259,tim=1514130832420198
  6. WAIT #140496887317072: nam='SQL*Net message to client' ela= 5 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832420238
  7. FETCH #140496887317072:c=0,e=64,p=0,cr=2,cu=0,mis=0,r=1,dep=0,og=1,plh=2576342259,tim=1514130832420331
  8. WAIT #140496887317072: nam='SQL*Net message from client' ela= 476 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832420842
  9. WAIT #140496887317072: nam='SQL*Net message to client' ela= 3 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832420907
  10. FETCH #140496887317072:c=0,e=36,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=2576342259,tim=1514130832420924
  11. WAIT #140496887317072: nam='SQL*Net message from client' ela= 146 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421092
  12. WAIT #140496887317072: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421137
  13. FETCH #140496887317072:c=0,e=28,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=2576342259,tim=1514130832421151
  14. WAIT #140496887317072: nam='SQL*Net message from client' ela= 66 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421237
  15. WAIT #140496887317072: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421277
  16. FETCH #140496887317072:c=0,e=26,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=2576342259,tim=1514130832421290
  17. WAIT #140496887317072: nam='SQL*Net message from client' ela= 60 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421369
  18. WAIT #140496887317072: nam='SQL*Net message to client' ela= 1 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421407
  19. FETCH #140496887317072:c=0,e=25,p=0,cr=1,cu=0,mis=0,r=2,dep=0,og=1,plh=2576342259,tim=1514130832421420
  20. WAIT #140496887317072: nam='SQL*Net message from client' ela= 410 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421848
  21. WAIT #140496887317072: nam='SQL*Net message to client' ela= 2 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832421907
  22. FETCH #140496887317072:c=0,e=63,p=0,cr=1,cu=0,mis=0,r=1,dep=0,og=1,plh=2576342259,tim=1514130832421956
  23. STAT #140496887317072 id=1 cnt=10 pid=0 pos=1 obj=88977 op='TABLE ACCESS FULL AAA2 (cr=7 pr=0 pw=0 time=94 us cost=2 size=10 card=1)'
  24. WAIT #140496887317072: nam='SQL*Net break/reset to client' ela= 28 driver id=1650815232 break?=1 p3=0 obj#=-1 tim=1514130832422110
  25. WAIT #140496887317072: nam='SQL*Net break/reset to client' ela= 120 driver id=1650815232 break?=0 p3=0 obj#=-1 tim=1514130832422252
  26. WAIT #140496887317072: nam='SQL*Net message from client' ela= 595 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1514130832422889
  27. CLOSE #140496887317072:c=0,e=14,dep=0,type=0,tim=1514130832422981
  28. =====================
所以其实arraysize是1还是2,还是存在区别的。不过从10046上看却是没多大区别,从全表扫描或者其他能够正常返回结果的情况下,值为1和2是完全一样的。


但是实际上无论arraysize的值是多少,默认第一行单独会直接发送反馈给用户的,所以应该是不用设置的。
后边研究的逻辑读也有点问题,在12C里边差别更大。
其他: http://www.itpub.net/thread-242144-1-1.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30174570/viewspace-2149212/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30174570/viewspace-2149212/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值