Feeds:
Posts
Comments

Posts Tagged ‘FTS’


It depends, but we can analyse two extremes. Only user mode cpu usage is put here, sys mode cpu is in the output of prstat shown later.
1: If oracle needs to scan lots of blocks for each fetch.

Such as select count(*) using FTS or the where clause filter out 99% of the data read by oracle,  then the bottle neck is at the database side.
A: If most of the blocks are in SGA and little PIO is required.

Then one session could use nearly 100% cpu.
B: If most of the blocks are not in SGA and lots of PIO is required.

Then the session spends most of it’s time on IO. Depending on the storage performance and how much data oracle read in (controlled by DB_FILE_MULTIBLOCK_READ_COUNT), the cpu used varies. In my test with HDS USPV storage, the average cpu usage is about 30% if DB_FILE_MULTIBLOCK_READ_COUNT is 16 and cpu is about 35% if DB_FILE_MULTIBLOCK_READ_COUNT is 128.

2: If oracle returns all the data in a block to client side.

Such as select * from tab_name (of cause the blocks  should not be empty, such as after delete a huge table), then the bottleneck is sql*net. Oracle will spend a little time on cpu to read the data, and then spend more time to wait on sql*net, and then spend time on cpu, and then wait on sql*net, etc. The average cpu usage is low. In my test, the cpu used is only about 5~6%. [updated: if sql*net is the bottleneck, storage capacity is not likely a problem ]

Test 1.A


SQL> select count(*) from test_net1;
COUNT(*)
----------
100000
SQL>
SQL> select a.SPID
2    from v$process a
3   where a.ADDR =
4         (select b.PADDR
5            from v$session b
6           where b.SID = (select sid from v$mystat where rownum = 1));
SPID
------------
27956
SQL>
SQL> declare
2    a int;
3  begin
4    for i in 1..10000
5    loop
6      select count(*) into a from test_net1;
7    end loop;
8  end;
9  /
^Cdeclare
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at line 6

TEST-qihua$> prstat -mLc  -p 27956 1 100|grep 27956

27956 oracle    98 0.1 0.0 0.0 0.0 0.0 1.6 0.0   3   5 107   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   1   7  92   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   6 102   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   4  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   1   5  92   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   6  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   3   4  94   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   3   4  94   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   3   4  96   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   3   6  94   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   5  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   1   5  92   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   6  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   6 100   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   0   6  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   2   5  93   0 oracle/1
27956 oracle   100 0.0 0.0 0.0 0.0 0.0 0.0 0.0   0   6  91   0 oracle/1
27956 oracle    80 0.0 0.0 0.0 0.0 0.0  20 0.0   4   6  91   1 oracle/1           ==> cancelled. 
27956 oracle   0.0 0.0 0.0 0.0 0.0 0.0 100 0.0   0   0   0   0 oracle/1

Test 1.B & DB_FILE_MULTIBLOCK_READ_COUNT=16


SQL>  alter session set DB_FILE_MULTIBLOCK_READ_COUNT=16;
Session altered.
SQL> select count(*) from huge_table;
^Cselect count(*) from huge_table
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
TEST-qihua$> !!

prstat -mLc -p 27956 1 100 | grep 27956

