7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整

7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整

上篇了解了ORACLE的逻辑体系结构及一些基本查看命令。接下深入看看如何调整。

 

1.  BLOCK调整

9i以后的版本中,ORACLE支持用户在新建用户表空间时指定块的大小。这样在多个表空间时,各自的BLOCK大小可能各不相同。

           只能是新建自己的用户表空间,不能更改已建好的,更不能更改或调整系统表空间。

查看一个参数:

SQL>show parameter cache_size;

NAME                                             TYPE         VALUE

----------------------------------------------- ------------------------------

client_result_cache_size         big integer 0

db_16k_cache_size                   big integer0

db_2k_cache_size                     biginteger 0

db_32k_cache_size                   big integer0

db_4k_cache_size                    biginteger 0

db_8k_cache_size                     biginteger 0

db_cache_size                            big integer 0

db_flash_cache_size                 big integer 0

db_keep_cache_size                           biginteger 0

db_recycle_cache_size                       big integer 0

           创建一个16KBBLOCK_SIZE的表空间,需要先将db_16k_cache_size 取值设置为非空:

SQL>alter system setdb_16k_cache_size=100m;

SQL>show parameter 16k;

NAME                                             TYPE         VALUE

----------------------------------------------- ------------------------------

db_16k_cache_size                   big integer112M

SQL>create tablespace tbs_toad_16k blocksize 16k datafile'+DATA/ORCL/DATAFILE/tbs_toad_16k_01.dbf' size 100m

    autoextend on

    extent management local

    segment space managementauto;

create tablespace tbs_toad_16k blocksize 16k datafile'+DATA/ORCL/DATAFILE/tbs_toad_16k_01.dbf' size 100m

查看:

SQL> select tablespace_name,block_size from dba_tablespaceswhere tablespace_name  in('TBS_TOAD','TBS_TOAD_16K');

 

TABLESPACE_NAME BLOCK_SIZE

--------------- ----------

TBS_TOAD                8192

TBS_TOAD_16K               16384

 

2.  PCTFREE参数与调整

在只读数据库或者只有插入删除很少更新的数据库环境中,才合适将PCTFREE设置为0。

ORACLE有一个默认的属性,PCTFREE=10,这个参数在数据库层面生效,建表时如果指定PCTFREE为别的值,那这个T表或者说SEGMENT T的所有块的属性就是其他了。

 

 

3.  EXTENT 尺寸与调整

创建一个每次扩展10M的表空间,如下:

SQL> create tablespace TBS_TOAD_2datafile '+DATA/ORCL/DATAFILE/tbs_toad_2.dbf' size 100m extent management local

   uniform size 10m

   segment space management auto;

在TBS_TOAD_2上创建一个T2

然后执行查询

SQL> create table t2 (id int) tablespace tbs_toad_2;

SQL> select segment_name,extent_id,tablespace_name,bytes/1024/1024,blocksfrom user_extents where segment_name='T2';

no rows selected

为空。

然后进行插入,然后查看如下:

SQL> insert into t2 select rownum fromdual connect by level<=1000000;

SQL> selectsegment_name,extent_id,tablespace_name,bytes/1024/1024,blocks from user_extentswhere segment_name='T2';

 

SEGMENT_NAME      EXTENT_ID TABLESPACE_NAME BYTES/1024/1024     BLOCKS

--------------- ---------- ------------------------------ ----------

T2                           0 TBS_TOAD_2                              10      1280

T2                           1 TBS_TOAD_2                              10      1280

 

4.  已用和未用的表空间

查看剩余的空间。

SQL> select sum(bytes)/1024/1024 from dba_free_space wheretablespace_name = 'TBS_TOAD';

 

SUM(BYTES)/1024/1024

--------------------

                       68

查看总共表空间大小:

SQL> select sum(bytes)/1024/1024 from dba_data_files wheretablespace_name = 'TBS_TOAD';

SUM(BYTES)/1024/1024

--------------------

                      100

4.1      表空间大小与自动扩展

如果表空间不能自动扩展,用光后,继续插入会引起报错。

可以给表空间增加文件

SQL> alter tablespace tbs_toad adddatafile '+DATA/ORCL/DATAFILE/tbs_toad02.dbf' size 10m;

 

Tablespace altered.

再次用光就又没了,查看表空间是否支持自动扩展如下:

SQL> select file_name,tablespace_name,autoextensible,bytes/1024/1024from dba_data_files where tablespace_name='TBS_TOAD';

 

FILE_NAME

--------------------------------------------------------------------------------

TABLESPACE_NAME AUT BYTES/1024/1024

--------------- --- ---------------

+DATA/ORCL/DATAFILE/tbs_toad01.dbf

TBS_TOAD          NO               100

 

+DATA/ORCL/DATAFILE/tbs_toad02.dbf

TBS_TOAD          NO               10

 

NO表示不自动扩展。

可以设置自动扩展如下:

SQL> alter database datafile'+DATA/ORCL/DATAFILE/tbs_toad02.dbf' autoextend on;

 

Database altered.

 

SQL> select file_name,tablespace_name,autoextensible,bytes/1024/1024from dba_data_files where tablespace_name='TBS_TOAD';

 

FILE_NAME

--------------------------------------------------------------------------------

TABLESPACE_NAME AUT BYTES/1024/1024

--------------- --- ---------------

+DATA/ORCL/DATAFILE/tbs_toad01.dbf

TBS_TOAD          NO               100

 

+DATA/ORCL/DATAFILE/tbs_toad02.dbf

TBS_TOAD          YES              10

表空间会自动扩展,当然要小心磁盘空间的使用哦!

也可以在创建表空间的时候,加上autoextend on即可。

删除表空间命令

SQL>drop tablespace TBS_TOAD includingcontents and datafiles;

