视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
关于db_block_size的理解和实验
2020-11-09 14:51:02 责编:小采
文档

关于对db_block_gets的理解与实验 实验 一、 自己手动创建的小表 创建一个区大小为 40k SYS@ORCLshow parameter db_block_size NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_block_size integer 819

关于对db_block_gets的理解与实验

实验

一、 自己手动创建的小表

创建一个区大小为 40k
SYS@ORCL>show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

SYS@ORCL>create tablespace tyger1 datafile '/u01/app/oracle/oradata/ORCL/tyger1.dbf' size 10m
2 extent management local uniform size 40k;

Tablespace created.

SYS@ORCL>create table test_db1(x int) tablespace tyger1;

Table created.

SYS@ORCL>set autotrace on
SYS@ORCL>insert into test_db1 values(1);

1 row created.

Execution Plan
----------------------------------------------------------
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
19 db block gets
1 consistent gets
3 physical reads
9 redo size
675 bytes sent via SQL*Net to client
562 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SYS@ORCL>insert into test_db1 values(2);

1 row created.

Execution Plan
----------------------------------------------------------

-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
3 db block gets
1 consistent gets
0 physical reads
244 redo size
675 bytes sent via SQL*Net to client
562 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

2. 创建一个区 大小为80k
SYS@ORCL>create tablespace tyger2 datafile '/u01/app/oracle/oradata/ORCL/tyger2.dbf' size 10m
2 extent management local uniform size 80k;

Tablespace created.

SYS@ORCL>create table test_db2(x int) tablespace tyger2;

Table created.

SYS@ORCL>insert into test_db2 values(1);

1 row created.

Execution Plan
----------------------------------------------------------

-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
29 db block gets
1 consistent gets
28 physical reads
13 redo size
675 bytes sent via SQL*Net to client
562 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SYS@ORCL>insert into test_db2 values(2);

1 row created.

Execution Plan
----------------------------------------------------------

-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
3 db block gets
1 consistent gets
0 physical reads
288 redo size
677 bytes sent via SQL*Net to client
562 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

结论:对于新创建的表来说,因为创建的是空表就没有对表里的空间进行分配,当插入第一条数据时,就需要对区上的块进行空间分配和对数据字典的一些操作,就会有比较大的db_block_size。如果再次插入数据的话就基本没有对空间的分配啥的,就会有比较少的db_block_size产生。

所以对于extent指定的区大小来说 同样的空表插入同样的数据 db_block_size 可能不同。

对插入更新、删除的实验:
SYS@ORCL>update test_db1 set x=3 where x=1;

1 row updated.

Execution Plan
----------------------------------------------------------
Plan hash value: 2185639234

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |
| 1 | UPDATE | TEST_DB1 | | | | |
|* 2 | TABLE ACCESS FULL| TEST_DB1 | 1 | 13 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("X"=1)

Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
28 recursive calls
1 db block gets
11 consistent gets
0 physical reads
388 redo size
678 bytes sent via SQL*Net to client
565 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SYS@ORCL>delete test_db1 where x=2;

1 row deleted.

Execution Plan
----------------------------------------------------------
Plan hash value: 3135214910

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |
| 1 | DELETE | TEST_DB1 | | | | |
|* 2 | TABLE ACCESS FULL| TEST_DB1 | 1 | 13 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("X"=2)

Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
5 recursive calls
1 db block gets
9 consistent gets
0 physical reads
288 redo size
678 bytes sent via SQL*Net to client
557 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SYS@ORCL>insert into test_db1 values(&x);
Enter value for x: 1
old 1: insert into test_db1 values(&x)
new 1: insert into test_db1 values(1)

1 row created.

。。
SYS@ORCL>commit;

Commit complete.

SYS@ORCL>select * from test_db1;

X
----------
3
1
2
3
4
5
6
7
8
9
19
10
1
11
12
13
14
15
16
17
18

21 rows selected.

SYS@ORCL>alter system flush buffer_cache;

System altered.
SYS@ORCL>update test_db1 set x=21 where x=18;

1 row updated.

Execution Plan
----------------------------------------------------------
Plan hash value: 2185639234

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 |
| 1 | UPDATE | TEST_DB1 | | | | |
|* 2 | TABLE ACCESS FULL| TEST_DB1 | 1 | 13 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("X"=18)

Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
5 recursive calls
1 db block gets
9 consistent gets
0 physical reads
412 redo size
678 bytes sent via SQL*Net to client
567 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

二、对于比较大的表来说

SYS@ORCL>create table test_db1 as select * from dba_objects;

Table created.

SYS@ORCL>insert into test_db1 values('tyger','tyger','tyger',22,23,'tyger','04-SEP-14','04-SEP-14','tyger','t','t','t','t');

1 row created.

Execution Plan
----------------------------------------------------------

-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------

Statistics
----------------------------------------------------------
1 recursive calls
15 db block gets
1 consistent gets
5 physical reads
1144 redo size
677 bytes sent via SQL*Net to client
6 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed

SYS@ORCL>alter system flush buffer_cache;

System altered.

SYS@ORCL>update test_db1 set OBJECT_NAME='tom' where owner='tyger';

3 rows updated.

Execution Plan
----------------------------------------------------------
Plan hash value: 2185639234

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | UPDATE STATEMENT | | 8 | 6 | 154 (2)| 00:00:02 |
| 1 | UPDATE | TEST_DB1 | | | | |
|* 2 | TABLE ACCESS FULL| TEST_DB1 | 8 | 6 | 154 (2)| 00:00:02 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("OWNER"='tyger')

Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
5 recursive calls
3 db block gets
769 consistent gets
687 physical reads
824 redo size
679 bytes sent via SQL*Net to client
5 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
3 rows processed
SYS@ORCL>delete test_db1 where owner='tyger';

3 rows deleted.

Execution Plan
----------------------------------------------------------
Plan hash value: 3135214910

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 8 | 136 | 154 (2)| 00:00:02 |
| 1 | DELETE | TEST_DB1 | | | | |
|* 2 | TABLE ACCESS FULL| TEST_DB1 | 8 | 136 | 154 (2)| 00:00:02 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

2 - filter("OWNER"='tyger')

Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
4 recursive calls
3 db block gets
769 consistent gets
0 physical reads
10 redo size
679 bytes sent via SQL*Net to client
567 bytes received via SQL*Net from client
4 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
3 rows processed

结论:对于占用多个段的大表来说,可能对数据修改时 对 数据字典 或者对于区、块的分配都包含在 physical reads中。

感想:

对于生产库来说,这个值一般不会太考虑到底数字是怎么来的,因为数字都比较大,一般只在乎它的大小数量级。

下载本文
显示全文
专题