[C++] SQL Server CPU usage naar 100%

Pagina: 1
Acties:

  • RetepV
  • Registratie: Juli 2001
  • Laatst online: 27-10-2025

RetepV

ALLES valt te repareren

Topicstarter
Ik heb een applicatie in C++ (VS.NET 2003) geschreven die (niet al te grote) records in een SQL Server tabel opslaat, ze later weer uitleest en daarna direkt verwijderd. De applicatie doet dat niet eens zo vaak, er worden gemiddeld 12 records per seconde weggeschreven. Die records worden iets later weer uitgelezen en verwijderd, en dat gaat dus ook met gemiddeld 12 records per seconde. Niets opzienbarends dus, zou je zeggen.

Echter, na een paar dagen lijkt er iets mis te gaan in SQL Server. De CPU tijd die SQL Server gebruikt vliegt dan snel omhoog naar 95%. Normaal hangt de CPU Usage rond de 20% (van SQL Server, maar ook van mijn applicatie).

Als ik de applicatie dan stop en weer start, komt het niet meer goed. De CPU tijd van SQL Server gaat gelijk weer naar de 95% of hoger (het fluctueert wat).

Als ik de computer echter reboot, dan werkt alles weer goed.

Enig idee?

Edit:

Argh, tag '[C++]' vergeten, kan een modje dat doen?

[ Voor 4% gewijzigd door RetepV op 03-09-2004 16:21 ]

Macbook Pro


  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Draai Profiler eens er naast?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Gebruik je ODBC om de data in SQL Server te benaderen? Zo ja, gooi je dan wel netjes je statement handles, context handles, en weet ik veel wat je verder nog aan handles gebruikt weg? (nog mooier : handle pooling!)

Ik heb ook wel eens gehad dat de applicatie de soep in draaide omdat de handles niet goed werden vrijgegeven...

  • RetepV
  • Registratie: Juli 2001
  • Laatst online: 27-10-2025

RetepV

ALLES valt te repareren

Topicstarter
Srry voor late reply :).

Ik heb inmiddels de profiler draaien, zal eens zien wat daar uit komt.

En nee, ik gebruik geen ODBC. Het gaat om een applicatie geschreven in Visual Studio .NET C++ en ik gebruik de OLE DB templates. Sneller zou niet kunnen :).

Ik zit zelf te denken in de richting van dat de cache van SQL Server zwaar gefragmenteerd raakt. Misschien is SQL Server aan het garbage collecten ofzo.

Sorry trouwens dat ik zo vaag doe over die applicatie, maar ik sta onder non-disclosure.

Ik kan nog vertellen dat hij het vanmiddag weer deed (ik had de profiler niet draaien, helaas), maar dat het na verloop van tijd toch over leek te gaan. Daarom denk ik aan fragmentatie en garbage collection. Is garbage collection te forceren?

[ Voor 20% gewijzigd door RetepV op 07-09-2004 18:11 ]

Macbook Pro


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
RetepV schreef op 07 september 2004 @ 18:10:


En nee, ik gebruik geen ODBC. Het gaat om een applicatie geschreven in Visual Studio .NET C++ en ik gebruik de OLE DB templates. Sneller zou niet kunnen :).
Als het SQL Server 7 of SQL Server 2000 is, waarom gebruik je dan de SqlClient access providers niet ipv de OleDb provider?
Niet dat dat wat met je probleem te maken heeft, maar de SqlClient zou toch sneller zijn. Die is nl. geoptimaliseerd voor Sql Server.
Ik zit zelf te denken in de richting van dat de cache van SQL Server zwaar gefragmenteerd raakt. Misschien is SQL Server aan het garbage collecten ofzo.
Heb je een memory-limit opgelegd aan Sql Server, of kan die onbeperkt geheugen opeisen? Ik denk dat je beter een geheugen-limiet oplegt.
Ik kan nog vertellen dat hij het vanmiddag weer deed (ik had de profiler niet draaien, helaas), maar dat het na verloop van tijd toch over leek te gaan. Daarom denk ik aan fragmentatie en garbage collection. Is garbage collection te forceren?
SQL Server gaat data gaan cachen, maar ik denk niet dat SQL Server aan 'garbage collection' doet hoor.... Het is geen managed environment.

https://fgheysels.github.io/