oracle常見問題與解答

2021-09-01 01:41:53 字數 4642 閱讀 5251

1.對於sql,有幾種方法檢視執行計畫,每種方法有什麼區別,對於一條正在執行的sql,如何檢視真實的,正在使用的執行計畫?

答:第一種方法:explain plan for…,生成指定sql語句的執行計畫,並把執行計畫儲存到使用者指定的表中,供使用者查詢,但不作為真正執行時的執行計畫,因為並沒有儲存在library cache中,得到的執行計畫也不只library cache中的,所以不是真正的執行計畫。

(1)sql>explain plan for select * from emp

(2)sql>select * from table(dbms_xplan.display);

第二種方法:sql trace 和10046事件。檢視trace檔案,跟蹤某個session的活動情況,跟蹤的結果包括生成sql語句的執行計畫,可以用tkprof工具檢視跟蹤檔案。執行計畫有parse,bind,exec,fetch4個子過程,三個指標比較重要:disk(物理磁碟讀取次數),query(一致性讀),current(當前讀)這3列,調整的目標也是降低這3個統計量。跟蹤會話資訊:

(1)exec dbms_support.start_trace_in_session(sid=>,serial=>,waits=>true,binds=>true),其中的sid和serial可以從v$session中獲取。(2)從v$process中獲取os的pid和oracle的pid.然後sql>oradebug setospid …; sql>oradebug setorapid…;

第三種方法:從library cache中獲取,就是真正的執行計畫。其實就是綜合利用了v$sql_plan,v$sql_plan_statics(statics_level引數設為all),v$sql_workarea,v$sql_plan_statics_all這幾張檢視。可以對以上幾張檢視寫查詢,來獲得特定sql語句真正的執行計畫,也可以按照下面的步驟得到真正的執行計畫。

(1) select /*zhangxm*/ count(*) from table….

(2) select sql_id from v$sql where sql_text like 『% zhangxm %』; --得到這個語句的sql_id

(3) select * from table(dbms_xplan.display_cursor(『sql_id』,null,』basic』)); --以basic方式查

(4) select * from table(dbms_xplan.display_cursor(『sql_id』,null,』typical』));--以typical方式

(5) select * from table(dbms_xplan.display_cursor(『sql_id』,null,』all)); --以all方式檢視

看其中的一些列,比如isstats,memstats,allstats:實際花費。a_time:語句執行時真正的花費。

還有一種:select * from table(dbms_xplan.display_cursor(『sql_id』));--呼叫display_awr,傳入sql_id引數。

2.常見oracle 錯誤,如 ora-01555 , ora-4031等,說說起因,及常見的規避方法。

答:引起ora-01555錯誤原因:回滾段中的資料被新事務覆蓋使得乙個耗時很長的查詢讀不到需要讀取的資料快。措施:undo_management 應該設定為auto.加大undotablespace引數值。加大undo_retention引數值。但也不能設的太大,太大會引起系統的效能下降。

引起ora-04031錯誤原因:在共享池中試圖分配記憶體失敗的時候,oracle 首先重新整理池中當前沒使用的所有物件,使空閒記憶體塊合併。如果仍然沒有足夠大單個的大塊記憶體滿足請求,就會產生ora-04031 錯誤。措施:加大shared_pool_size引數的值。但如果當前該值已經比較大了,那麼ora-4031錯誤發生的原因很可能是因為oracle資料庫的bug,或是少了某個修補,或是應用程式未能很好的使用繫結變數(bind variable)而引起。這個時候應該給資料庫打最新的修補或調整應用程式,使應用程式盡可能地使用繫結變數,單純增加shared_pool的大小一般無法解決問題。

還有一種ora-4031錯可能是因為shared_pool中的碎片太多所致。查詢v$shared_pool_reserved檢視,看其中的乙個欄位request_failures,如果該值不為0那麼就是由於碎片太多引起。措施:可以用重新整理shared_pool的方法暫時解決ora-4031的故障,但可能會引起資料庫暫時的效能下降。

其他的一些基本的錯誤,比如表空間沒有足夠的空間可分配而引發。比如ora-1652、ora-1653、ora-1654和ora-1655,針對這些錯誤,一般解決的方法有:(1)增加資料檔案或調整資料檔案的大小。(2) 設定autoextend on .(3) 收縮物件。 (4) 降低undo_retention (5) 檢查長時間執行的查詢sql,試著優化sql語句。

3.rac環境下的cache fusion概念如何理解,如何設計才能使rac系統的效能優良並持續穩定並體現出rac對於單機的優越性,主要有哪些方面?

答:cache fusion:緩衝區融合.在rac環境下,db cache在每個例項中都有乙份.這些db cache之間需要融合才能保證資料訪問的一致性.由於多個例項中多個db cache的存在,導致了db cache需要在多個例項之間進行傳遞,有幾種模式:讀讀共享,讀寫共享,寫寫共享。

cache fusion最主要的思路是分割了全域性鎖的模式和授予這個鎖的持有者的角色。通過ipc(inter process communication)機制在緩衝之間傳遞db cache,並且在系統中保持同乙個資料塊的多個pi block(資料快影像)。

具體優化的措施有:

(1) 應用隔離:在rac不同節點跑不同應用,最大幅度減少資料共享。

