一、如何判断是共享模式还是专有模式(这个和数据库参数shared_servers、和客户端的TNSname.ora有关。)

    1.查看服务器共享模式参数

    SQL> show parameter SHARED_SERVERS

shared_servers大于零就是共享连接(只是服务器支持)。但是连接选择是共享还是专有是由客户端决定的。

    2.查看每个连接的模式

    SQL> select server,program,status from v$session order by server;

能够查看每个连接的模式DEDICATED 是专有 SHARED 是共享。

    3.tnsnames.ora可以查看连接的模式配置DEDICATED专有、SHARED共享

如下,4种情况:

DB shared_servers = 0 , TNSname.ora server=shared或者不设置 ==> DEDICATED连接

DB shared_servers = 0 , TNSname.ora server=DEDICATED ==> DEDICATED连接

DB shared_servers > 0 , TNSname.ora server=DEDICATED ==> DEDICATED连接

DB shared_servers > 0 , TNSname.ora server=shared或者不设置 ==> Shared连接

二、专有服务器模式下processes值设的过小。可通过以下方法解决:
    1.cmd
    2.sqlplus
    3.connect sys/test as sysdba
    4.查看会话数、processes、sessions
    SQL> select count(*) from v$session;
         COUNT(*)
 
        ----------
           45
    SQL> show parameter processes
    NAME                                 TYPE        VALUE
    db_writer_processes                  integer     1
    gcs_server_processes                 integer     0
    job_queue_processes                  integer     10
    log_archive_max_processes            integer     2
    processes                            integer     50

    SQL> show parameter sessions
    NAME                                 TYPE        VALUE
    java_soft_sessionspace_limit         integer     0l
    icense_max_sessions                 integer     0
    license_sessions_warning             integer     0
    logmnr_max_persistent_sessions       integer     1
    sessions                             integer     60
    shared_server_sessions               integer
    5.修改processes和sessions值:sessions=(1.1*process+5)
    SQL> alter system set processes=300 scope=spfile;
   系统已更改。
  SQL> alter system set sessions=335 scope=spfile;
     系统已更改。
    6.重启数据库,使更改生效
三、共享模式下
    1.show parameters dispatchers;
    NAME                TYPE             VALUE
    dispatchers         string           (protocol=tcp)(service=oracle10xdb)
    max_dispatchers      integer 
    2.确定是否有足够的dispatchers
    SQL> select  name, (busy/(busy + idle)) "dispatcher busy rate" from v$dispatcher ;  
    NAME dispatcher busy rate
    ---- --------------------
    D000           .000121704
    D001           .000042597
    D002           .004935402 
    如果超过50%,则需要考虑增加更多的dispatchers;
    3.改变dispathchers:
    SQL>alter system set dispatchers = '(protocol=tcp)(dispatchers=3)(service=oracle10xdb)';
    system altered
四、PGA内存设置太小
    注:该方法没试过。

作者“ERDP技术架构”

没有登录不能评论