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,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,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,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均衡负载,极大地提升了数据库的性能。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |