2010年11月29日 星期一

資料庫的Isolation需求

資料來源

Isolation是資料庫系統的ACID其中的一個屬性。它是用來定義一個操作針對資料所做的修改 如何/何時另一個操作所看到。資料庫的Isolation層級從最高到最低排序如下。應用程式開發人員必需依照實際的需求,選用適當的Isolation層級。Isolation層級愈高,愈可能發生deadlock現象;相反地,層級愈低,資料愈可能出現不可預期的不一致現象

Serializable

Serializable是最高的Isolation層級。在此層級之下,交易是依序執行的。也就是說,同一時間內,只能有一個交易針對同一組資料進行操作。雖然資料庫系統仍可允許多個交易同時進行,但是一定要維持交易是依序執行的一個假象。

若以Lock的方式來實作Serializable,當資料庫遇到查詢中有WHERE子句時,就會Acquire一個Range Lock來鎖住WHERE子句條件中,所有牽涉到的資料;另一種非Lock的實作機制,因其不Acquire Lock,所以必需偵測當前的交易是否違反了Serializable的假象,若有違反,必需Rollback交易。Optimistic lock即為一種非Lock的實作機制

Repeatable Read

在此層級下,所有被SELECT語句碰觸到的資料都不能被其它交易所更動。也就是說,資料庫會保證在交易的範圍中,重覆讀取同一筆資料,得到的值都是一樣的。與Serializable的差別在於,Repeatable Read不會Acquire range lock,也就是說,它是讀到一筆資料後,才將該筆資料鎖住,而不會鎖住符合WHERE條件的所有資料。因為不Acquire rangle lock,可能會有phantom reads的情形發生。亦即,在同一個交易中,做兩次的SELECT,可能得到不同數目的Records。

Read Committed

在此層級下,已被一個交易讀取的資料,可以被另一個交易修改,因此無法得到Repeated Read的結果。Read的Lock在資料讀到之後,就馬上放掉;而Write的Lock還是會持續到整個交易結束後才放掉

Read Uncommitted

此層級是最鬆的層級,在此層級下,一個交易可以讀到被改動,而尚未Commit的資料。

2010年11月10日 星期三

分析Java Dump (使用IBM Java)

首先,要產生Dump檔案。在執行Java.exe時,設定-Xdump即可設定所要產生的dump檔案,詳細設定如此連結

例如
-Xdump:heap:events=load,opts=PHD+CLASSIC

在eclipse環境中,要做此設定時,首先需把Project所需的JRE設為IBM的JRE

image 

image

之後,開啟Run Configuration

image

在Arguments tab下的VM arguments處,設定產生Dump之參數

image