如何将 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) ) )