SQL Server 2017 avec paramétrage forcé activé.
Notre appserver se connecte à la base de données avec un seul login, donc dans le SQL Profiler nous ne voyons pas le nom de l'utilisateur réel (utilisateur GUI). Pour voir cette information au niveau du serveur SQL, j'ai défini un intercepteur dans NHibernate qui met un commentaire avec le nom de l'utilisateur au début de chaque requête.
Cela résout le problème mais en crée un autre : SQL Server considère que la même requête provenant de différents utilisateurs est différente même s'il est paramétré correctement et que le la seule différence est le commentaire . Multiplier chaque plan par 150 fait gonfler le cache des plans.
Question : Comment puis-je faire en sorte que SQL Server considère ces requêtes commentées comme étant les mêmes en ce qui concerne le hachage pour le cache de plan ?
L'option de paramétrage forcé est déjà active en raison d'une ancienne application qui en a besoin.
Mettre le commentaire à la fin de la requête n'a pas fonctionné non plus. Avant de commencer à expérimenter d'autres solutions, comme la création d'un lot et l'insertion des informations sur l'utilisateur et de la requête proprement dite dans deux déclarations différentes, vous avez peut-être des suggestions sur la manière de formater le commentaire pour éviter le problème. Le batch hack fonctionnerait si le profiler est déjà connecté mais ne montrerait pas le nom de l'utilisateur dans "active expensive queries" du moniteur d'activité ou d'autres outils similaires.
Les astuces spécifiques à NHibernate qui permettent de résoudre le problème original d'une autre manière seraient également très appréciées.
Merci d'avance pour tout conseil !
Edit 2020-06-15 : Le seul moyen que je vois est d'utiliser le lot avec 2 déclarations. Le premier serait upsert dans une petite table qui fait correspondre sessionid au nom d'utilisateur actuel.