多個應用共享非關鍵資料,核心業務資料的關聯度較小,確保rac間共享的資料較少,訪問衝突限制在乙個可控的範圍內。

(2) 通過表分割槽來限制某個分割槽被某個例項使用減少熱塊爭用。通過表分割槽,使資料分散在數個segment中,其高水位推進,資料訪問等也被分散。

(3) 增加db cache的命中率

db cache命中率提高,不僅減少i/o,而且可以大幅度減少global cache cr request等待。如果可以直接找到db cache,就不需要訪問其它例項了;如果沒有找到,就要到其他例項中去查詢,如果還沒找到,才會從硬碟上去讀取,開銷就比單例項環境大很多。命中率最好在95%以上。

(4) 增加共享池的命中率

保持比較充足的共享池資源,使用好的程式設計習慣,合理使用繫結變數等都有助於提高rac的效能.

(5) 加大sequence 的cache

在rac環境下,sequence變為全域性性,不同節點要生成序列號,就會產生對sequence資源的爭用。sequence一般作為主鍵發生器,使用頻率高。在rac環境下,需要設定較大的sequence cache,避免發生嚴重的爭用,從而影響到業務。

(6) 使用唯讀表空間.

在cache fusion下,如果某個表空間是唯讀的,那麼這個表空間中資料的訪問只需要本地操作就行了,不需要rac互相的協同.實際上,資料在某個時間段裡都會有大量的唯讀資料,而如果這些資料訪問十分頻繁的話,就會對ges和gcs產生嚴重的影響。

(7) 減少大表的全表掃瞄.

全表掃瞄對db cache的影響十分大,會占用大量的db cache,這樣就會把很多資料快從db cache中擠出去。而且也會帶來大量的物理讀,開銷遠大於單機環境。

(8) 限制並行查詢在例項範圍內,不要在rac例項之間做並行查詢

跨例項做並行查詢主要是為了解決單機cup能力不足的問題,但是跨例項並行查詢會引起gcs方面的問題.其實如果單機cup能力比較強的話,使用跨例項並行查詢往往會得不償失。在rac下,通過設定instance_groups和parallel_instance_group引數就可以實現將並行查詢限制在本機上。

(9) 資料的橫向隔離.

是在應用隔離的基礎上進一步的措施.如果某個應用非常龐大,乙個單節點無法承擔,那麼資料的橫向隔離就可以派上用處。以我們sg186電力營銷業務為例,其核心業務資料是按照各個供電單位進行範圍分割槽,那麼可以設定部分本地的應用連線到例項1上,部分本地網的應用連線到例項2上.通過表分割槽來確保核心業務資料之間的衝突降低到最小,從而避免由於rac中資料塊爭用帶來的問題。

4.aix系統中,主機引數maxperm,minperm,對資料庫有何影響,該如何設定此引數。或者你了解hp-ux中,有什麼引數與該引數類似?

答:aix作業系統中的記憶體可以認為分為2個部分,1個部分為計算記憶體(computational),用於應用程式執行使用。另1個部分為檔案快取(non-comp),用於檔案快取。aix作業系統通過 minperm%,maxperm%, maxclient%等引數控制系統的記憶體使用。

對於如何設定maxperm,minperm,我想最為重要的是考慮應用,看業務是計算型記憶體使用多,還是檔案型記憶體使用多。如果伺服器是ftp伺服器,或者nim伺服器,nfs伺服器,那麼非計算記憶體就不要設定太小。而如果是資料庫,那麼非計算記憶體設定小一些,計算型記憶體盡量給大一些。

比如典型的aix系統,記憶體16gb 64位作業系統,oracle可以給非計算記憶體5%-10%。給oracle的記憶體為aix系統物理記憶體的40%到60%。一般的資料庫伺服器,檔案型記憶體可以使用較少的空間,因為檔案型記憶體並不主動釋放,可能造成記憶體資源的短缺及paging space使用率過高,所以資料庫伺服器上maxclient、maxperm、minperm的值不宜過大,一般可以這樣設定:maxperm% = 12, minperm% = 5。

python常見問題與解答

1 python函式返回多個值 def getvaule a,b c a b d a b e a b return e,d,e x,y,z getvaule 5,10 print x x,y y,z z 2 list去重問題 1 直觀方法 number 5,6,3,4,5,3,1,2,3,2,1,3...

CUDA常見問題與解答

源 1.在sdk自帶的例子程式中,發現src檔案珜下有.cpp檔案和.cu檔案。這兩種檔案的關係和各自的作用是什麼呀?答 sdk自帶例子中的.cpp檔案主要是一些cpu端處理,或者是使用cpu計算對照組結果,在某些例子中也會在.cpp檔案中以函式的形式呼叫封裝成c或者c 函式的gpu端 cu檔案中通...

SEO服務常見問題與解答

1 什麼是seo服務?seo,即搜尋引擎優化 search engine optimization 通過圍繞關鍵字展開的技術進行的新型網路營銷方式。它的核心即提高關鍵字排名,其目的是增加 率。2 使用seo服務有什麼意義?3 為什麼選擇seo服務而不選擇其他關鍵字廣告?關鍵字廣告的服務有搜尋引擎服務...