ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle实验记录 (sort_area_size与 cpu_time)

oracle实验记录 (sort_area_size与 cpu_time)

原创 Linux操作系统 作者:fufuh2o 时间:2009-07-09 13:55:50 0 删除 编辑

基于成本优化书上介绍 说 workarea manual时候
sort_area_size越大 其cpU_time越长 占用的CPU越多,理由总结为sort机制为2叉树 ,树高度为log2(行数),内存越大,放的行数越多,高度越高,cpu遍历起来越费时间(有可能现在最近版本已经用heap机制sort了)
特此验证下

 

cpu_time/1000000 = (s)单位

分别实验 sort_area_size  1M,5M,10M, 30M(optimial sort)
workarea_size_policy                 string      MANUAL
sort_area_size                       integer     1048576

分别用2个session一个执行,一个查SQL语句的cpu_time

SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;

1048576 rows selected.

Elapsed: 00:00:14.17


另一个session查
SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
   5351684      6713273 fasuzt0qcxhcx
SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
SQL> alter session set sort_area_size = 5242880;
SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;

1048576 rows selected.

Elapsed: 00:00:12.86

 

SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
   3746109      5152772 fasuzt0qcxhcx

SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> alter session set sort_area_size =10485760 ;

Session altered.

Elapsed: 00:00:00.00
SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;
Elapsed: 00:00:12.89

SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
   7947986     10131213 fasuzt0qcxhcx


SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> set autotrace off;
SQL> alter session set sort_area_size = 31457280;

Session altered.

Elapsed: 00:00:00.00
SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;
Elapsed: 00:00:12.96
 2  sorts (memory)
 0  sorts (disk)~~~~~~~~~~~~~~~已经是最优sort了

SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
  12538560     15271482 fasuzt0qcxhcx

SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SQL> alter session set sort_area_size = 5242880;

Session altered.

Elapsed: 00:00:00.00
SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;

1048576 rows selected.

Elapsed: 00:00:11.81

SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
   3753378      4312063 fasuzt0qcxhcx~~~~~~~~~~~~~~~~~~~~~~~~~~~~~为 5M时候 cpu time 最小

SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> set autotrace off;
SQL> alter session set sort_area_size =10485760 ;

Session altered.

Elapsed: 00:00:00.00
SQL> set autotrace traceonly statistics;
SQL> select sortcode from t1 order by sortcode;

SQL> select cpu_time,elapsed_time,sql_id from v$sqlarea where sql_text='select s
ortcode from t1 order by sortcode';

  CPU_TIME ELAPSED_TIME SQL_ID
---------- ------------ -------------
   7935026      9117286 fasuzt0qcxhcx

SQL> alter system flush shared_pool;

System altered.


SQL> alter system flush buffer_cache;

System altered.


很奇怪,经过反复测试~有时候sort_area_size变大cpu_time会变大 但有时候也会变小,总体来说 还是基本随着sort_area_size变大而变大,尤其在最优sort时明显

也许测试方法不正确,也许版本有BUG,也许oracle改变了sort机制不用2叉数了~那样就不存在高度了.结论:在R2之前 肯定是用2叉数,切cpu_time会占用长时间.

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

请登录后发表评论 登录
全部评论

注册时间:2009-06-26

  • 博文量
    182
  • 访问量
    471639