oracle的block其實是和os的扇區相對應!

warehouse發表於2008-07-20
oracle的block其實是和os的扇區相對應![@more@]
之所以要說明oracle的block和os的扇區相對應,是因為oracle的doc上提到oracle的block是os的block的整數倍(DB_BLOCK_SIZE specifies (in bytes) the size of Oracle database blocks. Typical values are 4096 and 8192. The value of this parameter must be a multiple of the physical block size at the device level.),那麼oracle中提到的os的block到底是指os的什麼需要明確。
oracle的block其實是和os的扇區相對應,和簇應該沒有任何關係!os的扇區是os的最小io單位
為什麼這樣說:
1、理由1
NTFS下default的簇是4k,fat32下default的是16k,當然透過format格式化的時候可以設定,引數/A:size就是用來設定簇的大小,扇區的大小是否可以修改不知道。os分配空間的單位應該是簇,對應的應該象oracle中的extent,我們可以建立一個txt檔案,裡面寫上2個字元,點選檔案的右鍵發現它的大小是2個byte,但是佔用空間是4k,說明os給這個檔案分配了4k的空間。
C:>fsutil fsinfo ntfsinfo c:
NTFS 卷序列號 : 0xf65059f25059b9d7
版本 : 3.1
區數量 : 0x0000000002710010
簇總數 : 0x00000000004e2002
可用簇 : 0x000000000014aa53
保留總數 : 0x0000000000000060
每個扇區位元組數 : 512
每個簇位元組數 : 4096
每個 FileRecord 段的位元組數 : 1024
每個 FileRecord 段的簇數 : 0
Mft 有效資料長度 : 0x000000000a01c000
Mft 起始 Lcn : 0x00000000000c4dfe
Mft2 起始 Lcn : 0x000000000008019c
Mft 區域起始 : 0x00000000002a5aa0
Mft 區域結尾 : 0x00000000002a5c00
--===========================================
C:>format /?
格式化磁碟以供 Windows XP 使用。

FORMAT volume [/FS:file-system] [/V:label] [/Q] [/A:size] [/C] [/X]
FORMAT volume [/V:label] [/Q] [/F:size]
FORMAT volume [/V:label] [/Q] [/T:tracks /N:sectors]
FORMAT volume [/V:label] [/Q]
FORMAT volume [/Q]

volume 指定驅動器(後面跟一個冒號)、裝入點
或卷名。
/FS:filesystem 指定檔案系統型別(FAT、FAT32 或 NTFS)。
/V:label 指定卷標。
/Q 執行快速格式化。
/C 僅適於 NTFS: 預設情況下,將壓縮在該新建捲上
建立的檔案。
/X 如果必要,先強制卸下卷。那時,該卷所有
已開啟的控制程式碼不再有效。
/A:size 替代預設配置單位大小。極力建議您在一般狀況下使用
預設設定。
NTFS 支援 512、1024、2048、4096、8192、16K、32K、
64K。
FAT 支援 512、1024、2048、4096、8192、16K、32K、
64k,(128k、256k 用於大於 512 位元組的扇區) 。
FAT32 支援 512、1024、2048、4096、8192、16k、32k、
64k,(128k 、256k 用於大於 512 位元組的扇區)。

注意 FAT 及 FAT32 檔案系統對捲上的群集數量有以下限制:

FAT: 群集數量 <= 65526
FAT32: 65526 < 群集數量 < 4177918

如果判定使用指定的群集大小無法滿足以上需求,格式
化將立即停止。

NTFS 壓縮不支援大於 4096 的分配單元。

/F:size 指定要格式化的軟盤大小(1.44)
/T:tracks 為磁碟指定每面磁軌數。
/N:sectors 指定每條磁軌的扇區數。

C:>
2、理由2
如果說oracle中的block對應的不是扇區而是簇,那麼NTFS下簇是4k,但是在oracle中可以建立db_block_size=2k的庫該如何解釋?
3、理由3
log_buffer的大小和os 的block有關,這裡其實提到的os block也是指扇區的大小,絕對不是指簇
If the value of the log_buffer is not an exact multiple of the
OS block size, Oracle will complain with this error. If the OS
block size is 512, a value of 10*512 or 5120 will be valid.
Rounding off to 5100 would generate the error
可以簡單的測試一下,不論如何修改log_buffer的大小,它始終會取512的倍數,因為os的扇區大小是512
SQL> select 2899456/512 from dual;

2899456/512
-----------
5663

SQL> alter system set log_buffer=1234567 scope=spfile;

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 125830500 bytes
Database Buffers 37748736 bytes
Redo Buffers 2945024 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> show parameter log_buffer

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 2899456
SQL> alter system set log_buffer=67891233 scope=spfile;

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。

Total System Global Area 167772160 bytes
Fixed Size 1247516 bytes
Variable Size 54527716 bytes
Database Buffers 41943040 bytes
Redo Buffers 70053888 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> show parameter log_buffer

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 67100672
SQL> select 67100672/512 from dual;

67100672/512
------------
131056

SQL>
4、理由4
redo logfile的大小也是以os block為單位的,可以透過檢視archived log獲得:
SQL> select distinct block_size from v$archived_log;

BLOCK_SIZE
----------
512

SQL>
5、理由5
引數LOG_CHECKPOINT_INTERVAL儘管有些過時,不過從它的解釋提到的operating system blocks再結合理由4我們不難發現oracle中提到的operating system blocks都是對應到了os的扇區上而決不是簇,簇可以理解成os的邏輯感念。
LOG_CHECKPOINT_INTERVAL specifies the frequency of checkpoints in terms of the number of redo log file blocks that can exist between an incremental checkpoint and the last block written to the redo log. This number refers to physical operating system blocks, not database blocks.

綜上所述,oracle中提到的operating system blocks都是指os的扇區,也就是os的最小io單位,和簇沒有關係!那麼oracle一個block所包含的os block是否是連續的無證可查,但是一個簇所包含的扇區都是相鄰的,就像oracle的extent是由連續的block組成的一樣。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/19602/viewspace-1007524/,如需轉載,請註明出處,否則將追究法律責任。

相關文章