J'ai un problème avec les performances de ma base de données SQL Server. J'ai trouvé cet outil sp_BlitzCache . Après l'exécution de la commande, j'ai obtenu cette déclaration:
Vous avez créé 92,00% de plans au cours des dernières 24 heures et 92,00% créés au cours des 4 dernières heures.
Bien que j'aie identifié le problème (à l'aide de SQL Server Profiler, j'ai vérifié les occurrences d'événements StmtRecompile), je n'ai pu trouver que quelques requêtes de recherche en texte intégral qui sont souvent reconstruites. Cependant, les requêtes de recherche en texte intégral représentent environ 5% de toutes les requêtes.
Avez-vous des suggestions sur ce qui pourrait provoquer la recréation des 87% restants?
J'ai obtenu SQL Server 2012 (version 11.0.6567.0).
Edit: j'ai ajouté mes compteurs de performance
+---------------------------+--------------------------------+--------------+
| object_name | counter_name | cntr_value |
+---------------------------+--------------------------------+--------------+
| SQLServer:Buffer Manager | Background writer pages/sec | 0 |
| SQLServer:Buffer Manager | Buffer cache hit ratio | 28436 |
| SQLServer:Buffer Manager | Buffer cache hit ratio base | 28436 |
| SQLServer:Buffer Manager | Checkpoint pages/sec | 8259452 |
| SQLServer:Buffer Manager | Database pages | 4434337 |
| SQLServer:Buffer Manager | Free list stalls/sec | 9 |
| SQLServer:Buffer Manager | Integral Controller Slope | 0 |
| SQLServer:Buffer Manager | Lazy writes/sec | 5608 |
| SQLServer:Buffer Manager | Page life expectancy | 438901 |
| SQLServer:Buffer Manager | Page lookups/sec | 122694703703 |
| SQLServer:Buffer Manager | Page reads/sec | 60994608 |
| SQLServer:Buffer Manager | Page writes/sec | 126076564 |
| SQLServer:Buffer Manager | Readahead pages/sec | 45305420 |
| SQLServer:Buffer Manager | Target pages | 130990080 |
| SQLServer:Buffer Node | Database pages | 4434337 |
| SQLServer:Buffer Node | Page life expectancy | 438901 |
| SQLServer:Buffer Node | Local node page lookups/sec | 0 |
| SQLServer:Buffer Node | Remote node page lookups/sec | 0 |
| SQLServer:Memory Manager | External benefit of memory | 0 |
| SQLServer:Memory Manager | Connection Memory (KB) | 3304 |
| SQLServer:Memory Manager | Database Cache Memory (KB) | 35474784 |
| SQLServer:Memory Manager | Free Memory (KB) | 13229808 |
| SQLServer:Memory Manager | Granted Workspace Memory (KB) | 0 |
| SQLServer:Memory Manager | Lock Memory (KB) | 455928 |
| SQLServer:Memory Manager | Lock Blocks Allocated | 1798154 |
| SQLServer:Memory Manager | Lock Owner Blocks Allocated | 3568588 |
| SQLServer:Memory Manager | Lock Blocks | 10562 |
| SQLServer:Memory Manager | Lock Owner Blocks | 10617 |
| SQLServer:Memory Manager | Maximum Workspace Memory (KB) | 43368000 |
| SQLServer:Memory Manager | Memory Grants Outstanding | 0 |
| SQLServer:Memory Manager | Memory Grants Pending | 0 |
| SQLServer:Memory Manager | Optimizer Memory (KB) | 1400 |
| SQLServer:Memory Manager | Reserved Server Memory (KB) | 0 |
| SQLServer:Memory Manager | SQL Cache Memory (KB) | 229112 |
| SQLServer:Memory Manager | Stolen Server Memory (KB) | 8063232 |
| SQLServer:Memory Manager | Log Pool Memory (KB) | 4192 |
| SQLServer:Memory Manager | Target Server Memory (KB) | 56934400 |
| SQLServer:Memory Manager | Total Server Memory (KB) | 56767824 |
| SQLServer:Memory Node | Database Node Memory (KB) | 35474784 |
| SQLServer:Memory Node | Free Node Memory (KB) | 13229808 |
| SQLServer:Memory Node | Foreign Node Memory (KB) | 0 |
| SQLServer:Memory Node | Stolen Node Memory (KB) | 8063208 |
| SQLServer:Memory Node | Target Node Memory (KB) | 56934376 |
| SQLServer:Memory Node | Total Node Memory (KB) | 56767800 |
+---------------------------+--------------------------------+--------------+
la source
Réponses:
La requête utilisée pour tester l'heure de création du plan est la suivante
le SP fournit également des indices sur où commencer vos recherches futures
Autre que les indices ci-dessus, vérifiez si votre serveur a été redémarré.
si votre serveur n'est pas redémarré, voici l'approche que je prendrais
Tout d'abord, voyez si vos paramètres de mémoire sont configurés de manière optimale. Si c'est le cas, vous pouvez utiliser les compteurs ci-dessous pour voir si vous êtes confronté à une pression de mémoire
si vous êtes confronté à une pression sur la mémoire, vous pouvez voir et régler les requêtes qui utilisent plus de mémoire ou essayez d'ajouter plus de mémoire
Modifications apportées à une table ou à une vue référencée par la requête (ALTER TABLE et ALTER VIEW).
Modifications apportées à une seule procédure, ce qui supprimerait tous les plans de cette procédure du cache (ALTER PROCEDURE).
Modifications de tous les index utilisés par le plan d'exécution
Mises à jour des statistiques utilisées par le plan d'exécution, générées soit explicitement à partir d'une instruction, comme UPDATE STATISTICS, soit générées automatiquement.
Suppression d'un index utilisé par le plan d'exécution.
vous pouvez également consulter ce livre blanc pour plus de détails sur la mise en cache du plan
https://technet.microsoft.com/en-us/library/ee343986(v=sql.100).aspx
la source
Pour ajouter ce que @TheGameiswar a dit, vous pouvez également exécuter cette requête pour voir les détails des plans qui ne sont pas obtenus à partir du cache.
la source