Le serveur HFSQL utilise un système de cache pour accélérer les traitements. Au démarrage, le serveur HFSQL positionne le premier niveau des arbres d'index pour tous les fichiers dans son cache. Par la suite, HFSQL garde dans son cache les arbres d'index utilisés lors de l'exécution des requêtes ou des parcours de fichiers. Le cache va donc se remplir jusqu'à la taille maximale définie dans le Centre de contrôle HFSQL. Une fois la taille maximale atteinte, il supprimera de son cache les index n'ayant plus d'activité depuis le plus longtemps.

 

Le réglage de la taille du cache se fait dans le Centre de contrôle HFSQL.

 

 

Avec le fonctionnement automatique, vous avez dans les caches de HFSQL les arbres d'index réellement utilisés par les clients de la base de données.

Concernant les données, le contenu des fichiers « .FIC » et « .MMO », le serveur HFSQL utilise les caches du système d'exploitation. En effet, lorsque le serveur HFSQL lit des données sur le disque, ces données sont mises en cache par le système. Le principe est le même que pour les index lorsque le serveur ne dispose plus de mémoire disponible.

Attention, sous Windows 2008, il y une anomalie de gestion de ces caches qui provoque un swap disque du cache disque : https://support.microsoft.com/en-us/help/976618/you-experience-performance-issues-in-applications-and-services-when-th

 

 

Pour des besoins spécifiques ou avec un serveur surdimensionné, il est ainsi possible de mettre en cache ce que l'on souhaite. Il suffit de forcer le serveur HFSQL à parcourir index et données que l'on souhaite mettre en cache au démarrage du serveur HFSQL. Il suffit de parcourir les fichiers de données ou les index (HLiPremier/HLitSuivant sur l'index souhaité) ou (HPremier/HSuivant sur l'index souhaité). On peut combiner les deux pour mettre en cache une fois un index et les données et reparcourir uniquement un nouvel index pour le mettre en cache.

Pour réaliser cette opération, il faut créer une procédure stockée qui réalise les différents parcours et planifier cette procédure au démarrage du serveur HFSQL. Attention, ce traitement peut être long et va ralentir le serveur au démarrage, le temps que le traitement soit terminé.

Exemple : La procédure stockée CacheManage est lancée au démarrage du serveur HFSQL. Elle utilise la procédure stockée InMemory

Procedure CacheManage()
// Mise ne cache des index : NumArticle, Titre, DatePublication
// et des données des articles
inMemory("ARTICLES","Titre",Faux)
inMemory("ARTICLES","DatePubication",Faux)
inMemory("ARTICLES","NumArticle",Vrai)

Procedure inMemory(sFichier,sIndex,bAvecDonnées)
// Mise en cache du fichier et index passé en paramétre
SI PAS HFichierExiste(sFichier) ALORS

SI HDéclareExterne(sFichier+".FIC",sFichier) ALORS

SI bAvecDonnées ALORS

HLitPremier(sFichier,sIndex)
TANTQUE PAS HEnDehors(sFichier)

HLitSuivant(sFichier,sIndex)

FIN

SINON

HPremier(sFichier,sIndex)
TANTQUE PAS HEnDehors(sFichier)

HSuivant(sFichier,sIndex)

FIN

FIN

FIN

FIN

Il existe une autre méthode de mise en cache de fichiers HFSQ décrite dans Lettre du Support Technique n° 111. Cette méthode force directement la mise en cache des fichiers physiques grâce aux API Windows.

Avant de paramétrer un tel traitement, il faut être certain que le serveur sera suffisamment dimensionné au niveau mémoire. Si le serveur ne contient pas suffisamment de mémoire, les données et index mis en cache en premier seront supprimés du cache. Egalement, si vous combinez, données et index dans des parcours différents, il vaut mieux commencer par les parcours d'index sans lecture et terminer par un parcours avec lecture des données. Les données des index mis en caches par le système ne sont pas utiles puisque HFSQL gère ses propres caches. Cela évitera que les données soient supprimées du cache système.

 

En conclusion, pour des applications standard de CRM par exemple, la mise en cache automatique est à privilégier. En effet, les enregistrements les plus manipulés sont spécifiques et sont les enregistrements les plus récents. Le serveur HFSQL gère cela tout seul automatiquement. Pour des applications plus spécifiques comme par exemple l'aide en ligne de WINDEV, nous avons réalisé une mise en cache spécifique car on ne sait pas à l'avance quelle recherche sera réalisée.

< Retour

Publier un commentaire : 
Votre adresse email ne sera pas publiée