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.