27956 oracle   6.0 0.2 0.0 0.0 0.0 0.0  94 0.0  11   0  16   0 oracle/1
27956 oracle    21 5.0 0.1 0.0 0.0 0.0  74 0.3 382   4 382   0 oracle/1
27956 oracle    25 5.9 0.1 0.0 0.0 0.0  69 0.4 450   3 450   0 oracle/1
27956 oracle    20 4.9 0.1 0.0 0.0 0.0  74 0.3 367   3 369   0 oracle/1
27956 oracle    24 5.8 0.1 0.0 0.0 0.0  70 0.4 435   5 435   0 oracle/1
27956 oracle    20 4.7 0.1 0.0 0.0 0.0  75 0.3 361   2 361   0 oracle/1
27956 oracle    22 5.1 0.1 0.0 0.0 0.0  73 0.3 387   2 387   0 oracle/1
27956 oracle    22 5.1 0.1 0.0 0.0 0.0  73 0.3 395   2 395   0 oracle/1
27956 oracle    23 5.4 0.1 0.0 0.0 0.0  71 0.3 420   3 420   0 oracle/1
27956 oracle    28 6.6 0.1 0.0 0.0 0.0  65 0.4 510   4 512   0 oracle/1
27956 oracle    25 5.9 0.1 0.0 0.0 0.0  68 0.4 454   4 454   0 oracle/1
27956 oracle    24 5.6 0.1 0.0 0.0 0.0  70 0.3 430   5 430   0 oracle/1
27956 oracle    26 6.1 0.1 0.0 0.0 0.0  67 0.4 473   5 473   0 oracle/1
27956 oracle    26 6.2 0.1 0.0 0.0 0.0  67 0.4 474   5 474   0 oracle/1
27956 oracle    30 6.7 0.1 0.0 0.0 0.0  63 0.4 524   5 524   0 oracle/1
27956 oracle    27 6.3 0.1 0.0 0.0 0.0  66 0.4 489   4 491   0 oracle/1
27956 oracle    24 5.6 0.1 0.0 0.0 0.0  70 0.4 432   5 432   0 oracle/1
27956 oracle    29 6.8 0.1 0.0 0.0 0.0  63 0.4 530   4 530   0 oracle/1
27956 oracle    28 6.3 0.1 0.0 0.0 0.0  65 0.4 477   2 477   0 oracle/1
27956 oracle    27 6.3 0.1 0.0 0.0 0.0  66 0.4 488   3 488   0 oracle/1
27956 oracle    28 6.5 0.1 0.0 0.0 0.0  65 0.4 508   4 508   0 oracle/1
27956 oracle    33 7.1 0.1 0.0 0.0 0.0  60 0.4 544   3 547   0 oracle/1
27956 oracle    29 6.0 0.1 0.0 0.0 0.0  64 0.4 457   6 456   0 oracle/1
27956 oracle    29 6.0 0.1 0.0 0.0 0.0  65 0.4 464   5 464   0 oracle/1
27956 oracle    29 6.3 0.1 0.0 0.0 0.0  64 0.4 476   7 476   0 oracle/1
27956 oracle    24 5.1 0.1 0.0 0.0 0.0  70 0.3 394   3 394   0 oracle/1
27956 oracle    27 5.9 0.1 0.0 0.0 0.0  67 0.4 452   5 452   0 oracle/1
27956 oracle    32 7.1 0.1 0.0 0.0 0.0  61 0.4 549   4 551   0 oracle/1
27956 oracle    28 6.5 0.1 0.0 0.0 0.0  64 0.4 499   3 499   0 oracle/1
27956 oracle    23 5.2 0.1 0.0 0.0 0.0  71 0.3 403   4 403   0 oracle/1
27956 oracle    28 5.6 0.1 0.0 0.0 0.0  66 0.4 431   3 431   0 oracle/1
27956 oracle    26 4.7 0.1 0.0 0.0 0.0  68 0.3 363   4 363   0 oracle/1

Test 1.B & DB_FILE_MULTIBLOCK_READ_COUNT=128


SQL> alter session set DB_FILE_MULTIBLOCK_READ_COUNT=128;
Session altered.
SQL> select count(*) from huge_table;
^Cselect count(*) from huge_table
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation

prstat -mLc -p 27956 1 100 | grep 27956

