1、oracle默认一个区中有8个块,每个块8K,系统块4K(ext3)
oracle中块可改变大小:2K、4K、8K、16K、32K
2、
OLTP交易系统(请求数多,能读/写)(块小好,不过一般8K即可,很少改动)
OLAP
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
系统(尽量少)(请求数少,只能读)(块大好)
3、创建16K块大小的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
空间
3.1查看内存中块大小的缓存空间:show parameter size;
3.2创建16K的块的缓存空间:alter system set db_16k_cache_size=10m;
3.3创建16K大小块的表空间
create tablespace testnblock
2 datafile '/home/oracle/testnblock.dbf' size 10M
3 blocksize 16k;
4、创建表空间为testnblock的表
create table ab tablespace testnblock as select * from dba_objects;
查看表ab状态
select * from user_extents where segment_name='AB';
只有第一个区还是8个块,其余块数减小一半,原因是每个块16K
5、数据块存储结构
5.1块头:存储基本信息,块属于哪个数据文件等
5.2块空闲区:每个数据库的空闲剩余量,供给update语句使用,避免行迁移
5.3块使用区:真正存储数据部分
6数据块空间利用参数(查看实际表空间利用参数)
6.1initrans (默认)1 单个数据块DML语句初始并发数(事务槽)
6.2maxtrans 255 单个数据块DML语句最大并发数
6.3pctfree 每个数据块的空间剩余量,供给update语句使用
6.4pctused 每个数据块的空间使用量
6.5除PCTFREE参数外,其他存储参数均由oracle自动控制
7、行迁移
7.1update时修改的内容当前块放不下了,便将修改行放到其他块中,而在原来位置放置一个指针,指向迁移到的位置,而迁移的行仍属于原来的块,此为行迁移。
7.2行迁移影响查询速度,因为增加了寻址操作。
7.3块中pctfree 默认%10,供update多出的空间使用,减少了行迁移。
7.4只有pcdused小于%50时才能往块中插入新数据,保证数据连续。
8、实验演示pctfree
8.1SQL> create table tab_rc
2 (name01 char(1000),
3 name02 char(1000),
4 name03 char(100))
5 pctfree 0;
Table created.
8.2插入数据
此时应该发送了行迁移
8.3验证行迁移
分析表:analyze table tab_rc compute statistics;
查看迁移select t.table_name,t.chain_cnt from user_tables t where table_name='TAB_RC';
可以看到有一行数据发生迁移
8.4第二种
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
验证行迁移,解析rowid(行地址)
全表扫描:扫描所有(表中的所有块,块中的所有行)
行扫描:要有行地址
select rowid from tab_rc;
8.5行格式组成
6位对象号,3位文件号,6位块号,3位行号
8.6行地址解析
8.6.1解析对象号:select dbms_rowid.rowid_object(rowid) from tab_rc;
select * from dba_objects where object_id='51556';可以查看该对象属于哪个用户
8.6.2解析文件号:select dbms_rowid.rowid_relative_fno(rowid) from tab_rc;
select * from dba_data_files where file_id=1;可以查看该file_id属于哪个文件
8.6.3解析块号:select dbms_rowid.rowid_block_number(rowid) from tab_rc;
8.6.4解析行号:select dbms_rowid.rowid_row_number(rowid) from tab_rc;
9、实验
9.1创建表:create table ff as select * from scott.emp;
9.2查看ename=’SCOTT’行在哪个表,哪个块中
select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from ff where ename='SCOTT';
9、挖掘块的内容
9.1 select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from tab_rc;
9.2开启捕获功能:oradebug setmypid;
9.3抽取1号文件的60282号块的内容:alter system dump datafile 1 block 60282;
9.4查看抽到了哪个文件中:oradebug tracefile_name;
9.5查看该文件
[oracle@localhost ~]$ more /oracle/app/admin/test/udump/test_ora_28606.trc
黑颜色部分代表第一行,很显然做了迁移,nrid为一个指针
9.6查看迁移到的文件的块
select dbms_utility.DATA_BLOCK_ADDRESS_FILE(to_number('0040eb7b','xxxxxxxx')) file#,
dbms_utility.DATA_BLOCK_ADDRESS_BLOCK(to_number('0040eb7b','xxxxxxxx')) block#
from dual;