Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

2

好友

3

主题
1#
发表于 2013-3-8 10:25:01 | 查看: 5315| 回复: 7
Parses:
Executes:

Parses 应该是包含硬解析,软解析,还有那个叫fast soft parse的合计。

如果语句 Executes,第一次会出现硬解析,接着是软解析,多次执行,有设置游标缓存的情况下,出现的是fast soft parse解析。

那即使是有绑定变量的语句,执行的时候,也是需要一次fast soft parse吧。 这种情况下 Executes 增加, Parses 也会对应的增加。

那在什么情况下, 是不需要任何解析,Executes 增加,Parses不增加。

我记得通过dbms包打开游标的方式,是可以做到这一点的。其他什么情况会是这样的。

期待各位大师给解惑。
2#
发表于 2013-3-8 11:42:27
还是用演示 给你解惑:
  1. SQL> select * from v$version;

  2. BANNER
  3. --------------------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
  5. PL/SQL Release 11.2.0.3.0 - Production
  6. CORE    11.2.0.3.0      Production
  7. TNS for Linux: Version 11.2.0.3.0 - Production
  8. NLSRTL Version 11.2.0.3.0 - Production


  9. select st.name,vs.value from v$mystat vs , v$statname st
  10. where vs.statistic#=st.statistic#
  11. and st.name like '%parse%';

  12. NAME                                                                  VALUE
  13. ---------------------------------------------------------------- ----------
  14. parse time cpu                                                            2
  15. parse time elapsed                                                        2
  16. parse count (total)                                                      13
  17. parse count (hard)                                                        5
  18. parse count (failures)                                                    0
  19. parse count (describe)                                                    0


  20. declare
  21. v_i int;
  22. begin
  23. for v_i in 1..10000 loop
  24. execute immediate 'select 1 from dual where 1=:1' using v_i;
  25. end loop;
  26. end;
  27. /

  28. NAME                                                                  VALUE
  29. ---------------------------------------------------------------- ----------
  30. parse time cpu                                                            2
  31. parse time elapsed                                                        6
  32. parse count (total)                                                      15
  33. parse count (hard)                                                        7
  34. parse count (failures)                                                    0
  35. parse count (describe)                                                    0



  36. SQL> show parameter session_cached

  37. NAME                                 TYPE        VALUE
  38. ------------------------------------ ----------- ------------------------------
  39. session_cached_cursors               integer     50


  40. 上面是 软软解析 可以看到 10000次执行 只计 2次parse count, 即真正软软解析 soft soft parse在这里不算做parse count






  41. SQL> show parameter sessioN_cached

  42. NAME                                 TYPE        VALUE
  43. ------------------------------------ ----------- ------------------------------
  44. session_cached_cursors               integer     0


  45. select st.name,vs.value from v$mystat vs , v$statname st
  46. where vs.statistic#=st.statistic#
  47. and st.name like '%parse%';


  48. NAME                                                                  VALUE
  49. ---------------------------------------------------------------- ----------
  50. parse time cpu                                                            0
  51. parse time elapsed                                                        0
  52. parse count (total)                                                       4
  53. parse count (hard)                                                        1
  54. parse count (failures)                                                    0
  55. parse count (describe)                                                    0

  56. declare
  57. v_i int;
  58. begin
  59. for v_i in 1..10000 loop
  60. execute immediate 'select 1 from dual where 1=:1' using v_i;
  61. end loop;
  62. end;
  63. /

  64. select st.name,vs.value from v$mystat vs , v$statname st
  65. where vs.statistic#=st.statistic#
  66. and st.name like '%parse%';

  67. NAME                                                                  VALUE
  68. ---------------------------------------------------------------- ----------
  69. parse time cpu                                                           14
  70. parse time elapsed                                                        0
  71. parse count (total)                                                   10006
  72. parse count (hard)                                                        1
  73. parse count (failures)                                                    0
  74. parse count (describe)                                                    0



  75. 因为session_cached_cursors=0 所以没有游标缓存 所以 无法软软解析soft soft parse,所以都是软解析,所以这里parse count (total) 增加了10000



复制代码

回复 只看该作者 道具 举报

3#
发表于 2013-3-8 14:55:38
感谢刘大。

以前理解上有偏差。

以为有绑定变量的,parse就会低。

回复 只看该作者 道具 举报

4#
发表于 2013-3-12 09:10:00
实践出真知

回复 只看该作者 道具 举报

5#
发表于 2013-4-24 14:41:38
这是我的测试:

