[SQLSERVER]ne pas cacher une query ?

ne pas cacher une query ? [SQLSERVER] - SQL/NoSQL - Programmation

Marsh Posté le 02-11-2010 à 12:11:16    

Salut,
je tente d'optimiser certaines queries.
Le problème est que si je l'exécute la première fois, ça prend plus de 30 sec mais si je la relance, c'est instantané, balot.
Je suis en prod donc je ne peux pas faire des trucs du genre DBCC DROPCLEANBUFFERS
 
Est-ce qu'il est possible de ne pas cacher juste une query ?

Reply

Marsh Posté le 02-11-2010 à 12:11:16   

Reply

Marsh Posté le 02-11-2010 à 15:06:08    

Ca dépend de ce que tu veux ne pas mettre en cache ... si c'est le plan d’exécution que tu ne veux pas cacher, tu peux mettre ton query dans une SP en forçant le WITH RECOMPILE et le plan d'exécution sera recalculé à chaque fois et si juste un problème au niveau du cache des données, voit si tu peux passer un DBCC FREEPROCCACHE, sinon je vois pas...


---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 03-11-2010 à 10:56:16    

Utilises ca pour regarder les performances d'une query:

Code :
  1. SET statistics time, io ON


Dans la zone message tu auras des statistiques sur l'execution de ta query.
 
Tu pourras voir le temps cpu (en ms) et les differents read/write.
 
Meme si les données sont en cache tu pourras avoir le meme nombre de read (il seront logical au lieu de physical) mais c'est comparable.
 
Pour voir ce qui coince il faut aussi regarder l'execution plan et essayer d'eliminer les operations qui prennent du temps (index scan, bookmark/rid lookups, etc...)


Message édité par Oliiii le 03-11-2010 à 10:56:38
Reply

Marsh Posté le 09-11-2010 à 11:04:32    

j'arrive à rien :/

 

La j'ai une query qui met 3 minutes pour tourner.
Je refresh et bings en 2 secondes j'ai mes résultats.

 

ça c'est le résultat des stats:

 
Code :
  1. SQL Server Execution Times:
  2.    CPU time = 0 ms,  elapsed time = 0 ms.
  3. (13 row(s) affected)
  4. Table 'tags'. Scan count 5, logical reads 175, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
  5. Table 'l_dates'. Scan count 0, logical reads 29208, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
  6. Table 'stats1'. Scan count 105, logical reads 58924, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
  7. SQL Server Execution Times:
  8.    CPU time = 156 ms,  elapsed time = 204 ms.


Message édité par Profil supprimé le 09-11-2010 à 11:06:57
Reply

Marsh Posté le 09-11-2010 à 14:31:15    

Et le fois ou ca prends 3 mins t'as quoi comme stats?
 
58000 et 29000 c'est deja pas mal, ca fait 450MB et 226MB (a la grosse louche).
Si il faut lire ca d'un disque (physical reads) pas trop rapide ca peut prendre un certain temps, par contre ca va tres vite de la RAM (logical reads).
 
Ton probleme est plus de trouver pourquoi il fait autant de reads


Message édité par Oliiii le 09-11-2010 à 14:31:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed