2008年11月25日
#
1 . 用Executors構造一個新的線程池
ExecutorService executor = Executors.newCachedThreadPool();
方法 newCachedThreadPool();
創建一個可根據需要創建新線程的線程池,但是在以前構造的線程可用時將重用它們,并在需要時使用提供的 ThreadFactory 創建新線程。
2. 用構造的線程池創建ExecutorFilter
ExecutorFilter es= new ExecutorFilter(executor));

在ExecutorFilter內部:
只需要將相應的事件分發到到線程池的相應線程即可,但是SessionCreated事件只能在主線程中,不能分發
觸發方法
1 .
首先構造一個IoFilterEvent,這個IoFilterEvent包含1、事件的類型,2、下一個過濾器
然后觸發該時間的處理方法。

if (eventTypes.contains(IoEventType.SESSION_OPENED))
{
fireEvent(new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED,
session, null));
}
2 .
從線程池中取出一個線程執行事件處理

protected void fireEvent(IoFilterEvent event)
{
getExecutor().execute(event);
}
在構造ExecutorFilter 時如果沒有傳入IoEventType則默認只對如下幾種幾件感興趣
EXCEPTION_CAUGHT
MESSAGE_RECEIVED
MESSAGE_SENT
SESSION_CLOSED
SESSION_IDLE
SESSION_OPENED
當然還需要覆蓋相應的事件處理方法 如上所示
參數db_block_size;
這個參數只能設置成底層操作系統物理塊大小的整數倍,最好是2的n次方倍。
如WINDOWS下4KB,8KB,16KB
且該參數需要在建庫的時候指定,一旦指定不能更改。
雖然在ORACLE9I以上可以指定表空間的數據庫大小,允許同時使用包括非默認大小在內的數據庫塊大小。不過需要設置指定大小數據塊的buffer_cache.
小的塊:
小的塊降低塊競爭,因為每個塊中的行較少.
小的塊對于小的行有益.
小的塊對于隨意的訪問較好.如果一個塊不太可能在讀入內存后被修改,那么塊的大小越小使用buffer cache越有效率。當內存資源很珍貴時尤為重要,因為數據庫的buffer cache是被限制大小的。
劣勢:
小塊的管理消費相對大.
因為行的大小你可能只在塊中存儲很小數目的行,這可能導致額外的I/O。
小塊可能導致更多的索引塊被讀取
大的塊
好處:
更少的管理消費和更多存儲數據的空間.
大塊對于有順序的讀取較好. 譬如說全表掃描
大塊對很大的行較好
大塊改進了索引讀取的性能.大的塊可以在一個塊中容納更多的索引條目,降低了大的索引級的數量.越少的index level意味著在遍歷索引分支的時候越少的I/O。
劣勢:
大塊不適合在OLTP中用作索引塊,因為它們增加了在索引葉塊上的塊競爭。
如果你是隨意的訪問小的行并有大的塊,buffer cache就被浪費了。例如,8 KB的block size 和50 byte row size,你浪費了7,950