sql >> Database >  >> RDS >> Sqlserver

Query Profiling 101 - Ja, het kan echt de prestaties van uw SQL Server verbeteren

Queryprofilering is hoe u erachter komt wat er gebeurt in de zwarte doos van SQL Server-prestaties.

Gebruikers hebben het makkelijk. DBA's niet.

Denk aan de gemakkelijke opties die gebruikers hebben wanneer een databasetoepassing slecht draait:

  • Ga koffie halen en wacht.
  • Beledig de computer.
  • Klagen bij medegebruikers.
  • Dien een probleemticket in.

Is dat niet het leven van Riley vergeleken met de opties die je hebt als DBA?

  • Zoek naar geblokkeerde sessies.
  • Controleer de hitratio's van de buffercache.
  • Meet maximale I/O-wachttijd.
  • Bekijk de levensduur van de pagina.
  • Zie of indexen ontbreken of opnieuw moeten worden opgebouwd.
  • Zoek naar sloten/deadlocks.
  • Controleer het CPU-gebruik.
  • Bekijk het applicatielogboek op berichten dat het geheugen vol is.
  • Zorg ervoor dat de tempdb-database correct is geconfigureerd.

Het kan een van die softwareproblemen zijn, en ze leiden u meestal naar de oplossing voor het optimaliseren van een query of het wijzigen van uw configuratie. Of het kan een hardwareprobleem zijn en de oplossing is om meer geheugen of verwerkingskracht te kopen.

Omdat databasetoepassingen meestal gaan over het uitvoeren van veel SQL-query's, hebben prestatieproblemen veel plaatsen om te verbergen in SQL Server. Als je een gebruiker bent, kun je zeggen:"Oh, nou, het probleem moet ergens in die zwarte doos zitten. Niet mijn werk."

Maar als DBA heb je die luxe niet. Je moet de zwarte doos openen, erin klimmen, de rotzooi vinden en het repareren.

Queryprofilering 101 met prestatiebewaking van SQL-server

Over het algemeen is uw doel met het monitoren van serverprestaties om in de gaten te houden hoe uw SQL-query's presteren in de loop van de tijd en tijdens de groei van het transactievolume op uw SQL Server. Je kunt dat doel op verschillende manieren bereiken.

Bekijk het uitlegplan

Het uitlegplan laat zien wat SQL Server zal doen bij het uitvoeren van de query, inclusief de tabellen waaraan het zal deelnemen, het type samenvoeging dat het zal uitvoeren, het aantal rijen dat het zal aanraken en de indexen die het zal gebruiken.

Wat kan het legplan je vertellen? U kunt bijvoorbeeld zien hoe u de query zelf kunt verbeteren door bijvoorbeeld een NESTED LOOP JOIN te verwijderen die een van de databaseontwikkelaars heeft toegevoegd aan een enorme tabel. Of u kunt uit het uitlegplan afleiden dat u een index voor een bepaalde tabel moet maken of opnieuw moet opbouwen.

Het uitlegplan is een goed startpunt voor het profileren van zoekopdrachten, zelfs voordat u de verdachte zoekopdrachten daadwerkelijk uitvoert.

Voer de zoekopdracht uit

Om de query's uit te voeren en te zien op welke resources ze tijdens runtime van invloed zijn, maakt u eerst traceringen om gebeurtenissen te markeren wanneer ze zich voordoen. Met traceringen kunt u gegevens vastleggen en letten op het ontstaan ​​van fouten. Een profileringstool slaat de gegevens op die de sporen hebben vastgelegd en geeft deze weer op een manier die het voor u gemakkelijker maakt om problematische zoekopdrachten te vinden en op te lossen.

De combinatie van de sporen en de profileringstool kan veel vragen beantwoorden:

  • Welke zoekopdrachten verbruiken het meeste geheugen?
  • Hoe lang duurt het om elke query uit te voeren?
  • Welke vergrendelingen stelt SQL Server in voor elke query?
  • Welke query's kan SQL Server uitvoeren vanuit de buffercache? Hoe vaak moet het naar de schijf?
  • Hoeveel rijen onderzoekt elke zoekopdracht?
  • Hoeveel verzoeken per minuut vervult de database?

U krijgt de meest nauwkeurige uitlezing door de query uit te voeren op uw productiedatabases, maar dat kan ook de verwerking door uw echte klanten en gebruikers vertragen. Als je kunt, test dan eerst op ontwikkelings- of testinstanties waar je niet concurreert om geheugen of I/O met je productie-instantie.

Over klanten en gebruikers gesproken, uw doel bij het profileren van zoekopdrachten is om ze blij te maken. Profilering kan gemakkelijk tientallen problemen in uw database aan het licht brengen, maar de reden dat u de zwarte doos hebt geopend, is om de meest pijnlijke problemen op te lossen. Na het vastleggen van gegevens van een dag of twee normaal gebruik, kunt u de prestatieproblemen van de SQL-server vinden die uw gebruikers de meeste problemen bezorgen. Misschien vertraagt ​​een ontbrekende index het ophalen van records, of te veel indexen vertragen het invoegen van records en database-updates. Misschien is een veelgebruikte zoekopdracht informatie aan het verzamelen waar niemand meer om geeft.

Gebruik profileringstools verstandig

Profileringstools redden u van het moeizame proces van het handmatig instellen van elke gebeurtenis, filter en procedureaanroep voor alles wat u wilt traceren. Met zoveel gaande in de zwarte doos van SQL Server-prestaties, kunt u gemakkelijk te veel gegevens vastleggen om door de bomen het bos te zien.

Met goede tools kunt u zorgvuldig selecteren wat u traceert, zodat u bijvoorbeeld niet honderden Lock:Aquired-gebeurtenissen vastlegt en uw scherm er onnodig mee vult. Als u echter een veelvoorkomende gebeurtenis moet onderzoeken, gebruik dan filters zoals toepassingsnaam of tabelnaam.

In plaats van traceergegevens naar een tabel in een database te schrijven, kunt u overwegen deze op te slaan in een eigen, afzonderlijk bestand. Dat zorgt ervoor dat de overhead van de tracering geen last wordt voor SQL Server en mogelijk de resultaten vertekent. Als uw profileringstool de voorkeur geeft aan gegevens die uit een tabel worden gehaald, kunt u de gegevens later uit het bestand in de tabel importeren.

Verbeter de prestatiebewaking van uw SQL Server met queryprofilering

Uw gebruikers blijven uit de buurt van de zwarte doos van SQL Server-prestaties, maar dat hoeft niet. Met queryprofilering opent u de doos, ontdekt u wat er binnenin gebeurt en begint u met het oplossen van problemen.

Maar wacht niet tot u in de problemen komt om het te gebruiken. Queryprofilering lijkt meer op het controleren van de olie dan op het vervangen van de motor. Het helpt bij de gebruikelijke DBA-taken om verouderde query's bij te werken en het ontwerp aan te passen, zodat uw databases gelijke tred houden met veranderingen in het bedrijf.


  1. Oracle:verschil tussen max(id)+1 en sequence.nextval

  2. Hoe EXCEPT werkt in PostgreSQL

  3. Een SQL Server Agent-taak maken met T-SQL

  4. Geaggregeerde sleutel/waarde-paren uit een JSONB-veld afvlakken?