Monitoraggio del database SQL di Azure tramite le visualizzazioni di gestione dinamicaMonitoring Azure SQL Database using dynamic management views

Il database SQL di Microsoft Azure consente a un sottoinsieme di visualizzazioni a gestione dinamica di diagnosticare i problemi delle prestazioni che potrebbero essere causati da query bloccate o con esecuzione prolungata, colli di bottiglia delle risorse, piani di query insufficienti e così via.Microsoft Azure SQL Database enables a subset of dynamic management views to diagnose performance problems, which might be caused by blocked or long-running queries, resource bottlenecks, poor query plans, and so on. Questo argomento fornisce informazioni su come rilevare problemi comuni relativi alle prestazioni tramite le DMV.This topic provides information on how to detect common performance problems by using dynamic management views.

Il database SQL supporta parzialmente tre categorie di visualizzazioni a gestione dinamica:SQL Database partially supports three categories of dynamic management views:

  • Visualizzazioni a gestione dinamica relative al database.Database-related dynamic management views.
  • Visualizzazioni a gestione dinamica relative all'esecuzione.Execution-related dynamic management views.
  • Visualizzazioni a gestione dinamica relative alle transazioni.Transaction-related dynamic management views.

Per informazioni dettagliate sulle visualizzazioni a gestione dinamica, vedere Visualizzazioni a gestione dinamica e funzioni (Transact-SQL) nella documentazione Online di SQL Server.For detailed information on dynamic management views, see Dynamic Management Views and Functions (Transact-SQL) in SQL Server Books Online.

AutorizzazioniPermissions

Nel Database SQL, l'esecuzione di query in una visualizzazione a gestione dinamica richiede autorizzazioni VIEW DATABASE STATE .In SQL Database, querying a dynamic management view requires VIEW DATABASE STATE permissions. Le autorizzazioni VIEW DATABASE STATE restituiscono informazioni su tutti gli oggetti all'interno del database corrente.The VIEW DATABASE STATE permission returns information about all objects within the current database. Per concedere le autorizzazioni VIEW DATABASE STATE a un utente di database specifico, eseguire la query seguente:To grant the VIEW DATABASE STATE permission to a specific database user, run the following query:

GRANT VIEW DATABASE STATE TO database_user;

In un'istanza di SQL Server locale, le viste a gestione dinamica restituiscono informazioni sullo stato del server.In an instance of on-premises SQL Server, dynamic management views return server state information. Nel database SQL, restituiscono informazioni relative esclusivamente al database logico corrente.In SQL Database, they return information regarding your current logical database only.

Calcolo della dimensione del databaseCalculating database size

La seguente query restituisce la dimensione del database in megabyte:The following query returns the size of your database (in megabytes):

-- Calculates the size of the database.
SELECT SUM(reserved_page_count)*8.0/1024
FROM sys.dm_db_partition_stats;
GO

La query seguente restituisce le dimensioni dei singoli oggetti (in megabyte) nel database:The following query returns the size of individual objects (in megabytes) in your database:

-- Calculates the size of individual database objects.
SELECT sys.objects.name, SUM(reserved_page_count) * 8.0 / 1024
FROM sys.dm_db_partition_stats, sys.objects
WHERE sys.dm_db_partition_stats.object_id = sys.objects.object_id
GROUP BY sys.objects.name;
GO

Monitoraggio delle connessioniMonitoring connections

È possibile usare la visualizzazione sys.dm_exec_connections per recuperare informazioni sulle connessioni stabilite con il server del database SQL specifico di Azure e i dettagli di ogni connessione.You can use the sys.dm_exec_connections view to retrieve information about the connections established to a specific Azure SQL Database server and the details of each connection. Inoltre, la visualizzazione sys.dm_exec_sessions è utile durante il recupero di informazioni su tutte le connessioni utente attive e le attività interne.In addition, the sys.dm_exec_sessions view is helpful when retrieving information about all active user connections and internal tasks. La query seguente recupera le informazioni sulla connessione corrente.The following query retrieves information on the current connection:

SELECT
    c.session_id, c.net_transport, c.encrypt_option,
    c.auth_scheme, s.host_name, s.program_name,
    s.client_interface_name, s.login_name, s.nt_domain,
    s.nt_user_name, s.original_login_name, c.connect_time,
    s.login_time
