RAC負載均衡的簡單測試(四)
Rac環境安裝完成之後,打算簡單測試一下Oracle RAC的負載均衡功能。
RAC負載均衡的簡單測試(一):http://yangtingkun.itpub.net/post/468/279433
RAC負載均衡的簡單測試(二):http://yangtingkun.itpub.net/post/468/279754
RAC負載均衡的簡單測試(三):http://yangtingkun.itpub.net/post/468/280044
這篇文章繼續討論負載均衡與例項的忙閒是否有關。
寫完上一篇文章後,感謝網友zzok和wlqj的回饋,根據他們的測試以及Oracle一些文件上的描述,負載均衡的預設配置是與節點忙閒程度有關的。不過節點忙閒程度是PMON程式負責通知,而PMON程式並非事實執行,因此通知很可能有一個延遲,而上面的測試在JOB剛開始執行後不久就開始了,而這時監聽還不清楚節點2上繁忙的這個事實。
由於前一段時間這個環境有別的用處,因此一直耽擱了下來,這兩天翻BLOG的時候,看到這個問題,於是今天重新測試一次。
本地TNSNAMES的設定可以參考第一篇文章。
今天將文章三中測試重新跑了一次,發現不管後臺JOB執行多長的時間,測試結果都與(三)中的測試一致。看來可能是測試方法存在問題。
如果沒有壓力的情況下,Oracle在負載均衡的時候只考慮透過SERVICE_NAME連線的情況,那麼是否Oracle並不是關心例項所在節點的忙閒程度,而是關心透過SERVICE_NAME連線的那些會話的忙閒程度。
下面更改一下測試方式,建立一個TEST.SQL檔案,檔案中包含一個儲存過程,在客戶端上建立一個過程,如果連線到例項1,則直接退出會話,如果連線到例項2,則進行大量的計算操作:
bash-2.03$ more test.sql
declare
v_instance number;
v_result number;
begin
select instance_number into v_instance from v$instance;
insert into t_record values (v_instance);
commit;
if v_instance = 2 then
for i in 1..200000 loop
v_result := log(i+1, i+1);
end loop;
end if;
end;
/
exit
建立一個shell檔案,後臺登陸資料庫並執行這個儲存過程:
bash-2.03$ more test.sh
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
sqlplus test/test@testrac @test.sql &
在資料庫中建立T_RECORD表:
SQL> create table t_record (instance_id number);
表已建立。
下面執行test.sh指令碼:
bash-2.03$ . test.sh
考慮PMON程式會有延遲,先後四次呼叫test.sh指令碼,每次間隔一到兩分鐘左右:
bash-2.03$ sqlplus test/test@testrac
SQL*Plus: Release 10.2.0.3.0 - Production on 星期五 4月 24 00:06:12 2009
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
連線到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
testrac1
SQL> select instance_id, count(*)
2 from t_record
3 group by instance_id;
INSTANCE_ID COUNT(*)
----------- ----------
2 23
1 97
這個結果已經很能說明問題了,如果在把每次呼叫的時間加上,就可以發現,越靠後的呼叫,連線分配到例項1上的越多。
那麼是否能夠說明負載均衡確實與連線到例項的會話忙閒程度有關呢,還不能。注意上面的test.sql檔案,包含了一個退出命令,這會使得例項1上的連線迅速退出,而例項2上由於一直處於處理過程,所以連線無法退出。顯然這個測試和前面第二篇文章的測試結果一樣,只能說明連線數對負載均衡的影響,不能說明節點上負載對負載均衡的影響。
下面將test.sql裡面的exit語句去掉,這樣例項1上會話只是連線上而已,什麼都不做,而例項2上的會話要進行大量的運算。
bash-2.03$ more test.sql
declare
v_instance number;
v_result number;
begin
select instance_number into v_instance from v$instance;
insert into t_record values (v_instance);
commit;
if v_instance = 2 then
for i in 1..200000 loop
v_result := log(i+1, i+1);
end loop;
end if;
end;
/
再次執行test.sh指令碼,這次執行了6次,觀察得到的結果:
SQL> conn test/test
已連線。
SQL> select instance_id, count(*)
2 from test.t_record
3 group by instance_id;
INSTANCE_ID COUNT(*)
----------- ----------
1 100
2 80
可以看到,這次例項1上僅比例項2上多出20個連線,差距遠遠不像第一次測試那麼明顯,而查詢GV$SESSION檢視可以看到:
SQL> select inst_id, count(*)
2 from gv$session
3 where service_name = 'testrac'
4 group by inst_id;
INST_ID COUNT(*)
---------- ----------
1 100
2 103
很好的滿足了測試二的結果。只所以例項一上比例項二多了20個連線,是因為測試開始時,例項2上的連線數比例項1上多了20個左右。
這篇測試從開始到結束執行時間超過30分鐘以上,如果這麼長時間PMON程式都無法將系統忙閒程度反饋給監聽,那麼即使存在反饋意義也不大了。
透過這個測試,再一次證明RAC的負載均衡與各個例項上的透過監聽的連線數量有關,而與各個例項的忙閒程度無關。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-607344/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC負載均衡的簡單測試(三)負載
- RAC負載均衡的簡單測試(二)負載
- RAC負載均衡的簡單測試(一)負載
- 簡單測試nginx1.90做TCP協議負載均衡的功能NginxTCP協議負載
- TestLoadBalancer測試均衡負載負載
- [zt] RAC的負載均衡負載
- 簡單瞭解負載均衡負載
- Nginx實現簡單的負載均衡Nginx負載
- Nginx簡單的負載均衡配置示例Nginx負載
- 關於負載均衡的簡單總結負載
- ORACLE 11G負載均衡測試Oracle負載
- 淺談RAC中的負載均衡負載
- 簡單實踐搭建 nginx 負載均衡Nginx負載
- Python實現簡單負載均衡Python負載
- 負載均衡簡介負載
- WEBLOGIC連線OracleRAC的負載均衡測試(轉載)WebOracle負載
- 【知識分享】四層負載均衡和七層負載均衡負載
- jmeter壓力測試實現負載均衡JMeter負載
- Oracle RAC的TAF簡單測試Oracle
- 搭建LVS負載均衡測試環境負載
- 靈活實現RAC三節點的負載均衡及TAF配置(四)負載
- 【RAC】RAC中的負載均衡和故障切換--TAF配置負載
- 配置 RAC 負載均衡與故障轉移負載
- Oracle RAC 客戶端負載均衡配置Oracle客戶端負載
- 四. SpringCloud負載均衡與呼叫SpringGCCloud負載
- 負載均衡簡介與搭建負載
- 負載均衡探測器lbd負載
- NGINX負載均衡的四種分配方式Nginx負載
- windows伺服器第四層負載均衡_基於NLB負載均衡詳解Windows伺服器負載
- 在 Linux 上用 DNS 實現簡單的負載均衡LinuxDNS負載
- nginx負載均衡原理分析到手動編寫簡易負載均衡器Nginx負載
- Nginx如何實現四層負載均衡?Nginx負載
- 四層/七層負載均衡裝置(-)負載
- Haproxy和Nginx負載均衡測試效果對比記錄Nginx負載
- 簡述負載均衡&CDN技術負載
- linux負載均衡總結性說明(四層負載/七層負載)Linux負載
- Nginx反向代理+負載均衡簡單實現(https方式)Nginx負載HTTP
- 負載均衡負載