Använda dynamiska hanteringsvyer för att identifiera och felsöka frågeprestanda

Slutförd

Dynamiska hanteringsvyer ger en programmässig upplevelse för övervakning av SQL-poolaktiviteten i Azure Synapse Analytics med hjälp av transact-SQL-språket. Med de vyer som tillhandahålls kan du inte bara felsöka och identifiera flaskhalsar i prestanda med de arbetsbelastningar som fungerar i systemet, utan de används också av andra tjänster som Azure Advisor för att ge rekommendationer om Azure Synapse Analytics.

Det finns över 90 dynamiska hanteringsvyer som kan frågas mot dedikerade SQL-pooler för att hämta information om följande områden i tjänsten:

  • Anslutningsinformation och -aktivitet
  • SQL-körningsbegäranden och frågor
  • Index- och statistikinformation
  • Resursblockering och låsningsaktivitet
  • Tjänstaktivitet för dataflytt
  • Fel

Följande är ett exempel på övervakning av frågekörning av Azure Synapse Analytics SQL-pooler. Det första steget handlar om att kontrollera anslutningarna mot servern först innan du kontrollerar frågekörningsaktiviteten. 

Övervaka anslutningar

Alla inloggningar till ditt informationslager loggas till sys.dm_pdw_exec_sessions. Session_id är primärnyckeln och tilldelas sekventiellt för varje ny inloggning.

-- Other Active Connections
SELECT * FROM sys.dm_pdw_exec_sessions where status <> 'Closed' and session_id <> session_id();

Övervaka frågekörning

Alla frågor som körs i SQL-poolen loggas till sys.dm_pdw_exec_requests. Request_id identifierar varje fråga unikt och är den primära nyckeln för denna DMV. Request_id tilldelas sekventiellt för varje ny fråga och prefixet är QID, som står för fråge-ID. När du frågar den här DMV:en om en viss session_id visas alla frågor för en viss inloggning.

Steg 1

Det första steget är att identifiera den fråga som du vill undersöka

-- Monitor active queries
SELECT *
FROM sys.dm_pdw_exec_requests
WHERE status not in ('Completed','Failed','Cancelled')
  AND session_id <> session_id()
ORDER BY submit_time DESC;

-- Find top 10 queries longest running queries
SELECT TOP 10 *
FROM sys.dm_pdw_exec_requests
ORDER BY total_elapsed_time DESC;

Observera fråge-ID:t för den fråga som du vill undersöka från föregående frågeresultat.

Frågor i inaktiverat tillstånd kan placeras i kö på grund av ett stort antal aktiva frågor som körs. Dessa frågor visas också i frågan sys.dm_pdw_waits väntar med en typ av UserConcurrencyResourceType. Information om samtidighetsgränser finns i Minnes- och samtidighetsgränser eller Resursklasser för arbetsbelastningshantering. Frågor kan också vänta på andra orsaker, till exempel för objektlås. Om frågan väntar på en resurs kan du läsa Undersöka frågor som väntar på resurser längre ned i den här artikeln.

Om du vill förenkla sökningen av en fråga i tabellen sys.dm_pdw_exec_requests använder du LABEL för att tilldela en kommentar till din fråga, som kan sökas upp i sys.dm_pdw_exec_requests-vyn.

-- Query with Label
SELECT *
FROM sys.tables
OPTION (LABEL = 'My Query')
;

-- Find a query with the Label 'My Query'
-- Use brackets when querying the label column, as it it a key word
SELECT  *
FROM    sys.dm_pdw_exec_requests
WHERE   [label] = 'My Query';

Steg 2

Använd begärande-ID:t för att hämta den distribuerade SQL-planen (DSQL) från sys.dm_pdw_request_steps

-- Find the distributed query plan steps for a specific query.
-- Replace request_id with value from Step 1.

SELECT * FROM sys.dm_pdw_request_steps
WHERE request_id = 'QID####'
ORDER BY step_index;

