PLSQL中的上下文切換(context switch)

PLSQL程序中的上下文切換(context switch)是指SQL和PLSQL編譯環境之間的切換,大量的上下文切換會導致程序運行效率低下。

PLSQL是一種過程性語言,而SQL不是過程性語言。

PLSQL代碼會被編譯成機器語言,在運行時虛擬機會把這些處理解釋成過程性語言。

SQL和PLSQL兩個環境是相對獨立的,可以單獨運行PLSQL代碼,也可以單獨運行SQL代碼。

但是SQL調用PLSQL就會產生一定的開銷(所謂的hit),

begin 
  for x in (select * from t_a ) 
  loop 
    insert into t_b values ... 
  end loop; 
end; 

上面的代碼中select * from t_a是SQL,每執行一個loop就切換到insert(PLSQL環境),會產生一定的調用消耗。

而PLSQL調用SQL會好一些,比如下面這個把select(SQL)內置到insert語句(PLSQL)

insert into t_b select * from t_a; 

如何減少上下文切換:

1.儘可能使用本地SQL函數(在內核中實際是“C”語言),(比如用CASE,DECODE和其他的標量子查詢來完成)
2.用結果緩存,比如deterministic
3.用FORALL取代FOR
這裏寫圖片描述
總之,在寫代碼時碰到大批量重複操作、循環操作時,想一下是否存在上下文切換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章