q1: 插入了一行之後,持續插入一行,是在原來的塊還是新的塊? 如果判斷這個塊有沒有剩餘空間
在選擇在哪個塊進行插入時,會根據進程算一個hash值。堆表是隨機插入的,在插入的時候,隨機找到高水位以下的空閒塊進行插入,一個區是由8個塊組成,
前三個塊是不可用的塊。
drop table t10;
create table t10(id int);
insert into t10 values(1);
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;
DBMS_ROWID.ROWID_RELATIVE_FNO( BLOCK#
------------------------------ ----------
4 12167
SQL> insert into t10 values(2);
1 row inserted
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;
DBMS_ROWID.ROWID_RELATIVE_FNO( BLOCK#
------------------------------ ----------
4 12167
4 12167
commit;
新開一個會話。
insert into t10 values(3);
SQL> select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) block# from t10;
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) BLOCK#
------------------------------------ ----------
4 12165
4 12167
4 12167
如果我有100000 個0 和1個1,hash函數是無法均分的
因爲0算出的hash值是一樣的,會落在一個分區表裏
t1 t2--T1,T2分別有是個分區。
10 10
--如果連接列是t1.tid = t2.tid,那麼tid一定是在一個分區,兩個分區就可以進行連接。
兩個很大的分區表進行運算
這個時候我們希望分區之間可以單獨做運算
分區跟分區之間數據進行匹配就可以了
pctused:一個塊的使用水位的百分比,這個水位將使該塊返回到可用列表中去等待更多的插入操作。
pctfree:用來爲一個
塊保留的空間百分比,以防止在今後的更新操作中增加一列或多列值的長度。
FILE_ID RELATIVE_FNO
相對文件號儘量同絕對文件號保持一致,直到表空間中的文件數超出1023
select file_id,relative_fno from dba_data_files where tablespace_name='USERS';
FILE_ID RELATIVE_FNO
---------- ------------
3 3
9 9
10 10
11 11
12 12
13 13
14 14
15 15
.. ..
.. ..
.. ..
1020 1020
1021 1021
1022 1022
1023 1023
1024 1
create table testblock(
id number,
name varchar(4)
)
插入3條數據然後提交:
insert into testblock values(1,'a');
insert into testblock values(2,'b');
insert into testblock values(3,'c');
commit;
查詢相對文件號和塊號
select rowid,dbms_rowid.rowid_relative_fno(rowid) rel_fno,dbms_rowid.rowid_block_number(rowid) blockno from testblock;
ROWID REL_FNO BLOCKNO
-------------------------------------------------------------------------------- ---------- ----------
AAASYaAAEAAAC+PAAA 4 12175
AAASYaAAEAAAC+PAAB 4 12175
AAASYaAAEAAAC+PAAC 4 12175
alter system dump datafile 4 block 2140;
創建表空間
create tablespace tbs02
datafile 'E:/TBS022.DBF' size 10M autoextend on next 2M maxsize 50m;
SQL> select * from dba_data_files where tablespace_name='drop tablespace tbs02 including contents and datafiles;
';
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
-------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- -------------
E:\TBS022.DBF 6 TBS02 10485760 1280 AVAILABLE 6 YES 52428800 6400 256 9437184 1152 ONLINE
刪除表空間並刪除數據文件
SQL>drop tablespace tbs02 including contents and datafiles;
Tablespace dropped
SQL> select * from dba_data_files where tablespace_name='TBS02';
FILE_NAME FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS RELATIVE_FNO AUTOEXTENSIBLE MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ONLINE_STATUS
-------------------------------------------------------------------------------- ---------- ------------------------------ ---------- ---------- --------- ------------ -------------- ---------- ---------- ------------ ---------- ----------- -------------
SQL> alter system dump datafile 4 block 2140; --DUMP數據文件
存放的位置:11g:
SQL> show parameter dump
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
background_core_dump string partial
background_dump_dest string e:\app\administrator\diag\rdbm
s\hhn\hhs\trace
core_dump_dest string e:\app\administrator\diag\rdbm
s\hhn\hhs\cdump
max_dump_file_size string unlimited
shadow_core_dump string none
user_dump_dest string e:\app\administrator\diag\rdbm
s\hhn\hhs\trace
SQL>
E:\app\Administrator\diag\rdbms\hhn\hhs\trace
hhs_ora_1296.trc
1296是進程號,查找進程號的腳本:
select spid
from v$process
where addr = (select paddr
from v$session
where sid = (select distinct sid from v$mystat));
SQL> select spid
2 from v$process
3 where addr = (select paddr
4 from v$session
5 where sid = (select distinct sid from v$mystat));
SPID
------------------------
1296
buffer tsn: 4 (--該塊對應的表空間號)
(數據塊地址計算方法: 用4個字節32位來表示,前10位爲相對數據文件號,後22位爲塊號)
dba: 0x0100085c (4/2140)
0000 0001 0000 0000 1000 0101 1100
IBM Oracle EMC
MySQL
q1: 插入了一行之後,持續插入一行,是在原來的塊還是新的塊? 數據塊DUMP
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.