Comment dois-je configurer des instances de base de données Oracle Amazon RDS afin qu'elles fonctionnent avec des serveurs partagés ?

Date de la dernière mise à jour : 04/02/2020

Comment dois-je configurer des instances de base de données Oracle Amazon Relational Database Service (Amazon RDS) afin qu'elles fonctionnent avec des serveurs partagés ?

Courte description

Les utilisateurs du système Oracle peuvent se connecter aux instances de base de données RDS à l'aide de processus serveur dédiés ou partagés. Avant d'employer des serveurs partagés, tenez compte des éléments suivants :

  • L'utilisation de serveurs partagés entraîne une surcharge du CPU, susceptible de provoquer des problèmes de performances.
  • L'utilisation de serveurs partagés implique que la mémoire UGA soit allouée au sein d'un large pool. Assurez-vous donc de disposer de suffisamment d'espace libre dans la mémoire SGA. Vous éviterez ainsi l'affichage de messages d'erreur dans le journal des alertes et les fichiers de trace de l'instance.
  • L'utilisation de serveurs partagés peut entraîner une réattribution dynamique plus fréquente de la mémoire SGA, ce qui peut provoquer des problèmes de performances.
  • Lors du redémarrage ou du basculement de la base de données, une augmentation importante des connexions à l'application peut déboucher sur une surcharge des répartiteurs si la valeur du paramètre DISPATCHERS n'est pas suffisamment élevée par rapport au débit de la connexion.
  • L'exécution, sur des serveurs partagés, de processus par lot, de requêtes de longue durée, de charges lourdes ou de tâches DBA de longue durée peut entraîner la mise en file d'attente d'autres tâches, ce qui peut provoquer des problèmes de performances. Utilisez des serveurs dédiés pour les tâches volumineuses.

Pour obtenir des informations supplémentaires sur l'architecture Oracle Database avec serveurs partagés et serveurs dédiés, consultez la section Présentation de l'architecture avec serveurs partagés de la documentation Oracle.

Solution

Pour limiter au maximum les inconvénients des serveurs partagés :

  • Utilisez des serveurs partagés en cas de nombreuses sessions OLTP impliquant des connexions et déconnexions fréquentes, et effectuez des opérations non lourdes.
  • Utilisez des serveurs dédiés pour les opérations par lot de longue durée et les tâches administratives lourdes, telles que la création d'index.

Remarque : les exemples suivants se rapportent à l'activation de serveurs partagés avec la taille d'instance spécifiée (instance db.r3.large). Les administrateurs doivent appliquer des paramètres de groupe afin d'optimiser l'utilisation de la mémoire en fonction des besoins. Pour obtenir des informations supplémentaires, consultez la section Oracle sur Amazon RDS.

1.    Modifiez le groupe de paramètres personnalisés afin de définir, pour ceux ci-dessous, la valeur maximale autorisée ou une valeur correspondant à vos besoins :

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

2.    Connectez-vous à l'instance, puis consultez la valeur par défaut définie pour le paramètre SESSIONS et la taille de l'hôte. Si vous n'utilisez pas les paramètres par défaut, testez l'instance avec le groupe de paramètres par défaut :

SQL> show parameter sessions
2428

3.    Définissez les paramètres SHARED_SERVERS et MAX_SHARED_SERVERS sur une valeur correspondant à 10 % de celle-ci :

sessions=2428
shared_servers=243
max_shared_servers=243

4.    Appliquez la valeur du paramètre SHARED_SERVERS au paramètre LARGE_POOL_SIZE, puis multipliez-la par 1 Mo (243 x 1 048 576 octets dans ce cas).

large_pool_size= 254803968

5.    Saisissez la requête v$sgastat for large_pool_size '‘free memory'’ pour vous assurer que la taille du pool est adéquate.

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.    Consultez les paramètres de groupe qui s'appliquent à une instance Oracle en cours d'exécution, puis exécutez la requête SQL suivante à partir de cette dernière :

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

7.    Exécutez la requête SQL suivante à partir de votre instance Oracle pour vérifier si les sessions sont de type SHARED :

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

Pour permettre l'accès du serveur dédié et partagé à la même instance Oracle, utilisez des entrées tnsnames.ora doubles, comme dans l'exemple suivant :

  # 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)
      )
  )