在Oracle9i中使用多种Block Size
2006-08-05 11:58:36 来源:WEB开发网以下的查询是用来计算当前缓冲中的全部segment的块数目。根据你的缓冲大小,这样或者需要很多排序空间。
column object_name format a40
column number_of_blocks format 999,999,999,999
column object_name format a40
column number_of_blocks format 999,999,999,999
SELECT
o.object_name,
COUNT(1) number_of_blocks
FROM
DBA_OBJECTS o,
V$BH bh
WHERE
o.object_id = bh.objd
AND
o.owner != SYS
GROUP BY
o.object_name
ORDER BY
count(1) desc;
以下让我们看一下缓冲中的对象名和数据块的数目
OBJECT_NAME NUMBER_OF_BLOCKS
---------------------------------------- ----------------
ORDER_TABLE 123,273
ORDER_IDX 112,492
CUSTOMER 83,272
. . .
OEM_EXT 701
创建独立的数据缓冲
在Oracle9i中,将表或者索引块分配到不同数据块大小的表空间是很简单的。在创建一个表空间时,我们会使用一个新的blocksize参数。在以下的例子中,我们在Oracle数据库中创建了一个32K的表空间。
create tablespace
32k_tablespace
datafile
/u01/oradata/mysid/32k_file.dbf
size
100M
blocksize
32k
;
我们一旦创建了表空间,下一步是根据上面的blocksize来设置一个数据库缓冲。要记住,Oracle 9i不再使用init.ora文件,所以我们要通过alter database语句来动态地创建带名字的缓冲。
alter system set db_2k_cache_size=200M;
alter system set db_4k_cache_size=500M;
alter system set db_8k_cache_size=800M;
alter system set db_16k_cache_size=1600M;
一旦我们创建了带名字的内存缓冲和表空间,我们就可以将Oracle对象转移到新的表空间中。对于将对象由一个表空间转移到另一个,有多种方法,而许多的Oracle管理员已经习惯使用create table as select or CTAS语法来移动表格。对于index,则可以使用alter index rebuild转移到另一个表空间。
结论
对于Oracle9i的许多新特性,许多有经验的DBA都认为块的大小对于调整Oracle数据库是最重要的。管理员现在可以使用多达7个独立和不同的数据池,可以对每个数据对象使用的数据缓冲块的数目进行更大的控制。通过考察不同的缓冲访问特性,可以大大地减少磁盘I/O,从而极大地提高数据库的性能。
更多精彩
赞助商链接