FROM sys.dm_exec_connections AS c
JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;

Nota

Quando si eseguono sys.dm_exec_requests e sys.dm_exec_sessions, se si dispone di un'autorizzazione VIEW DATABASE STATE sul database, saranno visibili tutte le sessioni in esecuzione sul database; in caso contrario, sarà visibile solo la sessione corrente.When executing the sys.dm_exec_requests and sys.dm_exec_sessions views, if you have VIEW DATABASE STATE permission on the database, you see all executing sessions on the database; otherwise, you see only the current session.

Monitoraggio delle prestazioni delle queryMonitoring query performance

L’esecuzione della query rallentata o prolungata può consumare delle risorse di sistema importanti.Slow or long running queries can consume significant system resources. In questa sezione viene illustrato come utilizzare le visualizzazioni a gestione dinamica per rilevare alcuni problemi di prestazione delle query comuni.This section demonstrates how to use dynamic management views to detect a few common query performance problems. Un riferimento precedente ma comunque utile per la risoluzione dei problemi, è l’articolo Risoluzione dei problemi di prestazioni in SQL Server 2008 su Microsoft TechNet.An older but still helpful reference for troubleshooting, is the Troubleshooting Performance Problems in SQL Server 2008 article on Microsoft TechNet.

Ricerca delle prime n queryFinding top N queries

Nell'esempio seguente vengono restituite informazioni sulle prime cinque query classificate in base al tempo medio della CPU.The following example returns information about the top five queries ranked by average CPU time. Nell'esempio le query vengono aggregate in base al relativo valore hash, in modo da raggruppare le query logicamente equivalenti in base all'utilizzo di risorse cumulativo.This example aggregates the queries according to their query hash, so that logically equivalent queries are grouped by their cumulative resource consumption.

SELECT TOP 5 query_stats.query_hash AS "Query Hash",
    SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time",
    MIN(query_stats.statement_text) AS "Statement Text"
FROM
    (SELECT QS.*,
    SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
        WHEN -1 THEN DATALENGTH(ST.text)
        ELSE QS.statement_end_offset END
            - QS.statement_start_offset)/2) + 1) AS statement_text
     FROM sys.dm_exec_query_stats AS QS
     CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats
GROUP BY query_stats.query_hash
ORDER BY 2 DESC;

Monitoraggio delle query bloccateMonitoring blocked queries

Le query lente o con esecuzione prolungata possono contribuire al consumo eccessivo delle risorse ed essere la conseguenza di query bloccate.Slow or long-running queries can contribute to excessive resource consumption and be the consequence of blocked queries. Le cause del blocco possono essere una progettazione povera dell'applicazione, dei piani di query non validi, la mancanza di indici utili e così via.The cause of the blocking can be poor application design, bad query plans, the lack of useful indexes, and so on. È possibile utilizzare la visualizzazione in sys.dm_tran_locks per ottenere informazioni sulle attività di blocco corrente nel Database di SQL Azure.You can use the sys.dm_tran_locks view to get information about the current locking activity in your Azure SQL Database. Per un codice di esempio, vedere sys.dm_tran_locks (Transact-SQL) nella documentazione online di Microsoft SQL Server.For example code, see sys.dm_tran_locks (Transact-SQL) in SQL Server Books Online.

Monitoraggio dei piani di queryMonitoring query plans

Un piano di query inefficiente può anche aumentare il consumo della CPU.An inefficient query plan also may increase CPU consumption. Nell'esempio seguente viene usata la visualizzazione sys.dm_exec_query_stats per determinare la query che usa la CPU cumulativa maggiore.The following example uses the sys.dm_exec_query_stats view to determine which query uses the most cumulative CPU.

SELECT
    highest_cpu_queries.plan_handle,
    highest_cpu_queries.total_worker_time,
    q.dbid,
    q.objectid,
    q.number,
    q.encrypted,
    q.[text]
FROM
    (SELECT TOP 50
        qs.plan_handle,
        qs.total_worker_time
    FROM
        sys.dm_exec_query_stats qs
    ORDER BY qs.total_worker_time desc) AS highest_cpu_queries
    CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY highest_cpu_queries.total_worker_time DESC;

Vedere ancheSee also

Introduzione al Database SQLIntroduction to SQL Database