監(jiān)控Oracle 數(shù)據(jù)庫(kù)中長(zhǎng)時(shí)間運(yùn)行進(jìn)程的兩種方式,通過(guò)這些方 法,我們可以監(jiān)控單條語(yǔ)句的 長(zhǎng)時(shí)間操作,監(jiān)控存儲(chǔ)過(guò)程的運(yùn)行進(jìn)度,甚至自己'生成'進(jìn)度信息. 關(guān)鍵詞:監(jiān)控進(jìn)度V$SESSION_LONGOPS 當(dāng)Oracle 存儲(chǔ)過(guò)程運(yùn)行時(shí)間較長(zhǎng)時(shí),我們希望客 戶端能了解到它在后臺(tái)執(zhí)行的狀況或者進(jìn)度信息(類 似WINDOWS 安裝軟件時(shí)的進(jìn)度條信息),這樣可以知 道運(yùn)行在后臺(tái)的應(yīng)用進(jìn)程是否終止或者休眠,更近一 步要求,最好能知道進(jìn)行到哪一步驟,還有多少時(shí)間才 能完成. 簡(jiǎn)單到一條SQL 語(yǔ)句的情況,如果執(zhí)行時(shí)間較長(zhǎng), 我們?nèi)绾蔚玫剿倪\(yùn)行狀況?是否后臺(tái)還在運(yùn)行?雖 然可以查看SQL 的執(zhí)行計(jì)劃了解它的執(zhí)行步驟,但如 何知道它運(yùn)行到哪一個(gè)步驟了呢?如何才能估計(jì)出它 的合理的較為精確的執(zhí)行時(shí)間呢? Oracle 數(shù)據(jù)庫(kù)前端發(fā)出執(zhí)行命令后,進(jìn)程在后臺(tái) 執(zhí)行,普通開發(fā)人員一般無(wú)法了解到后臺(tái)在做什么,一 般采用的方法是用DBMSOUTPUT.PUT_LINE 來(lái)打印出 來(lái),但DBMS—OUTPUT.PUT—LINE 打印的信息受緩沖區(qū) 大小限制,如果信息較多就容易溢出,而且如果存儲(chǔ)過(guò) 程執(zhí)行時(shí)間較長(zhǎng),只有在其執(zhí)行完后,這些信息才會(huì)打 印出來(lái),這就增加了調(diào)試周期,影響了調(diào)試效果.有的 開發(fā)人員在存儲(chǔ)過(guò)程中通過(guò)寫日志表的形式來(lái)記錄進(jìn) 度,但需要COMMIT 后其他進(jìn)程才能看到這些日志信 息,而在某些控制結(jié)構(gòu)中(如游標(biāo)CURSOR 循環(huán))COM— MIT,則很容易引起ORA 一01555 錯(cuò)誤,造成程序出錯(cuò). 下面介紹兩種監(jiān)控方法. 如何監(jiān)控單條長(zhǎng)語(yǔ)句從ORACLE8 開始,出現(xiàn)一個(gè)新的動(dòng)態(tài)視圖:V $SESSION_LONGOPS,從這個(gè)視圖可以獲知一些操作 (如全表掃描,并行查詢,RMAN,排序等)的執(zhí)行進(jìn)度, 我們先來(lái)了解一下V$SESSION—LONGOPS 視圖的一些 重要字段: 列說(shuō)明 sID 會(huì)話標(biāo)識(shí) 5ERIAL#會(huì)話序列號(hào) OPfE 操作的簡(jiǎn)短描述 TARG 盯操作的對(duì)象,如xx TAR~_DESC目標(biāo)描述 SOFAR 目前已執(zhí)行單位數(shù)目 ToTAIWORK 總單位數(shù)目 UNlTS 單位 START_TIME 開始執(zhí)行時(shí)間 LAST_ UPDATE_TIME 統(tǒng)計(jì)數(shù)據(jù)最后更新時(shí)間 TIME_ REMAINING 估計(jì)剩余時(shí)間c ELAPSED_SECONDS 已執(zhí)行時(shí)間(秒) MEsSAGE 統(tǒng)計(jì)數(shù)據(jù)匯總信息 USERA^^E 用戶名 ~L_ADDRES5 語(yǔ)句的地址,,用于和V$sql_text 等關(guān)聯(lián) 語(yǔ)句的hash 地址,用于和V$sql_texlSQLHASH VALUE等關(guān)聯(lián) 這個(gè)動(dòng)態(tài)視圖顯示各個(gè)運(yùn)行時(shí)間超過(guò)6 程.這些進(jìn)程包含許多備份和恢復(fù)功能,統(tǒng)計(jì)數(shù)據(jù)收集,查詢等. 執(zhí)行以下語(yǔ)句就可以得到數(shù)據(jù)庫(kù)中各個(gè)長(zhǎng)時(shí)間操 作的進(jìn)程信息: select'Icfromv$sesslon_ longopswheretime_ re- malnlng0 我們也可以用圖形化工具查看,如TOAD,OEM中 均可查看長(zhǎng)操作進(jìn)程進(jìn)度信息. Oracle 自帶的管理工具OracleEnterpriseManager (OEM)提供了圖形化查看長(zhǎng)操作的功能,如: 計(jì)算機(jī)系統(tǒng)應(yīng)用2007 Quest公司的數(shù)據(jù)庫(kù)管理工具TOAD 也可以看到 長(zhǎng)操作信息,如: 表的統(tǒng)計(jì)信息. 長(zhǎng)時(shí)問(wèn)運(yùn)行的SQL 語(yǔ)句可以用V$SESSION—LON? 為了能監(jiān)控到查詢進(jìn)程執(zhí)行的進(jìn)度,必需使用 CBO 優(yōu)化器并且: 設(shè)置TlMED—STATISTICS或者SQL—TRACE 用ANALYZE語(yǔ)句或者DBMS—STAT 包收集相關(guān) 108 實(shí)踐經(jīng)驗(yàn)P 帕cficalExpen GOPS來(lái)監(jiān)控.實(shí)際上,長(zhǎng)時(shí)間運(yùn)行的存儲(chǔ)過(guò)程也可以 監(jiān)控.那是否任何操作都可以通過(guò)這個(gè)視圖來(lái)監(jiān)控進(jìn) 度呢?很遺憾,V$SESSION—LONGOPS 只會(huì)報(bào)告它認(rèn)為 耗時(shí)長(zhǎng)的操作.對(duì)于NEsTEDLOOP/UNIQUEINDEX READS/INDEXRANGEScANS 等執(zhí)行速度很快的操作, 2007 期計(jì)算機(jī)系統(tǒng)應(yīng)用由于它們執(zhí)行一般不超過(guò)6 秒,因此將不會(huì)出現(xiàn)在V $SESSION—LONGOPS 如何監(jiān)控自定義存儲(chǔ)過(guò)程單條長(zhǎng)語(yǔ)句可以用上面的方法監(jiān)控,Oracle 動(dòng)生成V$SE.SSION— LONGOPS 記錄.那么存儲(chǔ)過(guò)程中 有許多小操作,如何監(jiān)控進(jìn)度呢?其實(shí),我們也可以手 工生成V$SESSION—LONGOPS 記錄,方法是調(diào)用DBMS APPLICATION—INFO 包來(lái)生成自定義進(jìn)度信息. 從Oracle7.2 開始,提供了DBMS—APPLICATION— INFo 包,通過(guò)調(diào)用這個(gè)包,應(yīng)用可以將自己的名字和 動(dòng)作填寫到V$SESSION 和V$SQLAREA 的MODULE ACTION列中.V$SESSION 列出每個(gè)會(huì)話的用戶名,操 作系統(tǒng)機(jī)器名,終端名,程序名等. 應(yīng)用可以在執(zhí)行模塊時(shí)設(shè)置模塊名和動(dòng)作名,模 塊名一般是甩戶自定義的.而動(dòng)作名一般描述模塊中 的當(dāng)前執(zhí)行的事務(wù)的名字. DBMSAPPLICATION_INFO 包包含以下過(guò)程 SET_ MODULE 設(shè)置當(dāng)前運(yùn)行程序的模塊名 SET__AEl'ION 設(shè)置當(dāng)前模塊的當(dāng)前動(dòng)作名 SESSION—LON-在V$SESSIONLONGOPS視圖中 GoPS 插入一行進(jìn)度信息 SETMODULE過(guò)程設(shè)置模塊名和動(dòng)作名: createorreplaceproceduredel—cust(v_cust—Id varchar2) begindbms—— application—— info.set— module(module—— name="delcust". actlon_name="deletetablecust)i deletefromcustwherecustld=v_ cusLId; dbms_appllcatlon— Info.seLmodule(,); end;以上設(shè)置的模塊名和動(dòng)作名可以通過(guò)查詢V $sqlarea 獲取. 如:selectsql—text,module,actionfromv $sqlareawheremodule="del_cust: sql_textmoduleadion Deletefr0mcustdel_ custdeletetableoust 1rowselected. SET_SESSION—LONGOPS 過(guò)程用于在V$session— longops 中插入一行,開發(fā)人員可以調(diào)用此過(guò)程設(shè)置長(zhǎng) 時(shí)間操作的狀態(tài)信息,這樣,任何其他其他會(huì)話都可以 看到這個(gè)進(jìn)度信息.如下例所示: declare nohlntnumberdefaultdbmsapplicatlon_info.set_ session— Iongops_ nohint; IdndexnumberdefaultInohlnt: slnonumber;begin forlIn1..8888888888 loop update....; dbms_ appllcaflon— Info.setsesslon_ longops (rlndex=l_rlndex, slno=I_slno. op_name="updateahugetable. target=126, target_desc='.msgdescription context=0.sOfar=j. totalwork=8888888888. units=loops endloop;end; 然后,從另一個(gè)會(huì)話來(lái)執(zhí)行以下語(yǔ)句selectfromv$sesslon_ longopswheretlmere? malnlng0; 也可以用圖形化工具TOAD 或OEM來(lái)查看. 因此,采用本文說(shuō)明的方法,Oracle 開發(fā)人員可以 比較方便的監(jiān)控長(zhǎng)操作進(jìn)程的進(jìn)度信息,也可以自己 設(shè)置監(jiān)控信息,來(lái)了解后臺(tái)存儲(chǔ)過(guò)程的運(yùn)行效率.甚 至,可以在存儲(chǔ)過(guò)程或SQL 語(yǔ)句提交執(zhí)行后馬上觀察 其執(zhí)行進(jìn)度,如果比較緩慢,則可以中斷其執(zhí)行,進(jìn)行 調(diào)優(yōu),從而縮短調(diào)試周期,提高開發(fā)效率.
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供廣西企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為廣西眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
TPC-C學(xué)習(xí)筆記
摘錄:本文章來(lái)自:
TPC-C學(xué)習(xí)筆記
2?TPCC基準(zhǔn)測(cè)試
TPCC值被廣泛用于衡量C/S環(huán)境下,由服務(wù)器和客戶端構(gòu)筑的整體系統(tǒng)的性能,它由事物處理性能委員會(huì)(TPC,Transaction Processing Corp)制定,TPC為非贏利性國(guó)際組織。
TPCC值可以反映出系統(tǒng)的性能價(jià)格比。TPCC測(cè)試系統(tǒng)每分鐘處理的任務(wù)數(shù),單位為tpm,(transactions per minute)。系統(tǒng)的總體價(jià)格(單位為美元)除以TPCC值,就可以衡量出系統(tǒng)的性價(jià)比,系統(tǒng)的性價(jià)比值越小,系統(tǒng)的性價(jià)比越好。
需要注意的是,TPC-C值描述的是C/S整體系統(tǒng)的性能,它與系統(tǒng)的服務(wù)器和客戶機(jī)的性能都有關(guān)系,也就是說(shuō),同樣的服務(wù)器配置不同的客戶端將會(huì)影響TPCC值,任何廠商和測(cè)試者都可以根據(jù)TPC提供的測(cè)試規(guī)范構(gòu)造出自己最優(yōu)的系統(tǒng),當(dāng)然測(cè)試的結(jié)果要經(jīng)過(guò)TPC審核。
---------------------------------------------------------------------------------------------------------------
性能測(cè)試指標(biāo)介紹
TPC-C
作為一家非盈利性機(jī)構(gòu),事務(wù)處理性能委員會(huì)(TPC)負(fù)責(zé)定義諸如TPC-C、TPC-H和TPC-W基準(zhǔn)測(cè)試之類的事務(wù)處理與數(shù)據(jù)庫(kù)性能基準(zhǔn)測(cè)試,并依據(jù)這些基準(zhǔn)測(cè)試項(xiàng)目發(fā)布客觀性能數(shù)據(jù)。TPC基準(zhǔn)測(cè)試采用極為嚴(yán)格的運(yùn)行環(huán)境,并且必須在獨(dú)立審計(jì)機(jī)構(gòu)監(jiān)督下進(jìn)行。委員會(huì)成員包括大多數(shù)主要數(shù)據(jù)庫(kù)產(chǎn)品廠商以及服務(wù)器硬件系統(tǒng)供應(yīng)商。
相關(guān)企業(yè)參與TPC基準(zhǔn)測(cè)試以期在規(guī)定運(yùn)行環(huán)境中獲得客觀性能驗(yàn)證,并通過(guò)應(yīng)用測(cè)試過(guò)程中所使用的技術(shù)開發(fā)出更加強(qiáng)健且更具伸縮性的軟件產(chǎn)品及硬件設(shè)備。
TPC-C是一種旨在衡量聯(lián)機(jī)事務(wù)處理(OLTP)系統(tǒng)性能與可伸縮性的行業(yè)標(biāo)準(zhǔn)基準(zhǔn)測(cè)試項(xiàng)目。這種基準(zhǔn)測(cè)試項(xiàng)目將對(duì)包括查詢、更新及隊(duì)列式小批量事務(wù)在內(nèi)的廣泛數(shù)據(jù)庫(kù)功能進(jìn)行測(cè)試。許多IT專業(yè)人員將TPC-C視為衡量“真實(shí)”O(jiān)LTP系統(tǒng)性能的有效指示器。
TPC-C基準(zhǔn)測(cè)試針對(duì)一種模擬訂單錄入與銷售環(huán)境測(cè)量每分鐘商業(yè)事務(wù)(tpmC)吞吐量。特別值得一提的是,它將專門測(cè)量系統(tǒng)在同時(shí)執(zhí)行其它四種事務(wù)類型(如支付、訂單狀態(tài)更新、交付及證券級(jí)變更)時(shí)每分鐘所生成的新增訂單事務(wù)數(shù)量。獨(dú)立審計(jì)機(jī)構(gòu)將負(fù)責(zé)對(duì)基準(zhǔn)測(cè)試結(jié)果進(jìn)行公證,同時(shí),TPC將出據(jù)一份全面徹底的測(cè)試報(bào)告。這份測(cè)試報(bào)告可以從TPC Web站點(diǎn)()上獲得。
tpmC定義: TPC-C的吞吐量,按有效TPC-C配置期間每分鐘處理的平均交易次數(shù)測(cè)量,至少要運(yùn)行12分鐘。
1.TPC-C規(guī)范概要
TPC-C是專門針對(duì)聯(lián)機(jī)交易處理系統(tǒng)(OLTP系統(tǒng))的,一般情況下我們也把這類系統(tǒng)稱為業(yè)務(wù)處理系統(tǒng)。
TPC-C測(cè)試規(guī)范中模擬了一個(gè)比較復(fù)雜并具有代表意義的OLTP應(yīng)用環(huán)境:假設(shè)有一個(gè)大型商品批發(fā)商,它擁有若干個(gè)分布在不同區(qū)域的商品庫(kù);每個(gè)倉(cāng)庫(kù)負(fù)責(zé)為10個(gè)銷售點(diǎn)供貨;每個(gè)銷售點(diǎn)為3000個(gè)客戶提供服務(wù);每個(gè)客戶平均一個(gè)訂單有10項(xiàng)產(chǎn)品;所有訂單中約1%的產(chǎn)品在其直接所屬的倉(cāng)庫(kù)中沒(méi)有存貨,需要由其他區(qū)域的倉(cāng)庫(kù)來(lái)供貨。
該系統(tǒng)需要處理的交易為以下幾種:
New-Order:客戶輸入一筆新的訂貨交易;
Payment:更新客戶賬戶余額以反映其支付狀況;
Delivery:發(fā)貨(模擬批處理交易);
Order-Status:查詢客戶最近交易的狀態(tài);
Stock-Level:查詢倉(cāng)庫(kù)庫(kù)存狀況,以便能夠及時(shí)補(bǔ)貨。
對(duì)于前四種類型的交易,要求響應(yīng)時(shí)間在5秒以內(nèi);對(duì)于庫(kù)存狀況查詢交易,要求響應(yīng)時(shí)間在20秒以內(nèi)。
邏輯結(jié)構(gòu)圖:
流程圖:
2.評(píng)測(cè)指標(biāo)
TPC-C測(cè)試規(guī)范經(jīng)過(guò)兩年的研制,于1992年7月發(fā)布。幾乎所有在OLTP市場(chǎng)提供軟硬件平臺(tái)的廠商都發(fā)布了相應(yīng)的TPC-C測(cè)試結(jié)果,隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,這些測(cè)試結(jié)果也在不斷刷新。
TPC-C的測(cè)試結(jié)果主要有兩個(gè)指標(biāo):
● 流量指標(biāo)(Throughput,簡(jiǎn)稱tpmC)
按照TPC的定義,流量指標(biāo)描述了系統(tǒng)在執(zhí)行Payment、Order-status、Delivery、Stock-Level這四種交易的同時(shí),每分鐘可以處理多少個(gè)New-Order交易。所有交易的響應(yīng)時(shí)間必須滿足TPC-C測(cè)試規(guī)范的要求。
流量指標(biāo)值越大越好!
● 性價(jià)比(Price/Performance,簡(jiǎn)稱Price/tpmC)
即測(cè)試系統(tǒng)價(jià)格(指在美國(guó)的報(bào)價(jià))與流量指標(biāo)的比值。
性價(jià)比越小越好!
---------------------------------------------------------------------------------------------------------------
[Oracle] How to Use Open Source Tools to Implement Your Own TPC-C
作者:Fenng
日期:Mar 14 2004 (v0.13)
出處:
版本:0.93
--------------------------------------------------------------------------------
本文簡(jiǎn)介
介紹如何利用開源工具實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)環(huán)境中的TPC-C.對(duì)DBA、開發(fā)人員、BI實(shí)施者有一定的參考價(jià)值.
引言描述
設(shè)想一下這樣一種情況:
您正在負(fù)責(zé)公司的一個(gè)OLTP類型的數(shù)據(jù)庫(kù)項(xiàng)目,面臨數(shù)據(jù)庫(kù)服務(wù)器選型的問(wèn)題:如何選擇硬件才能滿足產(chǎn)品環(huán)境的業(yè)務(wù)要求? 這個(gè)事情是“拍腦袋” 能決定的嗎?
不可否認(rèn),硬件選型是一門藝術(shù),選擇合適的硬件,能給公司節(jié)省大筆的費(fèi)用,選擇不能滿足業(yè)務(wù)需求的服務(wù)器產(chǎn)品,不但花了冤枉錢,還會(huì)對(duì)將來(lái)的業(yè)務(wù)產(chǎn)生影響。
可能大家首先會(huì)想到參考服務(wù)器的TPC-C的信息。提到TPC-C,可能很多人對(duì)此都感到既熟悉又陌生,因?yàn)榻?jīng)常聽人說(shuō)起,但是具體的問(wèn)下去,能說(shuō)清楚的又沒(méi)有多少人,而且,從大家口中得到的還不盡相同。那么什么是TPC/TPC-C這些都代表什么意思呢?
先說(shuō)一下TPC-C,TPC-C是聯(lián)機(jī)事務(wù)處理(on-line transaction processing , OLTP)的基準(zhǔn)程序。TPC-C模擬一個(gè)批發(fā)商的貨物管理環(huán)境。TPC-C使用三種性能和價(jià)格度量,其中性能由TPC-C吞吐率衡量,單位是tpmC。tpm是transactions per minute的簡(jiǎn)稱;C指TPC中的C基準(zhǔn)程序。它的定義是每分鐘內(nèi)系統(tǒng)處理的新訂單個(gè)數(shù)。
了解了這些內(nèi)容,您可能會(huì)想:我們公司的PC服務(wù)器完全是自己攢出來(lái)的,如何進(jìn)行TPC-C的衡量的?也去參考TPC官方站點(diǎn)上的信息?不要忘了,TPC.org 上公布的測(cè)試結(jié)果都是各大廠商根據(jù)自己的系統(tǒng)進(jìn)行了充分優(yōu)化之后的出來(lái)的結(jié)果。打個(gè)比方,TPC公布的數(shù)值就好比嶄新的法拉利跑車經(jīng)過(guò)專業(yè)技師們的精心檢查保養(yǎng),然后在專用跑道上跑出來(lái)的速度值,而我們的情況可能是法拉利(甚至是夏利)要在鄉(xiāng)村土路上行駛,可比性大打折扣。
有的朋友會(huì)想:那我們可以根據(jù)自己的情況,拿一個(gè)秒表在“鄉(xiāng)村土路”上測(cè)試一下看看呀。這樣的意義也是顯而易見的,對(duì)我們的實(shí)際的環(huán)境不是更具有參考價(jià)值?不錯(cuò),這也正是本文的目的:讓我們利用開源(Open Source)工具來(lái)實(shí)現(xiàn)自己的針對(duì)Oracle數(shù)據(jù)庫(kù)的TPC-C。
Hammerora—the Open Source Oracle Load Test Tool
首先介紹一下Hammerora。從創(chuàng)作者對(duì)這個(gè)工具的標(biāo)題描述可以看出,Hammerora是一款Oracle數(shù)據(jù)庫(kù)負(fù)載測(cè)試工具。該工具可以在Oracle 8i、9i和10g等版本上使用。當(dāng)前可以用在Linux/Unix和Windows上。初步實(shí)現(xiàn)了跨平臺(tái)。Hammerora 完全用TCL/TK寫就,以GPL版權(quán)形式發(fā)布。
作者是Steve Shaw。該項(xiàng)目的主頁(yè)在: 。
Hammerora的設(shè)計(jì)原理是解析Oracle的Trace文件,并把它們轉(zhuǎn)化為Oratcl程序,然后在Oracle數(shù)據(jù)庫(kù)中用多個(gè)用戶并發(fā)的對(duì)用戶的事務(wù)進(jìn)行“回放”。我們知道,Oracle的Trace文件能夠翔實(shí)的記錄用戶對(duì)數(shù)據(jù)庫(kù)的操作。這樣Hammerora能夠保證對(duì)用戶環(huán)境的真實(shí)模擬。
Hammerora最初是用以學(xué)習(xí)的目的:期望是模擬數(shù)據(jù)庫(kù)的一定數(shù)量的用戶。這樣一個(gè)小的基于家庭的學(xué)習(xí)開發(fā)系統(tǒng)就能夠比較接近產(chǎn)品環(huán)境。這個(gè)工具已經(jīng)成長(zhǎng)為一個(gè)Oracle數(shù)據(jù)庫(kù)做壓力測(cè)試--從小的數(shù)據(jù)庫(kù)到大的基于RAC的集群。
TCL語(yǔ)言已經(jīng)用來(lái)提供高性能的和Oracle數(shù)據(jù)庫(kù)的OCI集成,而無(wú)需重新編譯生成的程序。每個(gè)生成的程序具有嚴(yán)格的TCL/Oratcl兼容性,并且可以在Hammerora的命令行Shell下運(yùn)行。TCL的強(qiáng)大功能和靈活性意味著潛在的功能是無(wú)窮盡的。TCL線程包用來(lái)實(shí)現(xiàn)對(duì)Oracle數(shù)據(jù)庫(kù)的多個(gè)并發(fā)連接。
Hammerora包含Oracle存儲(chǔ)過(guò)程和TCL驅(qū)動(dòng)腳本用來(lái)運(yùn)行TPC-C基準(zhǔn)程序。但是,我們先要構(gòu)建一個(gè)同TPC-C規(guī)范相符的數(shù)據(jù)庫(kù)。這樣,我們需要用到Orabm。
Orabm
Orabm是Geoff Ingram (High-Performance Oracle: Proven Methods for Achieving Optimum Performance and Availability一書的作者)構(gòu)建的一個(gè)程序包,包含了一套SQL腳本和幾個(gè)命令行程序。Orabm數(shù)據(jù)裝載程序(Orabmload)構(gòu)建了一組遵從TPC-C標(biāo)準(zhǔn)的數(shù)據(jù)用以測(cè)試。Orabm的程序包和源代碼可以從它的主頁(yè)面( ) 得到。
Orabm的運(yùn)行機(jī)制
Orabm的運(yùn)行機(jī)制在Geoff Ingram有明確的說(shuō)明,這里翻譯如下:Orabm通過(guò)在每個(gè)用戶指定的并發(fā)數(shù)據(jù)庫(kù)會(huì)話(session) 中運(yùn)行用戶執(zhí)行數(shù)量的數(shù)據(jù)庫(kù)事務(wù)來(lái)進(jìn)行工作.事務(wù)通過(guò)ORABM模式下的ORABM_SERVERSIDE_STRESS存儲(chǔ)過(guò)程運(yùn)行。對(duì)每個(gè)并發(fā)會(huì)話來(lái)說(shuō),ORABM_SERVERSIDE_STRESS運(yùn)行在orabm命令行下指定的事務(wù)數(shù),并返回該會(huì)話在采樣間隔完成時(shí)的TPS值.要確保所有并發(fā)會(huì)話都是在采樣間隔期間處理事務(wù),TPS值僅包括事務(wù)的中間的80%,也即:初始的10%和最后的 10%將忽略掉。
更詳細(xì)信息可以參考 的內(nèi)容.
安裝步驟
1) 安裝Oracle OCI 庫(kù)
對(duì)Oracle 9i 來(lái)說(shuō),如果沒(méi)有安裝該組件的話,可能要重新運(yùn)行runInstall,在Oracle 9i Client products樹中選擇"Oracle Call Interfaces" .
對(duì)Oracle 10g來(lái)說(shuō),Oracle 10 OCI 庫(kù)應(yīng)該是默認(rèn)安裝的.
2) 安裝TCL
cd /usr/local/src/tcl8.4.5/unix
rm -f config.cache
./configure --enable-threads --enable-shared
make clean
make
make install
3 安裝TK
cd /usr/local/src/tk8.4.5/unix
rm -f config.cache
./configure --with-tcl=../../tcl8.4.5/unix --enable-threads --enable-shared
make clean
make
make install
4 安裝TCL Threads
cd /usr/local/src/thread2.5.2/unix
rm -f config.cache
sh ../configure --enable-threads --enable-shared
make clean
make
make install
5 安裝Oratcl
對(duì)10g來(lái)說(shuō),要編輯配置文件,在1728 行附近, FOUND_ORACLE=0 那一行的下面添加如下部分內(nèi)容:
echo "checking for Oracle 10.0 style toplevel (libclient10.a)" 1 6
echo "configure:1730: checking for Oracle 10 style toplevel(libclient10.a)" 5
for f in $oracle_directory $oratest1 $oratest2 $oratest3 \
$oracle4 /opt/oracle /u/oracle /usr/oracle /usr/local/oracle ; do
echo "$ac_t""looking for lib/libclient10.a in $f" 16
if test -r "$f/lib/libclient10.a" ; then
ORA="$f/lib"
ORACLE_HOME=$f
echo "$ac_t""setting ORA to $ORA" 16
testver=10
ORA_MAJOR_VERSION=10
ORA_MINOR_VERSION=0
FOUND_ORACLE=1
break
fi
done
export ORACLE_HOME=your_oracle_home_directory
cd /usr/local/src/oratcl-4-1-branch/unix
rm -f config.cache
sh ../configure --with-tcl=../../tcl8.4.5/unix \
--with-oracle-directory=$ORACLE_HOME --with-oracle-version=9 ( or 10 or 8! ) \
--enable-threads --enable-shared
vi Makefile - 把所有的 -rpath 改做 -Wl,-rpath,
make clean
make
make install
sqlplus orabm/orabm @delivery_sp.sql
sqlplus orabm/orabm @new_order_sp.sql
sqlplus orabm/orabm @ostat_sp.sql
sqlplus orabm/orabm @payment_sp.sql
sqlplus orabm/orabm @slev_sp.sql
步驟 操作 命令
1 創(chuàng)建 ORABM用戶(用TOOLS做默認(rèn)表空間,
TEMP 表空間為臨時(shí)表空間) sqlplus system/pwd @orabm_user
2 創(chuàng)建表 sqlplus system/pwd @orabm_tab
3 裝載數(shù)據(jù) $orabmload Warehouses 1
4 創(chuàng)建索引 sqlplus system/pwd @orabm_ind
5 分析表和索引 sqlplus system/pwd @orabm_analyze
6 創(chuàng)建壓力測(cè)試PL/SQL 過(guò)程 sqlplus system/pwd @orabm_serverside_stress
7 把表和索引數(shù)據(jù)緩沖到SGA sqlplus system/pwd @orabm_cache
把tpc-c.tcl腳本載入Hammerora中(要查看TCL文件注意把過(guò)濾正確的文件擴(kuò)展名:不是*.trc 而是*.tcl ),在該tpc-c.tcl中查找connect字符串,調(diào)整為你的數(shù)據(jù)庫(kù)用戶連接信息。并調(diào)整虛擬用戶信息。
測(cè)試運(yùn)行
運(yùn)行Hammerora,創(chuàng)建需要的用戶數(shù), 來(lái)模擬TPC-C 基準(zhǔn)程序(注意調(diào)整好執(zhí)行Hammerora程序的環(huán)境變量,最好直接用Oracle用戶來(lái)執(zhí)行).
TPC基準(zhǔn)程序及tpmc值
—兼談在使用性能度量時(shí)如何避免誤區(qū)
今天的用戶在選用平臺(tái)時(shí)面對(duì)的是一個(gè)繽紛繁雜的世界。用戶希望有一種度量標(biāo)準(zhǔn),能夠量化計(jì)算機(jī)系統(tǒng)的性能,以此作為選型的依據(jù)。作者曾在美國(guó)從事過(guò)數(shù)年計(jì)算機(jī)性能評(píng)價(jià)工作,深深體會(huì)到,計(jì)算機(jī)的性能很難用一兩種度量來(lái) 評(píng)價(jià),而且,任何度量都有其優(yōu)缺點(diǎn),尤其是當(dāng)使用者對(duì)性能度量了解不深時(shí),很容易被引入一些誤區(qū),甚至推演出錯(cuò)誤的結(jié)論。本文以TPC基準(zhǔn)程序?yàn)槔?,給出一 些實(shí)際建議,以幫助用戶避免進(jìn)入這些誤區(qū)。
一、什么是TPC和tpmC?
tpmC值在國(guó)內(nèi)外被廣 泛用于衡量計(jì)算機(jī)系統(tǒng)的事務(wù)處理能力。但究竟什么是tpmC值呢?作者曾向一些 用戶、推銷人員乃至某些國(guó)外大公司的技術(shù)人員問(wèn)過(guò)這個(gè)問(wèn)題,但回答的精確度 與tpmC值的流行程度遠(yuǎn)非相稱。tpmC這一度量也常被誤寫為TPM或TPMC。
1、TPC
TPC(Transaction Processing Performance Council,事務(wù)處理性能委員會(huì))是由數(shù)10家會(huì)員公司創(chuàng)建的非盈利組織,總部設(shè)在美國(guó)。該組織對(duì)全世界開放,但迄今為止,絕大多數(shù)會(huì)員都是美、 日、西歐的大公司。TPC的成員主要是計(jì)算機(jī)軟硬件廠家,而非計(jì)算機(jī)用戶,它的功 能是制定商務(wù)應(yīng)用基準(zhǔn)程序(Benchmark)的標(biāo)準(zhǔn)規(guī)范、性能和價(jià)格度量,并管理測(cè) 試結(jié)果的發(fā)布。
TPC的出版物是開放 的,可以通過(guò)網(wǎng)絡(luò)獲取()。TPC不給出基準(zhǔn)程序的代碼,而只 給出基準(zhǔn)程序的標(biāo)準(zhǔn)規(guī)范(Standard Specification)。任何廠家或其它測(cè)試者都可以根據(jù)規(guī)范,最優(yōu)地構(gòu)造出自己的系統(tǒng)(測(cè)試平臺(tái)和測(cè)試程序)。為保證測(cè)試結(jié)果的客觀性,被測(cè)試者(通常是廠家)必須提交給TPC一套完整的報(bào)告(Full Disclosure Report),包括被測(cè)系統(tǒng)的詳細(xì)配置、分類價(jià)格和包含五年維護(hù)費(fèi)用在內(nèi)的總價(jià) 格。該報(bào)告必須由TPC授權(quán)的審核員核實(shí)(TPC本身并不做審計(jì))。現(xiàn)在全球只有幾個(gè)審核員,全部在美國(guó)。
2、tpmC
TPC已經(jīng)推出了四套基準(zhǔn)程序,被稱為TPC-A、TPC-B、TPC-C和TPC-D。其中A和B已經(jīng)過(guò)時(shí),不再使用了。TPC-C是在線事務(wù)處理(OLTP)的基準(zhǔn)程序,TPC-D是決策支持(Decision Support) 的基準(zhǔn)程序。TPC即將推TPC-E,作為大型企業(yè)(Enterprise)信息服務(wù)的基準(zhǔn)程序。
TPC-C模擬一個(gè)批發(fā) 商的貨物管理環(huán)境。該批發(fā)公司有N個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)供應(yīng)10個(gè)地區(qū),其中每個(gè)地 區(qū)為3000名顧客服務(wù)。在每個(gè)倉(cāng)庫(kù)中有10個(gè)終端,每一個(gè)終端用于一個(gè)地區(qū)。在運(yùn) 行時(shí),10×N個(gè)終端操作員向公司的數(shù)據(jù)庫(kù)發(fā)出5類請(qǐng)求。由于一個(gè)倉(cāng)庫(kù)中不可能 存儲(chǔ)公司所有的貨物,有一些請(qǐng)求必須發(fā)往其它倉(cāng)庫(kù),因此,數(shù)據(jù)庫(kù)在邏輯上是 分布的。N是一個(gè)可變參數(shù),測(cè)試者可以隨意改變N,以獲得最佳測(cè)試效果。
TPC-C使用三種性能 和價(jià)格度量,其中性能由TPC-C吞吐率衡量,單位是tpmC。tpm是transactions per minute的簡(jiǎn)稱;C指TPC中的C基準(zhǔn)程序。它的定義是每分鐘內(nèi)系統(tǒng)處理的新訂單個(gè)數(shù)。要注意的是,在處理新訂單的同時(shí),系統(tǒng)還要按表1的要求處理其它4類事務(wù) 請(qǐng)求。從表1可以看出,新訂單請(qǐng)求不可能超出全部事務(wù)請(qǐng)求的45%,因此,當(dāng)一個(gè) 系統(tǒng)的性能為1000tpmC時(shí),它每分鐘實(shí)際處理的請(qǐng)求數(shù)是2000多個(gè)。價(jià)格是指系 統(tǒng)的總價(jià)格,單位是美元,而價(jià)格性能比則定義為總價(jià)格÷性能,單位是$/tpmC。
二、如何衡量計(jì)算機(jī)系統(tǒng)的性能和價(jià)格
在系統(tǒng)選型時(shí),我們一定不要忘記我們是為特定用戶環(huán)境中的特定應(yīng)用選擇系統(tǒng)。切忌為了“與國(guó)際接 軌”而盲目套用“國(guó)際通用”的東西。在性能評(píng)價(jià)領(lǐng)域,越是通用的度量常常越是不準(zhǔn)確的。據(jù)我所知,美國(guó)的一些大用戶從不相信任何“國(guó)際通用”的度量,而是花相當(dāng)精力,比如預(yù)算的5%,使用自己的應(yīng)用來(lái)測(cè)試系統(tǒng),決定選型。在使用任何一種性能和價(jià)格度量時(shí),一定要弄明白該度量的定義,以及它是在什么系統(tǒng)配置和運(yùn)行環(huán)境下得到的,如何解釋它的意義等。下面我們由好到差討論三種方式。
1、在真實(shí)環(huán)境中運(yùn)行 實(shí)際應(yīng)用
最理想的方式是搞一個(gè)試點(diǎn),要求制造商或系統(tǒng)集成商配合將系統(tǒng)(含平臺(tái)、軟件和操作流程)在一個(gè) 實(shí)際用戶點(diǎn)真正試運(yùn)行一段時(shí)間。這樣,用戶不僅能看到實(shí)際性能,也能觀察到系統(tǒng)是否穩(wěn)定可靠、使用是否方便、服務(wù)是否周到、配置是否足夠、全部?jī)r(jià)格是否合理。如果一個(gè)部門需要購(gòu)買一批同類的系統(tǒng),這種方式應(yīng)列為首選,因?yàn)樗粌H最精確、穩(wěn)妥,也常常最有效率,用戶還可先租一套系統(tǒng)作為試點(diǎn)。用這種方式得到的度量值常常具有很明確和實(shí)際的含義。
2、使用用戶定義的基準(zhǔn)程序
如果由于某種原因第一種方式不可行,用戶可以定義一組含有自己實(shí)際應(yīng)用環(huán)境特征的應(yīng)用基準(zhǔn)程序。 我舉兩個(gè)例子:近年來(lái),由于R/3軟件是應(yīng)用層軟件,SAP公司的基準(zhǔn)程序獲得了越來(lái)越多國(guó)外企業(yè)的認(rèn)可;中國(guó)稅務(wù)總局最近也開發(fā)了自己的基準(zhǔn)程序,以幫助稅務(wù)系統(tǒng)進(jìn)行計(jì)算機(jī)選型。這種方式在中國(guó)尤其重要,因?yàn)橹袊?guó)的信息系統(tǒng)有其特殊性。
3、使用通用基準(zhǔn)程序
如果第1種和第2種方式都不行,則使用如TPC-C之類的通用基準(zhǔn)程序,這是不得已的一種近似方法。因 此,tpmC值只能用作參考。我們應(yīng)當(dāng)注意以下幾點(diǎn):
(1)實(shí)際應(yīng)用是否與基準(zhǔn)程序相符
絕大多數(shù)基準(zhǔn)程序都是在美國(guó)制訂的,而中國(guó)的企事業(yè)單位與美國(guó)的運(yùn)作方式常常不一樣(恐怕也不應(yīng)該或不可能一樣)。在使用TPC-C時(shí),我們應(yīng)該清楚地知道:我的應(yīng)用是否符合批發(fā)商模式?事務(wù)請(qǐng)求是否與表1近似?對(duì)響應(yīng)時(shí)間的要求是否滿足表1?如果都不是,則tpmC值的參考價(jià)值就不太大了。
(2)TPC度量的解釋
TPC基準(zhǔn)程序是用來(lái)測(cè)系統(tǒng)而不是測(cè)主機(jī)的,廠家肯定要充分優(yōu)化他們的被測(cè)系統(tǒng)。此處的“系統(tǒng)”包括主機(jī)、外設(shè)(如硬盤或RAID)、主機(jī)端操作系統(tǒng)、數(shù)據(jù)庫(kù)軟件、客戶端計(jì)算機(jī)及其 操作系統(tǒng)、數(shù)據(jù)庫(kù)軟件和網(wǎng)絡(luò)連接等。在很多廠家的TPC測(cè)試系統(tǒng)中,主機(jī)的價(jià)格只是系統(tǒng)總價(jià)格的1/4或更小,而硬盤的價(jià)格有可能占到總價(jià)格的1/3以上,因?yàn)門PC-C要求被測(cè)系統(tǒng)必須保存180天的事務(wù)記錄。如果同樣的主機(jī)被用到用戶的環(huán)境中,廠家報(bào)的tpmC值就意義不大,因?yàn)橛脩舻膶?shí)際系統(tǒng)與廠家原來(lái)用于TPC測(cè)試的系統(tǒng)大不一樣。當(dāng)同樣的主機(jī)用在不同的系統(tǒng)中時(shí),tpmC值可能有相當(dāng)大的變化,現(xiàn)在很多用戶還沒(méi)有意識(shí)到這一點(diǎn)。
我舉一個(gè)例子。假設(shè)用 戶希望購(gòu)買一批同類系統(tǒng),每一系統(tǒng)至少需要1GB的內(nèi)存和50GB的硬盤。廠家A、B、C 各報(bào)了三個(gè)價(jià)格相當(dāng)?shù)南到y(tǒng),tpmC值分別為3000、2800、2600。用戶是否應(yīng)該選廠 家A的產(chǎn)品呢?答案是:不一定。廠家用于測(cè)試tpmC值的系統(tǒng)與實(shí)際提供給用戶的系統(tǒng)配置大不一樣。tpmC最低的廠家C提供給用戶的系統(tǒng)反而有可能性能最好,不 論是以實(shí)際系統(tǒng)的tpmC值還是以用戶的實(shí)際應(yīng)用性能來(lái)衡量。
(3)TPC測(cè)試的成本
TPC-C和TPC-D都是很復(fù)雜的基準(zhǔn)程序,做一個(gè)嚴(yán)格的測(cè)試是很消耗資源的,廠家當(dāng)然不會(huì)說(shuō)出他們花費(fèi)了多少錢和時(shí)間。但據(jù)國(guó)外知情人士透露,一個(gè)廠家做第一個(gè)TPC-C測(cè)試需 要幾十萬(wàn)到上百萬(wàn)美元的資金和半年左右的時(shí)間投入。因此,很多TPC的度量值都 是估計(jì)的。由于計(jì)算機(jī)系統(tǒng)換代頻繁,如果用戶一定要用通過(guò)審核的度量值,就必 須多等待半年時(shí)間,因此而不能用最先進(jìn)的系統(tǒng)。中國(guó)的廠家通過(guò)審核的時(shí)間則 更長(zhǎng)。
綜上所述,我們對(duì)中國(guó) 用戶(尤其是大用戶)在計(jì)算機(jī)系統(tǒng)的選型方面有如下建議:
最好建立一個(gè)真實(shí)的試點(diǎn),因?yàn)閷?shí)際應(yīng)用環(huán)境是檢驗(yàn)計(jì)算機(jī)系統(tǒng)的最好標(biāo)準(zhǔn)。
中國(guó)的行業(yè)應(yīng)該建立符合自己實(shí)際應(yīng)用的基準(zhǔn)程序和測(cè)試標(biāo)準(zhǔn)。中國(guó)稅務(wù)總局的做法值得提倡。國(guó)家有關(guān)部門應(yīng)該建立獨(dú)立的測(cè)試中心,制定跨行業(yè)、符合中國(guó)企事業(yè)運(yùn)作模式的性能測(cè)試標(biāo)準(zhǔn)。
“國(guó)際通用”的度量可以作為參考值,而不應(yīng)作為必要條件。尤其是一定要弄清這些流行度量有什么含義,是在什么樣的系統(tǒng)環(huán)境中測(cè)得的,以及基準(zhǔn)程序是否符合企業(yè)真實(shí)的業(yè)務(wù)流程和運(yùn)作模式。
Trackback:
如果對(duì)您有幫助,請(qǐng)記得采納為滿意答案,謝謝!祝您生活愉快!
在一個(gè)系統(tǒng)中,往往會(huì)出現(xiàn)一些長(zhǎng)事務(wù)進(jìn)行大批量的數(shù)據(jù)處理,這些事務(wù)往往占據(jù)大量系統(tǒng)資源,而且運(yùn)行時(shí)間長(zhǎng)。如果我們不能有效的監(jiān)控這些事務(wù),可能會(huì)影響到其他事務(wù)的運(yùn)行,甚至可能會(huì)由于事務(wù)沒(méi)有在預(yù)期時(shí)間內(nèi)完成作業(yè),到了業(yè)務(wù)高峰時(shí)期仍然在運(yùn)行而導(dǎo)致系統(tǒng)被hung。
實(shí)際上,oracle提供了一個(gè)視圖讓DBA來(lái)監(jiān)控長(zhǎng)事務(wù)的運(yùn)行狀況及歷史信息。下面介紹如何使用這個(gè)視圖來(lái)查看長(zhǎng)事務(wù)信息——v$session_longops。
在oracle中,運(yùn)行時(shí)間超過(guò)6秒的事務(wù)就被視為長(zhǎng)事務(wù)。確切地說(shuō),這個(gè)視圖顯示的就是時(shí)間超過(guò)6秒的一些操作,包括備份和恢復(fù)、統(tǒng)計(jì)數(shù)據(jù)收集、查詢中的各種操作。在視圖的各個(gè)字段中,totalwork表示該操作要完成所需要做的總的工作單位數(shù);sofar則是目前已經(jīng)完成的工作單位數(shù);unit則表明工作單位是什么,例如,全表掃描操作中,是以數(shù)據(jù)塊為單位;eplapsed_seconds是操作已經(jīng)完成的時(shí)間,time_remaining是操作的剩余時(shí)間。另外,如果操作涉及到的是sql語(yǔ)句,則可以通過(guò)sql_address和sql_hash_value查詢到相關(guān)語(yǔ)句。
對(duì)于sql查詢,如果要使該視圖可以查詢到相關(guān)記錄,還需要滿足以下2個(gè)條件:
1、 設(shè)置TIMED_STATISTICS為TRUE或者設(shè)置SQL_TRACE為TRUE;
2、 相關(guān)對(duì)象需要已經(jīng)被分析過(guò)。
下面的例子演示如何使用該視圖:
SQL create table t_test2 as select a.* from user_objects a, user_objects b;
Table created.
SQL analyze table t_test2 compute statistics;
Table analyzed.
SQL show parameter timed_statistics
NAME TYPE VALUE
------------------- ------------------------ ---------------------
timed_statistics boolean TRUE
SQL select count(1) from t_test2;
查詢運(yùn)行6秒后,沒(méi)有結(jié)束,在另一個(gè)會(huì)話中查詢視圖:
SQL select opname, target, round(sofar/totalwork*100,2) as progress,
time_remaining, elapsed_seconds from v$session_longops
2 where sofar totalwork;
OPNAME TARGET PROGRESS TIME_REMAINING ELAPSED_SECONDS
-------------- ---------------- ------------ ---------------- -----------------
Table Scan DEMO.TEST2 6.34 635 43
但是,使用該視圖查詢長(zhǎng)事務(wù)操作,也是有一些限制的。例如,對(duì)于語(yǔ)句,需要滿足以上兩個(gè)條件,否則不能從視圖中查詢到相關(guān)操作。另外一個(gè)限制就是,這個(gè)視圖只能能查詢到如單對(duì)象操作,full
table scan、fast full index
scan、sort等,而不能查到多對(duì)象操作,如join??匆韵吕樱?/p>
SQL create table t_test as select * from all_objects;
Table created.
SQL analyze table t_test compute statistics;
Table analyzed.
SQL select count(*) from t_test a, t_test b;
運(yùn)行時(shí)間超過(guò)10秒后,我們?cè)诹硗鈺?huì)話中查詢視圖:
SQL select opname, target, round(sofar/totalwork*100,2) as progress,
time_remaining, elapsed_seconds from v$session_longops
2 where sofar totalwork;
no rows selected
我們看下以上語(yǔ)句的查詢計(jì)劃:
SELECT STATEMENT, GOAL = CHOOSE Cost=1288140 Cardinality=1
SORT AGGREGATE Cardinality=1
MERGE JOIN CARTESIAN Cost=1288140 Cardinality=940587561 IO cost=1288140
TABLE ACCESS FULL Object owner=CSSOWNER Object name=T_TEST Cost=42 Cardinality=30669
BUFFER SORT Cost=1288098 Cardinality=30669
TABLE ACCESS FULL Object owner=CSSOWNER Object name=T_TEST Cost=42 Cardinality=30669
可以看到,該語(yǔ)句的主要消耗的操作是MERGE JOIN
CARTESIAN,即笛卡爾乘積。盡管查詢計(jì)劃中也存在表掃描,但是由于表本身的數(shù)據(jù)量不大,因此表掃描的代價(jià)并不大,cpu時(shí)間消耗不大,因此沒(méi)有被記錄:
SQL set timing on
SQL
SQL select count(*) from t_test;
COUNT(*)
----------
30669
Elapsed: 00:00:00.11
參看集群狀態(tài)
[11:34:11oracle@node1 ~]crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.dba.db application ONLINE ONLINE node2
ora....l1.inst application ONLINE ONLINE node1
ora....l2.inst application ONLINE ONLINE node2
ora.dba.rac.cs application ONLINE ONLINE node2
ora....ll1.srv application ONLINE ONLINE node1
ora....ll2.srv application ONLINE ONLINE node2
ora....SM1.asm application ONLINE ONLINE node1
ora....E1.lsnr application ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....SM2.asm application ONLINE ONLINE node2
ora....E2.lsnr application ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
查看集群資源信息
[12:59:42oracle@node2 ~]srvctl config database -d dba -a
node1 null1 /u01/app/oracle/product/10.2.0/db_1
node2 null2 /u01/app/oracle/product/10.2.0/db_1
DB_NAME: dba
ORACLE_HOME: /u01/app/oracle/product/10.2.0/db_1
SPFILE: +DATA/dba/spfilenull.ora
DOMAIN: wang.com
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
查看連接信息
[13:01:55oracle@node2 ~]srvctl config database -d dba -t
Example client-side TNS entry for service rac:
rac = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db_vip)(PORT=dedicated_port))(CONNECT_DATA=(SERVICE_NAME=rac.wang.com)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))))
Example client-side TNS entry for service name:
name = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db_vip)(PORT=dedicated_port))(CONNECT_DATA=(SERVICE_NAME=name.wang.com)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC))))
查看服務(wù)信息
[13:02:20oracle@node2 ~]srvctl config service -d dba -a
rac PREF: null2 null1 AVAIL: TAF: basic
name PREF: null2 null1 AVAIL: TAF: basic
[13:02:45oracle@node2 ~]srvctl config service -d dba -s rac
rac PREF: null2 null1 AVAIL:
[13:03:01oracle@node2 ~]srvctl config service -d dba -s rac -a
rac PREF: null2 null1 AVAIL: TAF: basic
查看ASM信息
[13:05:41oracle@node2 ~]srvctl config asm -n node1
+ASM1 /u01/app/oracle/product/10.2.0/db_1
[13:05:44oracle@node2 ~]
[13:05:53oracle@node2 ~]srvctl config asm -n node2
+ASM2 /u01/app/oracle/product/10.2.0/db_1
[13:05:56oracle@node2 ~]
查看監(jiān)聽信息
[13:05:57oracle@node2 ~]srvctl config listener -n node2
node2 LISTENER_NODE2
[13:06:15oracle@node2 ~]
[13:06:16oracle@node2 ~]srvctl config listener -n node1
node1 LISTENER_NODE1
查看數(shù)據(jù)庫(kù)狀態(tài)
[13:08:40oracle@node2 ~]srvctl status database -d dba
Instance null1 is running on node node1
Instance null2 is running on node node2
[13:08:43oracle@node2 ~]srvctl status database -d dba -v
Instance null1 is running on node node1 with online services rac name
Instance null2 is running on node node2 with online services rac name
查看監(jiān)聽狀態(tài)
[13:09:27oracle@node2 ~]srvctl status instance -d dba -i null1,null2
Instance null1 is running on node node1
Instance null2 is running on node node2
[13:09:40oracle@node2 ~]srvctl status instance -d dba -i null1,null2 -v
Instance null1 is running on node node1 with online services rac name
Instance null2 is running on node node2 with online services rac name
查看節(jié)點(diǎn)應(yīng)用狀態(tài)
[13:10:29oracle@node2 ~]srvctl status nodeapps -n node1
VIP is running on node: node1
GSD is running on node: node1
Listener is running on node: node1
ONS daemon is running on node: node1
[13:11:44oracle@node2 ~]srvctl status nodeapps -n node2
VIP is running on node: node2
GSD is running on node: node2
Listener is running on node: node2
ONS daemon is running on node: node2
查看節(jié)點(diǎn)ASM狀態(tài)
[13:11:47oracle@node2 ~]srvctl status asm -n node1
ASM instance +ASM1 is running on node node1.
[13:12:26oracle@node2 ~]srvctl status asm -n node2
ASM instance +ASM2 is running on node node2.
測(cè)試TAF
設(shè)定服務(wù)TAF模式為BASIC
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac.wang.com)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
查看集群狀態(tài)
[11:55:50oracle@node2 dbs]crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.dba.db application ONLINE ONLINE node2
ora....name.cs application ONLINE ONLINE node2
ora....ll1.srv application ONLINE ONLINE node1
ora....ll2.srv application ONLINE ONLINE node2
ora....l1.inst application ONLINE ONLINE node1
ora....l2.inst application ONLINE ONLINE node2
ora.dba.rac.cs application ONLINE ONLINE node2
ora....ll1.srv application ONLINE ONLINE node1
ora....ll2.srv application ONLINE ONLINE node2
ora....SM1.asm application ONLINE ONLINE node1
ora....E1.lsnr application ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....SM2.asm application ONLINE ONLINE node2
ora....E2.lsnr application ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
連接數(shù)據(jù)庫(kù)進(jìn)行長(zhǎng)事務(wù)查詢
[11:59:41oracle@node1 ~]sqlplus sys/oracle@rac as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 27 11:59:56 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SYS@NODE2:null2show parameter service_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
service_names string dba.wang.com, rac, name
SYS@NODE2:null2
SYS@NODE2:null2show parameter db_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string dba
SYS@NODE2:null2
SYS@NODE2:null2show parameter instance_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string null2
SYS@NODE2:null2select * from dba_objects;
在事務(wù)執(zhí)行過(guò)程中關(guān)閉當(dāng)前所連接的實(shí)例
[12:00:47oracle@node2 admin]srvctl stop instance -i null2 -d dba -o abort
可觀察到該長(zhǎng)事務(wù)中斷若干秒后繼續(xù)查詢
2005-10-22 21:50:51 2005-10-22 21:51:00 2005-10-22:21:50:51 VALID N N N
觀察集群狀態(tài)
[oracle@node1 ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.dba.db application ONLINE ONLINE node2
ora....name.cs application ONLINE ONLINE node2
ora....ll1.srv application ONLINE ONLINE node1
ora....ll2.srv application ONLINE OFFLINE
ora....l1.inst application ONLINE ONLINE node1
ora....l2.inst application OFFLINE OFFLINE
ora.dba.rac.cs application ONLINE ONLINE node2
ora....ll1.srv application ONLINE ONLINE node1
ora....ll2.srv application ONLINE OFFLINE
ora....SM1.asm application ONLINE ONLINE node1
ora....E1.lsnr application ONLINE ONLINE node1
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora....SM2.asm application ONLINE ONLINE node2
ora....E2.lsnr application ONLINE ONLINE node2
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
1、首先找到Net Manager。
2、打開后會(huì)看到左側(cè)有四個(gè)按鈕圖標(biāo),中間的Oracle?Net配置下有一個(gè)服務(wù)命名。
3、鼠標(biāo)點(diǎn)擊“服務(wù)命名”后,點(diǎn)擊左側(cè)的綠色加號(hào),出現(xiàn)如圖所示界面,輸入“網(wǎng)絡(luò)服務(wù)名”,網(wǎng)絡(luò)服務(wù)名是自己命名的,沒(méi)有硬性限制。
4、點(diǎn)擊“下一步”后,點(diǎn)擊TCP/IP協(xié)議,如圖所示。
5、點(diǎn)擊“下一步”,設(shè)置“服務(wù)名”,連接類型一般是“數(shù)據(jù)庫(kù)默認(rèn)設(shè)置”,如圖所示。
6、點(diǎn)擊“下一步”就會(huì)顯示“測(cè)試”界面,代表設(shè)置已經(jīng)完成,一般Oracle上默認(rèn)的有sys用戶和scott用戶,scott用戶的密碼是:tiger。
查詢是數(shù)據(jù)的一個(gè)重要操作。用戶發(fā)送查詢請(qǐng)求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢,后返回查詢結(jié)果集給用戶,查詢會(huì)產(chǎn)生一個(gè)虛擬表,看到的是表形式顯示的結(jié)果,但結(jié)果并不真正的存儲(chǔ),每次執(zhí)行查詢只是從數(shù)據(jù)表中提取數(shù)據(jù),并按照表的形式顯示出來(lái)。
SELECT 列名
FGROM 表名
[WHERE 查詢條件表達(dá)式]
[GROUP BY 分組表達(dá)式]
[HAVING 分組查詢表達(dá)式]
[ORDER BY 排序的列名 [ASC或DESC]]
group by 用于對(duì)查詢的結(jié)果分組統(tǒng)計(jì),通過(guò)對(duì)group by后面的名字進(jìn)行分組后輸出結(jié)果。
group by后面還可以跟多列表示 多列分組 ,在多列分組時(shí)放前面的優(yōu)先分組。
group by 列名,列名
having 子句用于限制分組顯示結(jié)果,其只能和group by一起連用。在where中沒(méi)有辦法直接使用聚合函數(shù),即sum avg等無(wú)法使用,所以引用了having,在having中可以使用這些函數(shù)。
order by 表示排序,后跟列名和排序方式。如果什么都不加默認(rèn)為升序。ASC表示升序,DESC表示降序。
在Oracle中還可以設(shè)置多列排序
order by 列名1 升降,列名2 升降;
前面的為主要排序,后面的為次一級(jí)排序。
注:碰到自己與自己比較的情況下,不能用having,可以創(chuàng)建一個(gè)新列。
注:如果select語(yǔ)句同時(shí)包含group by,having,order by,按group by,having,order by排序
分組和聚合一起使用,目的是為了統(tǒng)計(jì)信息。
where是為了from服務(wù)的,只能跟 真實(shí)的字段 ,用來(lái)篩選from子句中指定的操作所產(chǎn)生的行
group by 用來(lái)分組where子句的輸出
having 用來(lái)從分組的結(jié)果中篩選行
order by用來(lái)對(duì)篩選的結(jié)果進(jìn)行排序
(1)分組函數(shù):max min?avg sum count
max表示該列的最大值,min表示該列的最小值,avg表示該列的平均值,sum表示該列的和,count表示該列的行數(shù)。
注:分組函數(shù)(max、min、avg、count、sum)只能出現(xiàn)在選擇列表中having子句、order by子句、不能出現(xiàn)在where子句和group by子句中。
(2)多表查詢
多表查詢是指兩個(gè)和兩個(gè)以上的表或者是視圖的查詢,在實(shí)際應(yīng)用中,當(dāng)查詢單個(gè)表不能滿足需求時(shí),一般使用多表查詢。如:顯示sales部門位置和其員工的姓名,這種情況下需要使用到(dept表和emp表)。
多表查詢的連接一般可以分為:內(nèi)連接、左外連接、右外連接、全連接。
注:在使用多表查詢的時(shí)候每個(gè)表可以設(shè)置別名,如果表指定了別名,那么語(yǔ)句中所有語(yǔ)句必須使用別名,而不能再使用實(shí)際表名。且在寫屬性的時(shí)候如果屬性為其中一個(gè)表特有的屬性則不需要寫別名,如果是兩個(gè)表都有則必須指定是哪一個(gè)表的哪個(gè)屬性格式為:表名.屬性名。
select 列名 from 表1 別名,表2 別名...
注:e是emp的別名,d是dept的別名。
但如果對(duì)表進(jìn)行了操作則需要設(shè)置別名,如:查詢每個(gè)部門中工資高于該部門平均工資的員工人數(shù)。在其中有一個(gè)avg表,這個(gè)表必須設(shè)置別名(提醒:如果僅有一個(gè)被修改的表,則可以不設(shè)置別名,但如果有多個(gè)表則必須設(shè)置別名)。
內(nèi)連接
內(nèi)連接通過(guò)使用比較運(yùn)算符來(lái)使每個(gè)表的通用列中的值匹配來(lái)組成一個(gè)新表,即:把兩個(gè)表中間共有的那些行拿出來(lái)進(jìn)行連接,如果某些行不是兩個(gè)表共有的,則不進(jìn)行連接。
select
from 表1
inner join 表2
on 匹配條件
或
select
from 表1 表2
where匹配條件
左外連接
左外連接與內(nèi)連接的區(qū)別是:設(shè)置左外連接的時(shí)候設(shè)置了主表和附表,主表在前,附表在后。內(nèi)連接是將兩個(gè)表匹配的地方輸出出來(lái),而左外連接則是主表全寫,附表一一對(duì)應(yīng),附表有則加上,沒(méi)有不寫。
select
from 表1
left join 表2
on 匹配條件
右外連接
右外連接和左外連接基本相同只是右外連接的主表寫在后邊。
select
from 表1
right join 表2
on 匹配條件
全連接
全連接是在等值連接的基礎(chǔ)上將左表和右表的未匹配數(shù)據(jù)都加上,使用的關(guān)鍵字為full outer join或者full join。
select
from 表1
full join 表2
on 匹配條件
自連接
還有一種特殊情況即自連接,在Oracle中一個(gè)表無(wú)法與自己進(jìn)行比較,所以當(dāng)需要自己表的兩個(gè)信息做比較的時(shí)候也需要使用連接來(lái)連接,即同一張表的連結(jié)查詢。
(3)子查詢
子查詢是指嵌套在其他sql語(yǔ)句中的select語(yǔ)句,也叫嵌套查詢。sql語(yǔ)句執(zhí)行順序?yàn)閺挠业阶髨?zhí)行,所以在執(zhí)行查詢時(shí)會(huì)先執(zhí)行左側(cè)的子查詢后進(jìn)行主查詢。
子查詢分為單行子查詢和多行子查詢,單行子查詢是指返回一行數(shù)據(jù)的子查詢語(yǔ)句,多行子查詢是指返回多行數(shù)據(jù)的查詢語(yǔ)句。子查詢還可以分為多列子查詢、多行子查詢、多列多行子查詢。
在進(jìn)行子查詢時(shí)如果內(nèi)部查詢不返回任何記錄,則外部條件中字段DEPTNO與NULL比較永遠(yuǎn)為假,也就是說(shuō)外部查詢不返回任何結(jié)果。
總結(jié)為:
單行子查詢是指子查詢只返回單列、單行數(shù)據(jù)
多行子查詢是指返回單列多行數(shù)據(jù),都是針對(duì)單列而言的
多列子查詢則是指查詢返回多個(gè)列數(shù)據(jù)的子查詢語(yǔ)句
單行子查詢
where deptno = (單行數(shù)值)
多行子查詢
where deptno in ( 多行數(shù)值 )
多列子查詢:
where (job,deptno)=(select job,deptno from emp where ename='KING')
多列多行子查詢
where (job,deptno) in (select job,deptno from emp where ename='KING')
單行子查詢
在單行子查詢的外部查詢中可以使用=、、、=、=、等比較運(yùn)算符。
內(nèi)部查詢返回的結(jié)果必須與外部查詢條件中字段(DEPTNO)相匹配。
多行子查詢
在WHERE子句中使用多行子查詢時(shí),可以使用多行比較運(yùn)算符(IN,ALL,ANY)。
IN:等于任何一個(gè)。
ALL:和子查詢返回的所有值比較。例如:salALL(1,2,3)等價(jià)于sal3,即大于所有。
ANY:和子查詢返回的任意一個(gè)值比較。例如:salANY(1,2,3)等價(jià)于sal1,即大于任意一個(gè)就可以。
注:ANY運(yùn)算符必須與單行比較運(yùn)算符結(jié)合使用,并且返回行只要匹配子查詢的任何一個(gè)結(jié)果即可。
多列子查詢
多列子查詢和多行子查詢相同,只是使用多列子查詢的時(shí)候會(huì)有多列進(jìn)行匹配。
(4)集合運(yùn)算
為了合并多個(gè)select語(yǔ)句的結(jié)果,可以使用集合操作符號(hào)union,union all,intersect,minus。
union:該操作符用于取得兩個(gè)結(jié)果集的并集。當(dāng)使用該操作符時(shí),會(huì)自動(dòng)去掉結(jié)果集中重復(fù)行
union all:該操作與union相似,但是它不會(huì)取消重復(fù)行,而且不會(huì)排序
intersect:使用該操作符用于取得兩個(gè)結(jié)果集的交集
minus:使用該操作符用于取得兩個(gè)結(jié)果集的差集,它只會(huì)顯示存在第一個(gè)集合中,而不存在第二個(gè)集合中的數(shù)據(jù)
總結(jié)為集合運(yùn)算就是將兩個(gè)或者多個(gè)結(jié)果集組合成一個(gè)結(jié)果集。
intersect ?交集 返回兩個(gè)查詢共有的記錄
union all ?并集 返回各個(gè)查詢的所有記錄,包括重復(fù)的記錄
union ? ? ?交集 返回各個(gè)查詢的所有記錄,不包括重復(fù)的記錄
MINUS ? 補(bǔ)集 返回第一個(gè)查詢檢查出的記錄減去第二個(gè)查詢檢索出來(lái)的記錄之后剩余的記錄
注意:當(dāng)使用集合操作的時(shí)候,查詢所返回的列數(shù)以及列的類型必須匹配,列名可以不同。
(1)Distinct關(guān)鍵字
在Oracle中,可能出現(xiàn)若干相同的情況,那么可以用Distinct消除重復(fù)行
(2)多表查詢與單行子查詢可以實(shí)現(xiàn)相同的功能
查詢出銷售部(sales)下面的員工姓名,工作,工資
(3)顯示高于自己部門平均工資的員工信息
分析:
1.找到所有部門的平均工資
select deptno,avg(sal) from emp group by deptno;
2.找到所有人的工資信息
select ename,sal,deptno from emp;
3.把兩個(gè)結(jié)果集使用多表連接組合組合起來(lái)
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;
4.去掉低于平均工資的那些數(shù)據(jù)即可:
select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;
(4)emp表介紹
字段? ? ? ? ? ? ? 類型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述
empno ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示雇員編號(hào),是唯一編號(hào)
ename ? ? ? ? ?VAECHAR2(10) ? ? ? ? ? 表示雇員姓名
job ? ? ? ? ? ? ? ?VARCHAR2(9) ? ? ? ? ? ? 表示工作職位
mgr ? ? ? ? ? ? ?NUMBER(4) ? ? ? ? ? ? ? ? 表示一個(gè)雇員的領(lǐng)導(dǎo)編號(hào)
hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇傭日期
sal ? ? ? ? ? ? ? NUMBER(7,2) ? ? ? ? ? ? ? 表示月薪,工資
comm ? ? ? ? ?NUMBER(7,2) ? ? ? ? ? ? ? 表示獎(jiǎng)金,或者稱為傭金
deptno ? ? ? ? NUMBER(2) ? ? ? ? ? ? ? ? 部門編號(hào)