27956 oracle   6.4 0.4 0.0 0.0 0.0 0.0  93 0.0  21   0  26   0 oracle/1
27956 oracle    28 4.3 0.0 0.0 0.0 0.0  68 0.1  73   2  73   0 oracle/1
27956 oracle    32 5.1 0.0 0.0 0.0 0.0  63 0.1  84   6  86   0 oracle/1
27956 oracle    33 5.0 0.0 0.0 0.0 0.0  62 0.1  85   5  86   0 oracle/1
27956 oracle    32 4.8 0.0 0.0 0.0 0.0  63 0.1  83   4  82   0 oracle/1
27956 oracle    29 4.5 0.0 0.0 0.0 0.0  66 0.1  75   4  75   0 oracle/1
27956 oracle    33 5.1 0.0 0.0 0.0 0.0  62 0.1  87   5  87   0 oracle/1
27956 oracle    34 5.2 0.0 0.0 0.0 0.0  61 0.1  89   3  89   0 oracle/1
27956 oracle    33 5.1 0.0 0.0 0.0 0.0  62 0.1  86   6  89   0 oracle/1
27956 oracle    32 4.8 0.0 0.0 0.0 0.0  63 0.1  83   2  83   0 oracle/1
27956 oracle    30 4.5 0.0 0.0 0.0 0.0  65 0.1  77   5  77   0 oracle/1
27956 oracle    28 4.4 0.0 0.0 0.0 0.0  67 0.1  74   3  73   0 oracle/1
27956 oracle    22 3.4 0.0 0.0 0.0 0.0  74 0.1  58   4  58   0 oracle/1
27956 oracle    29 4.4 0.0 0.0 0.0 0.0  66 0.1  72   9  72   0 oracle/1
27956 oracle    33 5.0 0.0 0.0 0.0 0.0  62 0.1  85   3  87   0 oracle/1
27956 oracle    26 4.0 0.0 0.0 0.0 0.0  70 0.1  68   5  68   0 oracle/1
27956 oracle    26 3.9 0.0 0.0 0.0 0.0  70 0.1  63   7  63   0 oracle/1
27956 oracle    34 4.6 0.0 0.0 0.0 0.0  61 0.1  78   5  78   0 oracle/1
27956 oracle    31 4.2 0.0 0.0 0.0 0.0  65 0.1  70   5  70   0 oracle/1
27956 oracle    34 5.0 0.0 0.0 0.0 0.0  61 0.1  83   4  84   0 oracle/1
27956 oracle    29 4.4 0.0 0.0 0.0 0.0  66 0.1  67   5  68   0 oracle/1
27956 oracle    27 4.1 0.0 0.0 0.0 0.0  68 0.1  68   3  68   0 oracle/1
27956 oracle    30 4.5 0.0 0.0 0.0 0.0  65 0.1  76   4  76   0 oracle/1
27956 oracle    30 4.5 0.0 0.0 0.0 0.0  65 0.1  76   5  76   0 oracle/1
27956 oracle    37 4.7 0.0 0.0 0.0 0.0  58 0.1  80   5  80   0 oracle/1
27956 oracle    39 5.5 0.0 0.0 0.0 0.0  55 0.1  87   5  90   0 oracle/1
27956 oracle    37 5.3 0.0 0.0 0.0 0.0  57 0.1  92   3  91   0 oracle/1
27956 oracle    33 4.8 0.0 0.0 0.0 0.0  62 0.1  81   4  81   0 oracle/1
27956 oracle    34 4.3 0.0 0.0 0.0 0.0  61 0.1  71   4  71   0 oracle/1
27956 oracle    41 4.9 0.0 0.0 0.0 0.0  54 0.1  80   4  81   0 oracle/1
27956 oracle    33 4.5 0.0 0.0 0.0 0.0  63 0.1  74   4  73   0 oracle/1
27956 oracle    34 4.7 0.0 0.0 0.0 0.0  61 0.1  78   4  80   0 oracle/1
27956 oracle    32 4.2 0.0 0.0 0.0 0.0  64 0.1  72   5  72   0 oracle/1
27956 oracle    33 4.2 0.0 0.0 0.0 0.0  62 0.1  67   6  67   0 oracle/1
27956 oracle    32 3.8 0.0 0.0 0.0 0.0  65 0.1  61   4  61   0 oracle/1
27956 oracle    35 4.2 0.0 0.0 0.0 0.0  61 0.1  72   5  72   0 oracle/1
27956 oracle    28 4.3 0.0 0.0 0.0 0.0  68 0.1  74   5  74   0 oracle/1
27956 oracle    23 3.9 0.0 0.0 0.0 0.0  73 0.1  65   4  67   0 oracle/1
27956 oracle    27 4.3 0.0 0.0 0.0 0.0  68 0.1  72   4  72   0 oracle/1
27956 oracle    21 3.4 0.0 0.0 0.0 0.0  75 0.1  58   2  58   0 oracle/1
27956 oracle    30 4.2 0.0 0.0 0.0 0.0  66 0.1  69   4  69   0 oracle/1
27956 oracle    29 4.2 0.0 0.0 0.0 0.0  67 0.1  72   3  73   0 oracle/1
27956 oracle    25 4.0 0.0 0.0 0.0 0.0  71 0.1  69   5  68   0 oracle/1
27956 oracle    24 3.9 0.0 0.0 0.0 0.0  72 0.1  62   2  64   0 oracle/1
27956 oracle    29 4.2 0.0 0.0 0.0 0.0  66 0.1  72   5  72   0 oracle/1
27956 oracle    31 4.0 0.0 0.0 0.0 0.0  65 0.1  66   3  66   0 oracle/1
27956 oracle    27 4.3 0.0 0.0 0.0 0.0  69 0.1  71   4  71   0 oracle/1

