如何将 Amazon Relational Database Service (Amazon RDS) for Oracle 配置为使用共享服务器?

Oracle 用户可以使用专用或共享的服务器进程连接到数据库实例。使用共享的服务器之前,请考虑以下情况:

  • 使用共享服务器会产生 CPU 开销,从而可能导致性能问题。
  • 使用共享服务器意味着 UGA 分配在大型池内分配。确保 SGA 内有足够的可用空间容纳共享服务器。可用空间不足可导致实例的警报日志和跟踪日志中出现“large pool free(无大型池)”错误。
  • 使用共享服务器可能导致 SGA 内存更频繁地动态重新分配,从而可能导致性能问题。
  • 在数据库重新引导或故障转移期间,如果 DISPATCHERS 参数相对于连接吞吐量设置得不够高,则应用程序连接的大量增长可能会淹没调度程序。
  • 在共享服务器上运行批处理流程、长时间运行的查询、重负载和长时间运行的 DBA 任务可导致其他作业排队,从而可导致性能问题。对大型作业使用专用服务器。

有关 Oracle 数据库共享服务器和专用服务器架构的更多信息,请参阅 Understanding Shared Server Architecture

平衡使用共享服务器的优点和局限:

  • 对经常连接和断开并执行少量操作的大量 OLTP 会话使用共享服务器
  • 对长时间运行的批处理操作和繁重的管理任务(例如创建索引)使用专用服务器

注意:以下示例作为启用具有指定实例大小(db.r3.large 实例)的共享服务器的基准提供。管理员应根据其使用案例应用优化内存的参数组和安全组设置。有关更多信息,请参阅 Amazon RDS 上的 Oracle

1.   将 DISPATCHERS 设置为允许的最大值:

  dispatchers=(PROTOCOL=TCP)(DISPATCHERS=30)
  max_dispatchers=30

2.   登录到实例并查看主机大小的 SESSIONS 默认值。如果没有使用默认设置,则使用默认参数组测试该实例:

  SQL> show parameter sessions
  2428

3.   将 SHARED_SERVERS 和 MAX_SHARED_SERVERS 设置为该值的 10%:

  sessions=2428
  shared_servers=243
  max_shared_servers=243

4.   将 LARGE_POOL_SIZE 设置为等于 SHARED_SERVERS 值 * 1MB(本例中为 243 * 1048576 字节)。

large_pool_size= 254803968

5.   查询 v$sgastat for large_pool_size“可用内存”以确保大型池有足够的大小。

SQL> select name, pool, bytes/1024/1024 megs from v$sgastat where name='free memory' and pool='large pool';
Name           POOL        Megs
-------------- ----------- -------
free memory    large pool  243

6.   查看应用于正在运行的 Oracle 实例的参数组设置,然后从该实例运行以下 SQL 查询:

select name, value from v$parameter where name in ('processes', 'sessions', 'shared_servers', 'dispatchers', 'memory_target', 'memory_max_target', 'large_pool_size');

7.   从您的 Oracle 实例运行以下 SQL 查询,了解会话是否以共享方式连接:

SQL> select decode(server,'NONE','SHARED',server), count(*) from v$session
group by decode(server,'NONE','SHARED',server);

要对同一个 Oracle 实例启用专用和共享服务器访问,请使用双重 tnsnames.ora 条目,如下例中所示:

  # make the default shared
 
  dbname = 
  (DESCRIPTION= 
      (ADDRESS_LIST= 
          (ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
      )
      (CONNECT_DATA=
          (SID=dbname)
      )
  )

  # use the dedicated one for batch processes and dba tasks such as creating indexes

  dbname_d=
  (DESCRIPTION=
      (ADDRESS_LIST=
          (ADDRESS=(PROTOCOL=TCP)(HOST=dbname.endpoint.amazonaws.com)(PORT=1521))
      )
      (CONNECT_DATA=
          (SID=dbname)
          (SERVER=DEDICATED)
      )
  )

此页面对您有帮助吗? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2016 年 11 月 11 日

更新时间:2018 年 5 月 22 日