2 pièce(s) jointe(s)
[ASE 15.0.2] Optimisation cache pool
Bonjour
Nous avons des problèmes de performance sur notre serveur de developpement.
Ce serveur héberge 3 bases de développement (4Go de data + 2Go de log chacune).
On dispose de 4Go de mémoire au total.
Le default data cache est de 500 Mo.
J'ai remarqué dans mes tables "mon" que l'indice stalls n'est pas bon.
Or d'après mda
Citation:
La colonne "stalls" correspond au "Buffers grabbed dirty" de sp_sysmon. Si cette valeur n'est pas 0 elle représente un problème de perf réel puisque l'engine doit attendre que l'opération d'IO soit terminée sur le buffer "sale" avant de pouvoir le réutiliser.
Comme indiqué dans cette page, j'ai créé la procédure sp__cache
De même que mes tables MDA, elle indique que :
stalls vaut 7211 pour le pool 2Ko de default data cache sur notre serveur
Comment optimiser ce point ?
- Faudrait-il simplement augmenter la taille de 'default data cache' pour améliorer les performances ?
- Ne faudrait-il pas prévoir un data cache nommé et séparé pour chaque base ?
- Préconisez-vous un data cache nommé pour la tempdb ?
- Préconisez-vous un cache nommé pour le log ?
Et si oui, en faut-il créer un par serveur ou par base ?
Est-il automatiquement reconnu/pris en compte ? - Utilisez-vous des mises en cache explicites de tables/indexes (binding)?
- Les liens de base ou d'objets avec le cache, doivent-ils être redéfinis à chaque démarrage serveur ?
D'avance merci
msomso
1 pièce(s) jointe(s)
elimination du "select distinct" avec "group by"
Bonjour
Après avoir étudié le point soulevé par Michael:
Le "distinct" peut être omis si le group by contient:
l.LIG_D_DATECREATION au lieu de
dbo.F_FormatDate_DDMMYYYY(l.LIG_D_DATECREATION).
La fonction retourne une même valeur (date au format DD/MM/YYYY pour les dates différant par minutes, secondes ou ms) et curieusement cela occasionne la multiplication de lignes du résultat en absence de "distinct".
Conclusion:
après une application stricte de la règle :
Citation:
A group by expression can only contain column names in the select list
la requête fonctionne sans "distinct".
Et plus précisément, elle retourne le même résultat qu'avec "distinct", lequel devient donc inutile comme on pouvait s'attendre à cause de group by. Mieux: le temps d'exécution passe de 40 à 4 sec.
Je pense fermer cette discussion si vous n'avez pas d'autres remarques.
Mille mercis.
msomso
P.S.
La requête finale dans fichier joint R1sansDistinct.sql.
identifier les requêtes avec TSQL étendu
Bonjour
Juste pour finir:
l'utilisation de "set fipsflagger on" permet d'avoir un avertissement suivant à l'exécution de la requête telle que dans R1avecGroupBycorrigé.sql (joint ci-dessous):
ErrorCode: 7321
Citation:
Warning: Line number 1 contains Non-ANSI text. The error is caused due to the use of column name(s) in a select list with aggregates but column name(s) not in group by list.
SQLState: 01FFW
ErrorCode: 7321
msomso