Test 2: oracle returns all the data in a block to client side, sql*net is the bottle neck


SQL> set autotrace traceonly stat
SQL> select * from test_net1;
100000 rows selected.
Statistics
----------------------------------------------------------
0  recursive calls
0  db block gets
11481  consistent gets
0  physical reads   ==> No PIO, if PIO involved, then cpu usage will be even lower.
0  redo size
34895444  bytes sent via SQL*Net to client
73814  bytes received via SQL*Net from client
6668  SQL*Net roundtrips to/from client
0  sorts (memory)
0  sorts (disk)
100000  rows processed

prstat -mLc -p 27956 1 100 | grep 27956

27956 oracle   2.8 0.5 0.0 0.0 0.0 0.0  97 0.1  77   1 629   0 oracle/1
27956 oracle   5.4 0.9 0.1 0.0 0.0 0.0  94 0.2 180   2  1K   0 oracle/1
27956 oracle   5.4 1.0 0.1 0.0 0.0 0.0  93 0.1 172   0  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   1  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   2  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.1 172   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   2  1K   0 oracle/1
27956 oracle   5.5 1.0 0.1 0.0 0.0 0.0  93 0.1 173   2  1K   0 oracle/1
27956 oracle   5.7 1.1 0.1 0.0 0.0 0.0  93 0.2 173   0  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.2 174   2  1K   0 oracle/1
27956 oracle   5.4 1.1 0.1 0.0 0.0 0.0  93 0.1 170   2  1K   0 oracle/1
27956 oracle   5.4 1.2 0.1 0.0 0.0 0.0  93 0.1 170   2  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.1 171   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 171   1  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 171   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.2 174   1  1K   0 oracle/1
27956 oracle   5.6 1.2 0.1 0.0 0.0 0.0  93 0.1 170   3  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.1 171   3  1K   0 oracle/1
27956 oracle   5.4 1.0 0.1 0.0 0.0 0.0  93 0.1 172   1  1K   0 oracle/1
27956 oracle   5.4 1.0 0.1 0.0 0.0 0.0  93 0.1 172   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 171   3  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   1  1K   0 oracle/1
27956 oracle   5.7 1.1 0.1 0.0 0.0 0.0  93 0.2 171   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.2 172   1  1K   0 oracle/1
27956 oracle   5.5 1.0 0.1 0.0 0.0 0.0  93 0.1 171   1  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.2 172   2  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.2 173   2  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.1 173   1  1K   0 oracle/1
27956 oracle   5.4 1.3 0.1 0.0 0.0 0.0  93 0.1 170   1  1K   0 oracle/1
27956 oracle   5.5 1.2 0.1 0.0 0.0 0.0  93 0.1 171   3  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 173   1  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 171   1  1K   0 oracle/1
27956 oracle   5.5 1.3 0.1 0.0 0.0 0.0  93 0.2 170   4  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   1  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.1 172   1  1K   0 oracle/1
27956 oracle   5.5 1.4 0.1 0.0 0.0 0.0  93 0.1 170   1  1K   0 oracle/1
27956 oracle   5.5 1.1 0.1 0.0 0.0 0.0  93 0.2 172   1  1K   0 oracle/1
27956 oracle   5.6 1.1 0.1 0.0 0.0 0.0  93 0.2 173   0  1K   0 oracle/1
27956 oracle   5.7 1.1 0.1 0.0 0.0 0.0  93 0.2 172   1  1K   0 oracle/1
27956 oracle   2.4 0.4 0.0 0.0 0.0 0.0  97 0.1  65   0 517   0 oracle/1
27956 oracle   0.0 0.0 0.0 0.0 0.0 0.0 100 0.0   0   0   0   0 oracle/1
27956 oracle   0.0 0.0 0.0 0.0 0.0 0.0 100 0.0   0   0   0   0 oracle/1
27956 oracle   0.0 0.0 0.0 0.0 0.0 0.0 100 0.0   0   0   0   0 oracle/1
27956 oracle   0.0 0.0 0.0 0.0 0.0 0.0 100 0.0   0   0   0   0 oracle/1

Read Full Post »