解決超過會話數問題

zhaoqing0803發表於2011-07-19
  今天本人執行一條sql:
   select userid,packageid from partition_table
   group by userid,packageid
   having count(1)>1;
   結果報超過會話數錯誤。
   本人立即查詢v$session檢視,總共有1百多個會話,大部分狀態為INACTIVE的,
後臺有好多像ora_p01_ora11g,ora_p02_ora11g,ora_p02_ora11g等程式;
    本人上網一查,結果是並行執行的程式導致
    並行執行的程式,對應的初始化引數是:PARALLEL_MAX_SERVERS
這個PARALLEL_MAX_SEVERS引數設定並行執行可用的最大程式數量,
該引數的預設值如下得出:
對於9i
1.如果PARALLEL_AUTOMATIC_TUNING=FALSE
   PARALLEL_MAX_SERVERS=5
2.如果PARALLEL_AUTOMATIC_TUNING=TRUE
   PARALLEL_MAX_SERVERS=CPU_COUNT x 10

9i中PARALLEL_AUTOMATIC_TUNING預設為FALSE,所以PARALLEL_MAX_SERVERS預設為5

對於10g
1.如果PGA_AGGREGATE_TARGET >0
    PARALLEL_MAX_SERVERS=CPU_COUNT x          
    PARALLEL_THREADS_PER_CPU x 10
2.如果PGA_AGGREGATE_TARGET=0
    PARALLEL_MAX_SERVERS=CPU_COUNT x  
    PARALLEL_THREADS_PER_CPU x 5

然後檢視伺服器有16個cpu,通過cat /proc/cpuinfo 裡有多少個processor來得出

最後修改系統引數:alter system set PARALLEL_MAX_SERVERS=16 scope=both;
重啟資料庫後,發現這些程式少了。

   
   

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23205405/viewspace-702569/,如需轉載,請註明出處,否則將追究法律責任。

相關文章