När en DSQL-plan tar längre tid än förväntat kan orsaken vara en komplex plan med många DSQL-steg eller bara ett steg som tar lång tid. Om planen är många steg med flera flyttåtgärder bör du överväga att optimera tabelldistributionerna för att minska dataförflyttningen.

I artikeln Tabelldistribution förklaras varför data måste flyttas för att lösa en fråga. Artikeln beskriver också vissa distributionsstrategier för att minimera dataflytten.

Om du vill undersöka ytterligare information om ett enda steg operation_type kolumnen i det långvariga frågesteget och notera stegindexet:

  • Fortsätt med steg 3 för SQL-åtgärder: OnOperation, RemoteOperation, ReturnOperation.
  • Fortsätt med steg 4 för åtgärder för dataflytt: ShuffleMoveOperation, BroadcastMoveOperation, TrimMoveOperation, PartitionMoveOperation, MoveOperation, CopyOperation.

Steg 3

Använd begärande-ID:t och stegindexet för att hämta information från sys.dm_pdw_sql_requests, som innehåller körningsinformation om frågesteget på alla distribuerade databaser.

-- Find the distribution run times for a SQL step.
-- Replace request_id and step_index with values from Step 1 and 3.

SELECT * FROM sys.dm_pdw_sql_requests
WHERE request_id = 'QID####' AND step_index = 2;

När frågesteget körs kan DBCC-PDW_SHOWEXECUTIONPLAN användas för att hämta den uppskattade SQL Server-planen från SQL Server-plancacheminnet för steget som körs på en viss distribution.

-- Find the SQL Server execution plan for a query running on a specific SQL pool or control node.
-- Replace distribution_id and spid with values from previous query.

DBCC PDW_SHOWEXECUTIONPLAN(1, 78);

Steg 4

Använd begärande-ID och stegindex för att hämta information om ett steg för dataflytt som körs på varje distribution från sys.dm_pdw_dms_workers.

-- Find information about all the workers completing a Data Movement Step.
-- Replace request_id and step_index with values from Step 1 and 3.

SELECT * FROM sys.dm_pdw_dms_workers
WHERE request_id = 'QID####' AND step_index = 2;
  • Kontrollera kolumnen total_elapsed_time för att se om en viss distribution tar längre tid än andra för dataflytt.
  • För den långvariga fördelningen kontrollerar du kolumnen rows_processed för att se om antalet rader som flyttas från den fördelningen är större än andra. I så fall kan den här sökningen tyda på skevhet för dina underliggande data. En orsak till datasnedvridning är att distribuera på en kolumn med många NULL-värden (vars rader alla hamnar i samma distribution). Förhindra långsamma frågor genom att undvika distribution på dessa typer av kolumner eller filtrera frågan för att eliminera NULL:er när det är möjligt.

Om frågan körs kan du använda DBCC-PDW_SHOWEXECUTIONPLAN för att hämta den uppskattade SQL Server-planen från SQL Server-plancache för sql-steget som körs inom en viss distribution.

-- Find the SQL Server estimated plan for a query running on a specific SQL pool Compute or control node.
-- Replace distribution_id and spid with values from previous query.

DBCC PDW_SHOWEXECUTIONPLAN(55, 238);

Dynamiska hanteringsvyer (DMV) innehåller bara 10 000 rader data. I system med hög användning innebär det att data som lagras i den här tabellen kan gå förlorade med timmar, eller till och med minuter när data hanteras i ett system först in, först ut. Därför kan du eventuellt förlora meningsfull information som kan hjälpa dig att diagnostisera problem med frågeprestanda i systemet. I det här fallet bör du använda Query Store.

Du kan också övervaka ytterligare aspekter av Azure Synapse SQL-pooler, inklusive:

  • Övervakning väntar
  • Övervakning tempdb
  • Övervaka minne
  • Övervaka transaktionslogg
  • Övervaka PolyBase

Du kan visa information om övervakning av dessa områden här