如何将 Amazon RDS Oracle 数据库实例配置为使用共享服务器?

上次更新时间:2020 年 2 月 4 日

如何将 Amazon Relational Database Service (Amazon RDS) Oracle 数据库实例配置为使用共享服务器?

简短描述

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

  • 使用共享服务器会产生 CPU 开销,这可能会导致性能问题。
  • 使用共享服务器意味着 UGA 分配在一个大池内进行。请确保您的 SGA 内有足够的可用空间,可容纳共享服务器。可用空间不足会导致“大池空闲”错误显示在实例提醒日志和跟踪文件中。
  • 使用共享服务器可能会导致更频繁的 SGA 内存动态重新分配,这可能会造成性能问题。
  • 在数据库重启或故障转移期间,如果 DISPATCHERS 参数相对于连接吞吐量设置的不够高,则大幅增加应用程序连接可能会使调度程序不堪重负。
  • 在共享服务器上运行批处理流程、长期运行的查询、重负载或长期运行的 DBA 任务可能会导致其他作业排列等候,继而可能会导致性能问题。对大型作业使用专用服务器。

有关 Oracle 数据库共享服务器和专用服务器架构的更多信息,请参阅了解共享服务器架构的 Oracle 文档。

解决方法

要平衡使用共享服务器的优势和限制:

  • 对经常连接和断开连接并执行轻操作的大量 OLTP 会话使用共享服务器
  • 对长期运行的批量操作和创建索引等繁重管理任务使用专用服务器

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

1.    修改自定义参数组,以将下列参数设置为最大允许值或满足您的使用案例的值:

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 值 * 1 MB(在此情况下,为 243 * 1048576 个字节)。

large_pool_size= 254803968

5.    查询 v$sgastat 以了解 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)
      )
  )

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?