close
Oracle本身提供Stored ProcedureFunction call兩種機制便於開發者將loading轉給Oracle負擔:Stored Procedure為預先編譯,可獲較佳效能;而Function call則可被SQL語法呼叫,具重複使用功能。茲區分如下:
  Stored Procedure Function call
Compiler 預先編譯存到DB 執行期編譯
Return value 可不回傳resultset,最多回傳1024個 至少且只能回傳一個resultset
被SQL引用 不能 能,包括where, having...
update Database 能使用commit 無法使用commit
mainly used process the tasks compute values
Queue住的問題 未知

在專案過程,一度以為Function的執行期編譯與會Queue住multi-request的情形會拖垮效能導致掛掉,後來請教學長,恐怕是裡面使用Cursor的緣故,不管是Fucntion或者是Stored Procedure

大部分DB的Cursor都是使用C語言寫的,Cursor就相當於C語言的File handle,而OS對File Handle的配給有其上限,所以在壓力測試之下,File Handle都已分配完畢且都在使用中,再進來的Request因為沒有配額而出錯,而正使用中的Cursor的handle是有可能因此得不到Release,對J2EE AP Server而言,它在OS下只是一條process,所以因Cursor handle不足,導致Oracle的Function機制掛掉,但對Oracle的select仍可使用

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()