您的位置:首頁技術文章
文章詳情頁

特定配置下Oracle日志批量提交的最優數量

瀏覽:7日期:2023-11-23 19:00:17
 一、測試背景

項目中的記錄日志有時會采用批量提交的方法,它的好處是減少了獲取數據連接的次數,從而減少了網絡交互的次數,提高了系統性能。為了將系統性能提高到最好,找到特定配置下oracle批量提交的最優數量,進行了這個測試。

二、測試環境與配置(數據庫服務器配置)

操作系統:aix 5.3

數據庫版本:oracle 10g

Java版本:1.5

Web應用服務器:weblogic

三、測試設計

1. 如何進行批量提交

可能有人對我上面提到的批量提交的實現方式不清楚,在此詳細介紹一下,用到的是preparedStatement的addBatch()和 executeBatch()方法。addBatch()方法將一組參數添加到preparedStatement 對象的批處理命令中,通過調用方法 executeBatch 可以批量執行此列表中的命令。

程序如下例: 

public static void test(){......preparedStatement ps = nulltry {conn = DataSourceManager.instance().getConnection();ps = conn.prepareStatement('insert into log(col1,col2)values(?,?)');for (int i = 0 i < commitCount; i++) {ps.setString(1, 'hello');ps.setString(2, '123');ps.addBatch();}ps.executeBatch();......}

  2.設計思路

測試要得到的就是程序中一次批量提交的日志最優條數,也就是commitCount的值。

拿到這個測試項目時,我的思路是:設定批量提交日志參數commitCount的值,在一段可計算的時間time 內提交日志數count,得到每秒提交的日志條數v(v=提交的日志數count/時間time)。逐漸增加批量日志參數commitCount,得到不同的v,對比數據,取最大的v所對應的commitCount,即為批量提交的最優數量。

3. 程序設計

思路比較容易確定,剩下就是程序的設計了。設計程序的原則是可操作性要高,主要問題是思路中提到的各個參數的設置和獲取。在經驗豐富的前輩的指點下,對程序進行了設計,在此不再贅述具體代碼,只將程序設計思路簡單介紹一下:

a.commitCount的設置

在測試頁面設置輸入框,將此值作為參數輸入。

b.time的獲取

在提交日志之前和之后分別取系統時間,作差即得提交日志所用時間time

c.count的設置

為忽略批量提交日志每次獲取數據連接所用的時間,設置提交次數views,并在程序中將獲取數據連接的代碼寫在提交所有日志前(注意:寫在批量提交程序中每個批量提交都會建立數據連接,從而使得到的time誤差較大)。這樣提交一次日志只獲取一次數據連接。所以提交次數越大,得到的time就越接近提交日志所用的時間,可忽略獲取連接所用時間。

所以在頁面設置'提交次數'輸入框views,程序中設計一個循環來模擬多次批量提交日志,并計算count=commitCount*views

程序計算v=count/time 的值,顯示到頁面。

另外注意:插入數據時,數據表原有數據條數對插入數據的速度也會有影響。為保證每次插入日志時數據表環境一致,在每次插入日志之后要刪除本次插入的日志。

四、測試執行情況和測試結果

程序寫好部署后,萬事俱備,可以進行測試了(注意:最好找網絡穩定的時間進行測試,得出的測試結果誤差較小)。

在頁面輸入“批量提交日志參數”commitCount和“提交次數”views,并記錄返回到頁面的v值。

“提交次數”設為50,人為設定“批量提交日志參數”commitCount,從100開始,一次增加20,到200,發現v的值一直增大,之后將 commitCount分別以100、200等幅度向上增加,直到5000。發現commitCount=500時,v值最大。

為排除網絡原因,每組數據測試兩次。具體測試數據形成了折線圖,如下圖:

特定配置下Oracle日志批量提交的最優數量

所以在以上描述的特定測試環境下,oracle 日志批量提交的最優數量是500 條。

以上就是測試的全過程,或許有人有更好的測試方法,以期共享。

標簽: Oracle 數據庫
国产综合久久一区二区三区