日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

LoadRunner 测试Oracle数据库及Siebel性能

發布時間:2025/4/16 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LoadRunner 测试Oracle数据库及Siebel性能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本次測試使用的loadrunner 版本為8.1,oracle數據庫版本為10.2.0.1,各版本的測試方法基本是一樣的。這里提供loadrunner 8.1,10000個web用戶的license: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB 還有golba-1000:AEACFSJI-YASEKJJKEAHJD-BCLBR 1、??打開loadrunner界面,選擇創建腳本 2、??選擇Oracle (2—tier)協議, 3、??錄制的程序選擇sqlplus的路徑,如:E:\oracle\product\10.2.0\db_1\BIN\sqlplus.exe 注意我們錄制到的操作時Action 4、我們輸入用戶和密碼,并向Test表中插入一條數據,然后提交以后輸入quit退出。 ? 5、LoadRunner會自動的給我們生成腳本,這個腳本默認是采用c語言編寫的,我們可以對代碼根據自己的要求進行一些修改,比如我們希望每次執行的SQL語句都是不同的,或者我們需要讓一個用戶重復去執行N條記錄以后才退出。 ? 6、下面我們對代碼進行一下修改,讓用戶登錄sqlplus之后重復執行20次insert操作之后commit;我們每次插入的值有循環次數決定,從1到20;部分腳本如下: ? Action() { int j=0; int i=0; char word[50]; ?????? lrd_init(&InitInfo, DBTypeVersion); ?????? lrd_initialize_db(LRD_DBTYPE_ORACLE, 2, 0); ?????? lrd_env_init(LRD_DBTYPE_ORACLE, &OraEnv1, 0, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, SERVER, &OraSrv1, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, SVCCTX, &OraSvc1, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes1, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, SESSION, &OraSes2, 0); ?????? lr_think_time(12); ? ?????? lrd_server_attach(OraSrv1, "", -1, 0, 0); ?????? lrd_ora8_attr_set_from_handle(OraSvc1, SERVER, OraSrv1, 0, 0); ?????? lrd_ora8_attr_set(OraSes1, USERNAME, "scott", -1, 0); ?????? lrd_ora8_attr_set(OraSes1, PASSWORD, lr_decrypt("4a8a04d62971759a946f"), -1, 0); ?????? lrd_ora8_attr_set_from_handle(OraSvc1, SESSION, OraSes1, 0, 0); ?????? lrd_session_begin(OraSvc1, OraSes1, 1, 0, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm1, 0); ?????? lrd_ora8_stmt(OraStm1, "SELECT USER FROM DUAL", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm1, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_ora8_bind_col(OraStm1, &OraDef1, 1, &USER_D1, 0, 0); ?????? lrd_ora8_fetch(OraStm1, -1, 1, &uliFetchedRows, PrintRow2, 2, 0, 0); ?????? GRID8(2); ?????? lrd_handle_free(&OraStm1, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm2, 0); ?????? lrd_ora8_stmt(OraStm2, "BEGIN DBMS_OUTPUT.DISABLE; END;", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm2, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_handle_free(&OraStm2, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm3, 0); ?????? lrd_ora8_stmt(OraStm3, "SELECT ATTRIBUTE,SCOPE,NUMERIC_VALUE,CHAR_VALUE,DATE_VALUE FROM " ??????? "SYSTEM.PRODUCT_PRIVS WHERE (UPPER('SQL*Plus') LIKE UPPER" ??????? "(PRODUCT)) AND (UPPER(USER) LIKE USERID)", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm3, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_ora8_bind_col(OraStm3, &OraDef2, 1, &ATTRIBUTE_D2, 0, 0); ?????? lrd_ora8_bind_col(OraStm3, &OraDef3, 2, &SCOPE_D3, 0, 0); ?????? lrd_ora8_bind_col(OraStm3, &OraDef4, 3, &NUMERIC_VALUE_D4, 0, 0); ?????? lrd_ora8_bind_col(OraStm3, &OraDef5, 4, &CHAR_VALUE_D5, 0, 0); ?????? lrd_ora8_bind_col(OraStm3, &OraDef6, 5, &DATE_VALUE_D6, 0, 0); ?????? lrd_ora8_fetch(OraStm3, -0, 1, &uliFetchedRows, 0, 2, 0, 0); ?????? lrd_handle_free(&OraStm3, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm4, 0); ?????? lrd_ora8_stmt(OraStm4, "SELECT CHAR_VALUE FROM SYSTEM.PRODUCT_PRIVS WHERE?? (UPPER" ??????? "('SQL*Plus') LIKE UPPER(PRODUCT)) AND?? ((UPPER(USER) LIKE " ??????? "USERID) OR (USERID = 'PUBLIC')) AND?? (UPPER(ATTRIBUTE) = " ??????? "'ROLES')", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm4, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_ora8_bind_col(OraStm4, &OraDef7, 1, &CHAR_VALUE_D7, 0, 0); ?????? lrd_ora8_fetch(OraStm4, -0, 1, &uliFetchedRows, 0, 2, 0, 0); ?????? lrd_handle_free(&OraStm4, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm5, 0); ?????? lrd_ora8_stmt(OraStm5, "BEGIN DBMS_APPLICATION_INFO.SET_MODULE(:1,NULL); END;", 1, 32, 0); ?????? lrd_assign(&P1D8, "SQL*Plus", 0, 0, 0); ?????? lrd_ora8_bind_placeholder(OraStm5, &OraBnd1, "1", &P1D8, ??????? LRD_BIND_BY_POS, 0, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm5, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? GRID0(4); ?????? lrd_handle_free(&OraStm5, 0); ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm6, 0); ?????? lrd_ora8_stmt(OraStm6, "SELECT DECODE('A','A','1','2') FROM DUAL", 1, 32, 0); ?????? lrd_ora8_bind_col(OraStm6, &OraDef8, 1, &DECODE_A_A_1_2_D9, 0, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm6, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_ora8_print(OraStm6, PrintRow6); ?????? GRID0(6); ?????? lrd_handle_free(&OraStm6, 0); ? ?????? lrd_ora8_commit(OraSvc1, 0, 0); ?????? lrd_ora8_commit(OraSvc1, 0, 0); ?????? lr_think_time(25); ? for(j=1;j<=20;j++) { i=j;? //如果需要隨機的插入數據的話使用i=rand(); itoa(i, word, 10); lr_save_string (word ,"para"); ? ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm7, 0); ?????? //lrd_ora8_stmt(OraStm7, "insert into test values(12,'a')", 1, 32, 0); ???????lrd_ora8_stmt(OraStm7, "insert into test values({para},'a')", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm7, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_handle_free(&OraStm7, 0); } ? ?????? lrd_ora8_handle_alloc(OraEnv1, STMT, &OraStm8, 0); ?????? lrd_ora8_stmt(OraStm8, "commit", 1, 32, 0); ?????? lrd_ora8_exec(OraSvc1, OraStm8, 1, 0, &uliRowsProcessed, 0, 0, 0, 0, ??????? 0); ?????? lrd_handle_free(&OraStm8, 0); ?????? lrd_session_end(OraSvc1, OraSes1, 0, 0); ?????? lrd_server_detach(OraSrv1, 0, 0); ?????? lrd_handle_free(&OraEnv1, 0); ? ?????? return 0; } ? 其中的紅色部分是修改或添加的部分,最后可以執行一下,效果為: ? ? ? 7、下面來運行負載 添加我們錄制的腳本 ? ? ? 8、我們測試100個用戶登錄到數據庫,重復的向test表中插入一條由隨機數組成的記錄,并提交和退出。 這是運行后的結果以及其他相關信息。 然后到數據庫里面查看一下,應該是插入的記錄數為:100X20=2000 9、然后在結果-分析結果里面分析相關數據。得出相關結論。 10、下面說一下為什么我們loadrunner測試的時候需要插入隨機數或者其他的不重復的數據。 先來看一下數據庫硬解析的數量。 以sys登錄,執行select * from v$sysstat where name ='parse count (hard)';查詢 此時的value為1746,然后我們執行重復200次的 insert into test values(12,'a') 然后再查詢硬解析的結果為: 現在是1749,沒有多大的差別,其值本應該為1747,但可能由于oracle執行了其他的語句,這說明如果我們執行的是同一條SQL的話,在 測試中無法模擬真實環境的壓力,因為真實環境中每個用戶執行的SQL語句都可能不一樣。 (parse count (hard):在shared pool中解析調用的未命中次數。當sql語句執行并且該語句不在shared pool或雖然在shared pool但因為兩者存在部分差異而不能被使用時產生硬解析。如果一條sql語句原文與當前存在的相同,但查詢表不同則認為它們是兩條不同語句,則硬解析即會發生。硬解析會帶來cpu和資源使用的高昂開銷,因為它需要oracle在shared pool中重新分配內存,然后再確定執行計劃,最終語句才會被執行。) 下面我們執行200條不同SQL, 其最后的結果為1950,所以使用隨機數來產生sql語句并執行的話應該可以比較良好的模擬真實環境。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? LoadRunner?測試Siebel性能 1、本次需要測試的場景是登陸Siebel web應用,創建一個客戶,然后退出。 協議選擇Siebel-Web, ? 2、錄制好腳本之后,我們需要對腳本進行一下改造,我現在需要每次創建的客戶的名稱是隨機的,而且我在回放腳本的時候添加了部分代碼,方便的查看到程序運行的時間。部分代碼如下:(紅色部分為我所修改的) ? ??? int timex(int time_x,int re[]) { re[0] = time_x/(1000*60*60*24); re[1] = time_x/(1000*60*60); re[2] = time_x/(1000*60); re[3] = time_x/1000; re[4] = time_x%1000; return 0; } Action() { ??? int j; int i; char word[50]; long a,b; int time_x; int ret[5]; a = clock(); for(j=1;j<2;j++) { i=rand(); itoa(i, word, 10); lr_save_string (word ,"para"); lr_output_message(word); ? ?????? web_set_max_html_param_len("1024"); ?????? web_url("service_chs", ????????????? "URL=http://10.195.35.234:7777/service_chs", ????????????? "TargetFrame=", ????????????? "Resource=0", ????????????? "RecContentType=text/html", ????????????? "Referer=", ????????????? "Snapshot=t1.inf", ????????????? "Mode=HTML", ????????????? LAST); ? ?????? /* Registering parameter(s) from source task id 5 ?????? // {Siebel_sn_cookie3} = "TZARmNMKjOTPxa1RoRtQSSMkGLOXvzkb4oIIlP6ETEHlGdHuse27xQ__" ?????? // */ ? ?????? web_reg_save_param("Siebel_sn_cookie3", ????????????? "LB/IC=_sn=", ????????????? "RB/IC=;", ????????????? "Ord=1", ????????????? "Search=headers", ????????????? "RelFrameId=1", ????????????? LAST); ? ?????? web_url("start.swe", ????????????? "URL=http://10.195.35.234:7777/service_chs/start.swe?SWECmd=Start&SWEHo=10.195.35.234", ????????????? "TargetFrame=", ????????????? "Resource=0", ????????????? "RecContentType=text/html", ????????????? "Referer=", ????????????? "Snapshot=t2.inf", ????????????? "Mode=HTML", ????????????? LAST); ? …………….. 由于篇幅,以下省略了, ……………………………. ……………………………….. ……………………….. ?????? lr_think_time(23); ? ?????? web_submit_data("start.swe_19", ????????????? "Action=http://10.195.35.234:7777/service_chs/start.swe", ????????????? "Method=POST", ????????????? "TargetFrame=", ????????????? "RecContentType=text/html", ????????????? "Referer=", ????????????? "Snapshot=t21.inf", ????????????? "Mode=HTML", ????????????? ITEMDATA, ????????????? "Name=s_1_1_37_0", "Value=", ENDITEM, ????????????? "Name=SWEVI", "Value=", ENDITEM, ????????????? "Name=SWERowId", "Value=1-{Siebel_row_id73}", ENDITEM, ????????????? "Name=SWEC", "Value={Siebel_SWECount}", ENDITEM, ????????????? "Name=SWEMethod", "Value=WriteRecord", ENDITEM, ????????????? "Name=SWEReqRowId", "Value=1", ENDITEM, ????????????? "Name=SWERPC", "Value=1", ENDITEM, ????????????? "Name=s_1_1_70_0", "Value=", ENDITEM, ????????????? "Name=s_1_1_71_0", "Value=??‰???", ENDITEM, ????????????? "Name=s_1_1_61_0", "Value=", ENDITEM, ????????????? "Name=SWEApplet", "Value=Account Entry Applet", ENDITEM, ????????????? "Name=SWEActiveApplet", "Value=Account Entry Applet", ENDITEM, ????????????? "Name=s_1_1_51_0", "Value=N", ENDITEM, ????????????? "Name=s_1_1_62_0", "Value=", ENDITEM, ????????????? "Name=SWEView", "Value=Account List View", ENDITEM, ????????????? "Name=s_1_1_41_0", "Value=", ENDITEM, ????????????? "Name=s_1_1_63_0", "Value=", ENDITEM, ????????????? "Name=SWECmd", "Value=InvokeMethod", ENDITEM, ????????????? "Name=s_1_1_65_0", "Value=????o-", ENDITEM, ????????????? "Name=SWETS", "Value={SiebelTimeStamp}", ENDITEM, ????????????? "Name=SWEActiveView", "Value=Account List View", ENDITEM, ????????????? //"Name=s_1_1_35_0", "Value=LoadRunner Test", ENDITEM, "Name=s_1_1_35_0", "Value={para}", ENDITEM, ????????????? "Name=SWEP", "Value=", ENDITEM, ????????????? "Name=s_1_1_69_0", "Value=", ENDITEM, ????????????? "Name=SWERowIds", "Value=", ENDITEM, ????????????? LAST); ? ?????? Siebel_SWECount_var += 1; ? ?????? lr_save_int(Siebel_SWECount_var, "Siebel_SWECount"); ? ?????? lr_think_time(7); ? ?????? web_submit_data("start.swe_20", ????????????? "Action=http://10.195.35.234:7777/service_chs/start.swe", ????????????? "Method=POST", ????????????? "TargetFrame=", ????????????? "RecContentType=text/html", ????????????? "Referer=", ????????????? "Snapshot=t22.inf", ????????????? "Mode=HTML", ????????????? "EncodeAtSign=YES", ????????????? ITEMDATA, ????????????? "Name=SWEC", "Value={Siebel_SWECount}", ENDITEM, ????????????? "Name=SWEMethod", "Value=BatchCanInvoke", ENDITEM, ????????????? "Name=SWERPC", "Value=1", ENDITEM, ????????????? "Name=SWEActiveApplet", "Value=Account Entry Applet", ENDITEM, ????????????? "Name=SWECmd", "Value=InvokeMethod", ENDITEM, ????????????? "Name=SWEIPS", "Value=@0*0*7*0*0*3*0*2*#40*2*#00*5*SWEJI5*false2*#10*6*SWEDIC4*true2*#20*2*#30*", ENDITEM, ????????????? "Name=SWEActiveView", "Value=Account List View", ENDITEM, ????????????? "Name=SWEService", "Value=SWE Command Manager", ENDITEM, ????????????? LAST); ? ?????? web_save_timestamp_param("SiebelTimeStamp", ????????????? LAST); ? ?????? web_url("start.swe_21", ????????????? "URL=http://10.195.35.234:7777/service_chs/start.swe?SWECmd=Logoff&SWETS={SiebelTimeStamp}&SWEPreLd=1&SWEClearLC=1", ????????????? "TargetFrame=", ????????????? "Resource=0", ????????????? "RecContentType=text/html", ????????????? "Referer=", ????????????? "Snapshot=t23.inf", ????????????? "Mode=HTML", ????????????? LAST); ? } b = clock(); time_x = (int)(b-a); lr_message("間隔時間為:%d 毫秒",time_x); ?????? return 0; ? } 執行腳本。可以方便的看到執行時間為12266毫秒。 ? 4、??后續的測試和前面講的測試oracle類似。不再累述。 ? ? ? ? ? ? ? Loadrunner?監控Linux服務器資源 ? 1、??為了使Loadrunner能夠監控Linux服務器的資源,必須保證有如下的服務包被安裝, rsh-0.17-25.4.i386.rpm rsh-server-0.17-25.4.i386.rpm rpc.rstatd-4.0.1.tar.gz 當然這個版本不一定非要一至,前兩個安裝包一般在光盤里面有,后一個可以在http://download.csdn.net/source/1585533?下載到。 2、??安裝:rpm –ivh rsh-0.17-25.4.i386.rpm ?rsh-server-0.17-25.4.i386.rpm ?? 安裝rpc.rstatd : gunzip rpc.rstatd-4.0.1.tar.gz tar –cvf rpc.rstatd-4.0.1.tar ?????? 修改解壓后目錄里面configure文件的權限;chmod 777 configure ?????? ./configure ---配置 make ---編譯 3、??確認內容:vi? /etc/xinetd.conf # # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ ? defaults { ??????? instances?????????????? = 60 ??????? log_type??????????????? = SYSLOG authpriv ??????? log_on_success????????? = HOST PID ??????? log_on_failure????????? = HOST ??????? cps???????????????????? = 50 10 } ? includedir /etc/xinetd.d ? 4、??重啟xinetd: service xinetd reload 5、啟動rstatd: 在解壓后的目錄下運行 rpc.rstatd? & 6、??驗證啟動:rpcinfo –p 其輸出應為: ? ? ?????? 100001??? 5?? udp??? 618 rstatd ? ??? 100001??? 3?? udp??? 618 rstatd ? ??? 100001??? 2?? udp??? 618 rstatd ? ??? 100001??? 1?? udp??? 618 rstatd ? ? 7、若需要loadrunner監控weblogic8.1 1.拷貝weblogic.jar到${lr_home}/classes下,同時,刪除jmxri.jar或者修改jmxri.jar為任何名稱 2.修改${lr_home}/dat/monitors下的WebLogicMon.ini文件,內容如下: 原始內容為:JVM=javaw.exe JavaVersion=1.4;JavaVendor=Sun Microsystems Inc. 修改后內容為:JVM=D:\bea\jdk141_03\bin\javaw.exe JavaVersion=1.4;JavaVendor=Sun Microsystems Inc. 其中D:\bea\jdk141_03\bin\javaw.exe為自己本地weblogic的jdk所在位置 javaVersion為weblogic所用的jdk版本號 在網上有的要求修改Weblogic=weblogic.jar Port=1112,要求把PORT修改為7001,但在這里的實際安裝過程中,沒有做修改。 3.配置如何監控lr的weblogic(jmx) 打開weglogic(jmx),添加度量 其中監控的計算機名稱為:ip:7001,如192.168.1.88:7001,平臺選擇所寫ip的OS 然后點擊下面的資源度量的添加,輸入登錄的用戶名和密碼,此處的用戶名和密碼為:ip所在OS上的weblogic的登錄用戶名和密碼 在點擊確定后會出現需要監控的資源信息,可以選擇自己感興趣的方面進行監控 7、?? 在Loadrunner中監控Linux:

? ?
文件:LoadRunner 測試Oracle數據庫性能.pdf
大小:2361KB
下載:下載
?

總結

以上是生活随笔為你收集整理的LoadRunner 测试Oracle数据库及Siebel性能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。