(PS:windows的数据文件需要自己手动删除)

 

表空间扩展的大小可以设定参数为next 64k 或者其他, 类似扩展区的 uniform 64k。

还可以限定最大尺寸,参数为 maxsize 5G或者其他.

 

Extent management local 和 segmentspace management auto

10g以后不需要这两行命令了其实。系统默认是区的本地管理和段的自动管理。

以前区管理是依据数据字典的,导致系统产生大量的递归调用,后来改为通过区上的位图标记来管理区的扩展,性能得以极大提升。10g 以上完全取消了字典管理功能。

 

 

5.  回滚表空间

查看,系统自带的回滚表空间,当前使用的回滚表空间

SQL> show parameter undo;

 

NAME                                             TYPE         VALUE

----------------------------------------------- ------------------------------

temp_undo_enabled                          boolean   FALSE

undo_management                           string        AUTO

undo_retention                          integer     900

undo_tablespace                      string        UNDOTBS1

自己也可以创建一个回滚表空间的,查看我们之前创建的如下:

SQL> select tablespace_name,status fromdba_tablespaces where contents='UNDO';

 

TABLESPACE_NAME STATUS

--------------- ---------

UNDOTBS1         ONLINE

UNDOTBS2         ONLINE

查看回滚表空间的大小:

SQL> select tablespace_name,sum(bytes)/1024/1024 fromdba_data_files where tablespace_name in ('UNDOTBS1','UNDOTBS2') group bytablespace_name;

 

TABLESPACE_NAME SUM(BYTES)/1024/1024

--------------- --------------------

UNDOTBS1                                95

UNDOTBS2                              100

切换回滚表空间可以,如下:

SQL>alter system set undo_tablespace=undotbs2 ;

SQL> show parameter undo

 

NAME                                             TYPE         VALUE

----------------------------------------------- ------------------------------

temp_undo_enabled                          boolean   FALSE

undo_management                           string        AUTO

undo_retention                          integer     900

undo_tablespace                      string        UNDOTBS2

           数据库的回滚表空间可以有多个,并且自由切换,但是数据库当前使用的回滚表空间只能有一个(RAC会有多个)。

 

6.  临时表空间新建与切换

临时表空间在数据库中也可以有多个,但是可以被同时使用。

SQL> select tablespace_name,sum(bytes)/1024/1024 fromdba_temp_files group by tablespace_name;

 

TABLESPACE_NAME SUM(BYTES)/1024/1024

--------------- --------------------

TEMP                                           60

TEMP_ZOU                             100

当前TOAD用户使用的临时表空间时 TEMP_ZOU这个。

SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='TOAD';

 

DEFAULT_TABLESPACE            TEMPORARY_TABLESPACE

------------------------------------------------------------

TBS_TOAD                           TEMP_ZOU

SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='SYSTEM';

 

DEFAULT_TABLESPACE            TEMPORARY_TABLESPACE

------------------------------------------------------------

SYSTEM                                TEMP

切换使用的临时表空间

SQL> alter user toad temporarytablespace temp;

 

User altered.

SQL> select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_userswhere username='TOAD';

DEFAULT_TABLESPACE            TEMPORARY_TABLESPACE

------------------------------------------------------------

TBS_TOAD                           TEMP

发生了切换。

多少用户在使用多少临时表空间

SQL> selecttemporary_tablespace,count(*) from dba_users group by temporary_tablespace;

 

TEMPORARY_TABLESPACE                    COUNT(*)

------------------------------ ----------

TEMP                                                43

切换全部临时表空间

SQL>alter database default temporarytablespace temp_toad;

 

6.1      临时表空间组

临时表空间组可以通过观察数据字典dba_tablespace_groups得到,可以为同一用户的不同SESSION设置不同的临时表空间。

SQL> select *from dba_tablespace_groups;

 

no rows selected

创建临时表空间组:

SQL> create temporary tablespace temp1_1tempfile '+DATA/ORCL/DATAFILE/temp1_1.dbf' size 10m tablespace grouptemp_group1;

Tablespace created.

SQL> create temporary tablespace temp1_2 tempfile'+DATA/ORCL/DATAFILE/temp1_2.dbf' size 10m tablespace group temp_group1;

Tablespace created.

查看:

SQL> select * from dba_tablespace_groups;

 

GROUP_NAME                   TABLESPACE_NAME

------------------------------------------------------------

TEMP_GROUP1                            TEMP1_1

TEMP_GROUP1                            TEMP1_2

移动临时表空间

SQL> alter tablespace temp_zou tablespace group temp_group1;

 

Tablespace altered.

 

SQL>  select * fromdba_tablespace_groups;

 

GROUP_NAME                   TABLESPACE_NAME

------------------------------------------------------------

TEMP_GROUP1                            TEMP_ZOU

TEMP_GROUP1                            TEMP1_1

TEMP_GROUP1                            TEMP1_2

修改TOAD用户的默认临时表空间改为临时表空间组

SQL> alter user toad temporarytablespace temp_group1;

 

User altered.

查看如下:

SQL> select temporary_tablespace fromdba_users where username='TOAD';

 

TEMPORARY_TABLESPACE

------------------------------

TEMP_GROUP1

然后使用多个TOAD用户登录进行试验:

每个SESSION都执行如下:

SQL> select a.table_name,b.table_name from all_tablesa,all_tables b order by a.table_name;

不同的SESSION都自动分配到了不同的临时表空间。

查看:

Select username,session_num,tablespace fromv$sort_usage;

可以具体尝试。

临时表空间组可以设置多个。

让数据库在运行时自动从临时表空间组中选择各个临时表空间。在SESSION层面进行IO均衡负载,极大地提升了数据库的性能。

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值