SQL> alter system set session_cached_cursors=100 scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size                  2068296 bytes
Variable Size             385876152 bytes
Database Buffers         1207959552 bytes
Redo Buffers               14708736 bytes
Database mounted.
Database opened.
SQL> select st.name,vs.value from v$mystat vs , v$statname st
  2  where vs.statistic#=st.statistic#
  3  and st.name like '%parse%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                           30
parse time elapsed                                                       32
parse count (total)                                                    1223
parse count (hard)                                                      298
parse count (failures)                                                    0

SQL> /

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                           30
parse time elapsed                                                       32
parse count (total)                                                    1224
parse count (hard)                                                      298
parse count (failures)                                                    0

SQL> declare
  2  v_i int;
  3  begin
  4  for v_i in 1..10000 loop
  5  execute immediate 'select 1 from dual where 1=:1' using v_i;
  6  end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select st.name,vs.value from v$mystat vs , v$statname st
  2  where vs.statistic#=st.statistic#
  3  and st.name like '%parse%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                           30
parse time elapsed                                                       32
parse count (total)                                                    1227
parse count (hard)                                                      300
parse count (failures)                                                    0

SQL> alter system set session_cached_cursors=0 scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size                  2068296 bytes
Variable Size             385876152 bytes
Database Buffers         1207959552 bytes
Redo Buffers               14708736 bytes
Database mounted.
Database opened.
SQL> show parameter session_cache

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors               integer     0
SQL> select st.name,vs.value from v$mystat vs , v$statname st
  2  where vs.statistic#=st.statistic#
  3  and st.name like '%parse%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                           36
parse time elapsed                                                       37
parse count (total)                                                    2533
parse count (hard)                                                      314
parse count (failures)                                                    0

SQL> declare
  2  v_i int;
  3  begin
  4  for v_i in 1..10000 loop
  5  execute immediate 'select 1 from dual where 1=:1' using v_i;
  6  end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select st.name,vs.value from v$mystat vs , v$statname st
  2  where vs.statistic#=st.statistic#
  3  and st.name like '%parse%';

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
parse time cpu                                                           37
parse time elapsed                                                       37
parse count (total)                                                    2536
parse count (hard)                                                      316
parse count (failures)                                                    0


请问 我在10205 上 发现 session_cached_cursor 0 parse count 没有明显变化?

回复 只看该作者 道具 举报

6#
发表于 2013-4-27 21:15:16
1、 这取决于 很多 包括 是否10205 把这个游标当做一个open_cursor来对待

10.2.0.5

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
PL/SQL Release 10.2.0.5.0 - Production
CORE    10.2.0.5.0      Production
TNS for Linux: Version 10.2.0.5.0 - Production
NLSRTL Version 10.2.0.5.0 - Production

SQL> show parameter session_cached_cu

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors               integer     0



declare
v_i int;
begin
for v_i in 1..10000 loop
execute immediate 'select /*+ MACLEAN*/ 1 from dual where 1=:1' using v_i;
end loop;
end;
/


你打开另一个窗口

SQL> select sql_text from v$OPEN_CURSOR WHERE SQL_TEXT LIKE '%MACLE%';

SQL_TEXT
------------------------------------------------------------
select /*+ MACLEAN*/ 1 from dual where 1=:1



而在11.2.0.3


SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production


SQL> declare
  2  v_i int;
  3  begin
  4  for v_i in 1..10000 loop
  5  execute immediate 'select /*+ MACLEAN*/ 1 from dual where 1=:1' using v_i;
  6  end loop;
  7  end;
  8  /

PL/SQL procedure successfully completed.


你打开另一个窗口

SQL> select sql_text from v$OPEN_CURSOR WHERE SQL_TEXT LIKE '%MACLE%';

no rows selected

回复 只看该作者 道具 举报

7#
发表于 2013-4-27 21:59:49
Maclean Liu(刘相兵 发表于 2013-4-27 21:15
1、 这取决于 很多 包括 是否10205 把这个游标当做一个open_cursor来对待

10.2.0.5

那说到底10205里面这个语句反复执行跟这个session_cursor 参数影响不大?soft soft parse 不包括在
hard parse和soft parase 里? 有点迷茫,能解释下吗?

回复 只看该作者 道具 举报

8#
发表于 2013-4-27 22:02:09
我的理解 10g以后 soft soft parse  不包含在 parse (total)里了

10205 中执行上面的匿名块时  会保持 'select /*+ MACLEAN*/ 1 from dual where 1=:1 这个游标为open cursor, OPEN CURSOR无需 soft parse 也无需 session cached cursor

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-6-1 19:41 , Processed in 0.050927 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569