Oracle的空间管理
三 关于连续空间
可以用下面的语句来查看数据库中的自由空间:
|
SQL > select * from dba_free_space where tablespace_name=''SFSJTS'' 2 order by block_id; TABLESPACE FILE_ID BLOCK_ID BYTESBLOCKS _NAME ----------- --------- -------------- SFSJTS 6 133455 1064960 130 SFSJTS 6 133719 1032192 126 SFSJTS 6 133845 1064960 130 SFSJTS 6 135275 1064960 130 SFSJTS 6 135721 606208 74 SFSJTS 6 139877 901120 110 SFSJTS 6 143497 737280 90 SFSJTS 6 220248 737280 90 SFSJTS 6 246228 491520 60 SFSJTS 6 261804 1064960 130 10 rows selected. |
我们可以通过命令的结果来估计相邻自由空间的真正数量。对每一行,用起始快的id(BLOCK_ID)加上自由块(BLOCKS)的数量,如果其和与下一行的块id(BLOCK_ID)相等,则此两行是连续的。如上例第二行和第三行,133719+126=133845,而1338456+130!=135275,所以从block_id为133719开始,有126+130=256个block的连续空间。
在Oracle数据库的后台,系统监视器(SMON)周期性地合并自由空间相邻的块,以得到更大的连续块。而DBA可以用SQL命令来完成这个工作:
alter tablespace tablespace_name coalesce;
Oracle空间管理对数据库的工作性能有重要影响,其管理方法值得我们认真摸索研究。