目前,HP,Compaq,Dell,IBM 以及 Oracle 都在加快速度擁抱 Linux ,這個開放源碼的操作系統。根據 eWeek 的統計,去年 Linux 服務器的銷售量大約占據了 Compaq 的 30%,Dell 的 13.7%,IBM 的 13.5%。而且 IBM 2001年度在 Linux 上的投入有 10 個億。 Intel 最新的 64 位的 Itanium CPU 只支持四種操作系統:Windows, Linux, AIX 和 HP-UX。我們也不要忘記 Oracle 的 9i 數據庫 Linux 版本要比 Windows 版本早一個月。
盡管 Linux 能跑在從 IBM S/390 到 Sun SPARC 結構的服務器,但是對於大多數人來說,Intel 還是 Linux 跑得最多的平台。本文就是要講述通過簡單的性能調正,使 Oracle 的性能提升 1000% 的辦法。
本文采用的測試環境是一台 Compaq 4 CPU,512 MB ,8 部 7200 rpm SCSI 磁盤的服務器,然後在幾乎同樣的單 CPU Athlon 系統上作了測試,內存一樣,但是只有一部 7200 rpm 的 Ultra 100 IDE 磁盤。盡管最後的結果和得到的百分比不一樣,但是觀測得到的性能提升是一致的。
為了簡單起見,我們的測試環境采用 TPC 基准測試,它廣泛地用於 OLTP 的負荷測試。Quest 公司有一個叫做 Benchmark Factory 的工具,使測試工作變得就像發送電子郵件一樣簡單。
下面我們將分別通過 DB 的調整和 OS 的調整來看測試的結果。
DB1 的初始化參數一般不常見,為了說明問題,我們使用這些參數並作為基准。
DB1: Initial Database
Database Block Size 2K
SGA Buffer Cache 64M
SGA Shared Pool 64M
SGA Redo Cache 4M
Redo Log Files 4M
Tablespaces Dictionary
TPC Results Load Time (Seconds) 49.41
Transactions / Second 8.152
顯然需要加大 SGA 大小,我們來看 DB2 的結果:
DB2: Cache & Pool
Database Block Size 2K
SGA Buffer Cache 128M
SGA Shared Pool 128M
SGA Redo Cache 4M
Redo Log Files 4M
Tablespaces Dictionary
TPC Results Load Time (Seconds) 48.57
Transactions / Second 9.147
增大 SGA 已經緩沖看來對於性能的提升並不顯著,加載時間只提升了 1.73%。下面我們增加 SGA 重做日志的大小:
DB3: Log Buffer
Database Block Size 2K
SGA Buffer Cache 128M
SGA Shared Pool 128M
SGA Redo Cache 16M
Redo Log Files 16M
Tablespaces Dictionary
TPC Results Load Time (Seconds) 41.39
Transactions / Second 10.088
我們可以看到加載時間提升了 17.35%,TPS 也提升了 9.33%。因為加載和同時插入,更新,刪除需要比 8M 大的空間,但是看起來增加內存性能並沒有顯著提升,我們加大塊大小:
DB4: 4K Block
Database Block Size 4K
SGA Buffer Cache 128M
SGA Shared Pool 128M
SGA Redo Cache 16M
Redo Log Files 16M
Tablespaces Dictionary
TPC Results Load Time (Seconds) 17.35
Transactions / Second 10.179
我們看到加載時間提升了 138%!而對 TPS 值沒有很大的影響。下面一個簡單的念頭是表空間的管理從目錄切換為本地:
DB5: Local Tablespaces
Database Block Size 4K
SGA Buffer Cache 128M
SGA Shared Pool 128M
SGA Redo Cache 16M
Redo Log Files 16M
Tablespaces Local
TPC Results Load Time (Seconds) 15.07
Transactions / Second 10.425
下面我們把數據庫塊加大到 8K 來看結果:
DB6: 8K Block
Database Block Size 8K
SGA Buffer Cache 128M
SGA Shared Pool 128M
SGA Redo Cache 16M
Redo Log Files 16M
Tablespaces Local
TPC Results Load Time (Seconds) 11.42
Transactions / Second 10.683