Sybase ASE et la pagination (ISM : Intimate Shared Memory, ipcs -ami)

Logo

Introduction

Au démarrage d’un serveur Sybase ASE, il est possible de savoir si l’OS Solaris garantit ou non que le serveur Sybase n’est pas susceptible de paginer au niveau de la mémoire.

Typiquement, le message ci-dessous dans le fichier de log du serveur Sybase :

kernel os_create_region: shmat(1000): unable to use ISM, use normal attach

indique que la mémoire partagée (shared memory) utilisée par Sybase n’est pas en mode ISM (Initimate Shared Memory), ce qui indique que l’OS ne garantit pas que le serveur Sybase ne paginera pas au niveau de la mémoire.

Dans ce contexte : il n’y a plus assez de mémoire disponible pour contenir l’équivalent du paramètre 'total memory' ou 'max memory' du serveur Sybase. Il est donc préférable de démarrer le serveur Sybase avec un un peu moins de mémoire.

La commande ipcs –ami

La commande ipcs –ami permet de savoir si la mémoire partagée (shared memory) est en mode ISM (Intimate Shared Memory) ou pas.

shell> ipcs –ami

La sortie est allégée dans les exemples pour la lisibilité.

IPC status from as of Tue Sep 2 18:19:46 MEST 2003
T ID   KEY        ... CREATOR  CGROUP NATTCH SEGSZ       ... ISMATTCH
Shared Memory:
m 1000 0x2c028783 ... sybase   dba    2      2036441088  ... 0

La colonne NATTCH indique 2, ce qui signifie que le serveur Sybase est sur 2 engines.

Lorsque ISMATTCH vaut 0 dans ce qui est retourné par la commande ipcs -ami, cela signifie que la mémoire partagée n’est pas en mode ISM et que le serveur Sybase est susceptible de paginer.

Autre exemple :

IPC status from as of Tue Sep 2 18:19:46 MEST 2003
T ID   KEY        ... CREATOR  CGROUP NATTCH SEGSZ       ... ISMATTCH

Shared Memory:
m 1000 0x2cfa0d03 ... sybase   dba    7      12275220480 ... 7

ISMATTCH vaut 7 (NATTCH = 7, soit NATTCH=ISMATTCH) : cela signifie que la mémoire partagée pour le serveur Sybase positionné sur 7 engines est en mode ISM et donc que l’OS garantit que le serveur Sybase ASE ne pagine pas et ne paginera jamais.

Dans certains cas, des segments de mémoire partagée peuvent ne pas être libérés à l’arrêt d’un serveur Sybase ASE : pour vérifier ce comportement, utiliser les commandes ipcs et ipcrm (cf documentation Sybase et Troubleshooting de la mémoire partagée). Par ailleurs, il faut toujours attendre un peu lors d’un serveur Sybase ASE (de quelques secondes à 30s pour un serveur de 40 Go de mémoire) pour que Solaris libère la mémoire effectivement. Si le redémarrage est effectué trop tôt, il se peut que le système n’alloue pas la mémoire en mode ISM, mais en mode normal (donc risque de pagination).

Pour vérifier la mémoire libre sur la machine ou si elle a été totalement libérée, utiliser la commande vmstat (ex : vmstat 2 ) et plus particulièrement la colonne free retournée par la commande qui indique la mémoire libre en Ko.