AD:
在Oracle性能調整的要點中,·如何提升block的效率也是非常重要的,同樣在提升block的效率中我們也要有一些東西是需要我們注意的。以下的文章就是對在Oracle性能調整提升block的效率中需要注意的問題的詳細介紹。
1、避免動態分配的缺陷
創建本地管理的表空間;
合理設置segment的大小;
監控將要擴展的segment:
- SELECT owner, table_name, blocks, empty_blocks
FROM dba_tables WHERE empty_blocks /
(blocks+empty_blocks) < .1;
2、high water mark
記錄在segment header block中,在segment創建的時候設定在segment的起始位置,當記錄被插入的時候以Oracle性能調整的十大要點中的提升block的增量增加,truncate可以重設high water mark的位置,但delete不能。
在full table scan中,Oracle會讀取high water mark以下的所有的數據塊,所以high water mark以上的塊也許會浪費存儲空間,但不會降低性能。
可以通過下列方法收回表中high water mark以上的塊:
- Alter table_name deallocate unused;
對於high water mark以下的塊:
使用import/export工具:export數據;drop或truncate表;import數據。或者利用alter table tanle_name move命令去移動表的存儲位置(此時需要重建索引)。
3、表統計
用analyize命令生成表統計,然後到dba_table查詢相關信息。
- ANALYZE TABLE ndls.t_wh_shipping_bill COMPUTE STATISTICS;
- SELECT num_rows, blocks, empty_blocks as empty,avg_space,
chain_cnt, avg_row_len FROM dba_tables WHERE owner =
'NDLS' AND table_name='T_WH_SHIPPING_BILL';- Columns Description
- NUM_ROWS Number of rows in the table
- BLOCKS Number of blocks below the table high-water mark
- EMPTY_BLOCKS Number of blocks above the table high-water mark
- AVG_SPACE Average free space in bytes in the blocks
below high-water mark- AVG_ROW_LEN Average row length, including row overhead
- CHAIN_CNT Number of chained or migrated rows in the table
4、block size
通過下列方法可以最小化block的訪問次數:
使用更大的Oracle性能調整的十大要點中的提升block size;緊密壓縮行;阻止行鏡像。後兩者存在沖突,越多的行被壓縮在一個block裡,越容易產生鏡像。Oracle性能調整的十大要點中的提升Block size 在數據庫創建的時候設定,不能被輕易改變,是讀取數據文件時最小的IO單元,大小范圍是2K-64K,應該設置成OS塊的整數倍,小於或等於OS IO時能讀取的存儲區域。
較小的block size的優點:極少block競爭;有利於較小的行和隨機訪問。缺點是存在相當高的成本,每個block的行數更少,可能需要讀取更多的index塊。Block size的選擇影響系統的性能,在一個OLTP環境中,較小的block size更合適,而在DSS環境中,適宜選擇較大的block size。