Esporta (0) Stampa
Espandi tutto

Gestione delle risorse nel database SQL di Azure

Aggiornamento: settembre 2014

Questo argomento descrive come il database SQL di Azure controlla le risorse dedicate ai database per raggiungere la massima prevedibilità delle prestazioni. La quantità di risorse disponibili per ogni database dipende dal livello di prestazioni assegnato al database. Le informazioni incluse in questo argomento consentono di comprendere i meccanismi usati per controllare le risorse. Queste informazioni sono particolarmente utili quando si sviluppa un'applicazione per ottenere prestazioni ottimali. Il presente argomento include alcune procedure consigliate per risolvere i problemi riscontrati in ciascuna categoria.

Per controllare le risorse, il database SQL di Azure usa tre meccanismi diversi:

  • Governance delle risorse

    CPU, memoria, operazioni di scrittura nei log e operazioni di input/output delle query sono soggette alla funzione di governance delle risorse. Diversamente dall'applicazione della limitazione e di valori massimi da rispettare, questo nuovo meccanismo non impedisce né termina l'esecuzione di query, ma inserisce le query in una coda e concede a tali query di accedere alle risorse quando diventano disponibili.

  • Applicazione dei limiti

    Vengono applicati limiti massimi in relazione alla quantità di connessioni che possono essere aperte in un database nonché al numero di query che è possibile eseguire in parallelo (thread di lavoro).

  • Limitazione

    La limitazione viene applicata in situazioni in cui un computer che ospita database raggiunge una quantità critica di carico, condizione che potrebbe determinare un malfunzionamento del sistema. La limitazione è l'ultimo meccanismo disponibile per proteggere il sistema dal sovraccarico e viene applicata raramente.

Uno degli obiettivi di progettazione dei livelli di servizio Basic, Standard e Premium è quello di consentire al database SQL di Azure di comportarsi come se fosse in esecuzione sul proprio computer, completamente isolato da altri database. La funzionalità di governance delle risorse emula questo comportamento durante l'esecuzione delle query. Se l'uso di risorse aggregate raggiunge il numero massimo di risorse CPU, memoria, operazioni di scrittura nei log e operazioni di input/output di query disponibili e assegnate al database, la funzionalità di governance delle risorse accoda le query in esecuzione e assegna le risorse alle query accodate quando diventano disponibili.

Come in un computer dedicato, l'uso di tutte le risorse disponibili comporta un tempo di esecuzione maggiore per le query correnti, condizione che può provocare un timeout del client. Nelle applicazioni con intensa logica di tentativi e in quelle che eseguono query sul database con frequenza elevata possono verificarsi errori quando viene tentato di eseguire nuove query a causa dell'indisponibilità dei thread di lavoro.

Indicazioni: monitorare l'uso delle risorse nonché i tempi medi di risposta delle query all'approssimarsi dell'uso massimo di un database. Quando sono presenti query con esecuzione prolungata, sono disponibili in genere tre opzioni.

  1. Ridurre la quantità di richieste in ingresso al database per evitare i timeout e l'accumulo dei thread di lavoro.

  2. Assegnare al database un livello di prestazioni superiore.

  3. Ottimizzare le query per ridurre l'uso delle risorse da parte di ogni query. Per altre informazioni, vedere la sezione Hint/ottimizzazione di query nell'articolo Linee guida sulle prestazioni del database SQL di Azure.

Il database SQL di Azure impiega la governance delle risorse impostando un limite massimo sulle sessioni e sui thread di lavoro (richieste) simultanei per ogni database. Il meccanismo di governance delle risorse varia a seconda della versione del database di destinazione (Web/Business Edition o Premium). Per altre informazioni, vedere Governance delle risorse nel database SQL di Azure.

Il numero di connessioni a un database SQL nonché il numero di richieste che possono essere eseguite in parallelo vengono limitati. Il database SQL consente un numero di connessioni al database maggiore di quello delle richieste simultanee per supportare la limitazione delle richieste di connessione.

Mentre il numero di connessioni disponibili può essere controllato facilmente dall'applicazione, quello delle richieste parallele è spesso più difficile da prevedere e controllare. In particolar modo, durante i periodi di picco quando l'applicazione invia numerose richieste o il database non può raggiungere i limiti relativi alle risorse e inizia ad accumulare thread di lavoro a causa della presenza di query con esecuzione prolungata, può verificarsi un errore di tipo <NUMERO>.

Indicazioni: quando i carichi di lavoro sono in esaurimento, sono in genere disponibili tre opzioni.

  1. Ridurre la quantità di richieste in ingresso al database per evitare l'accumulo dei thread di lavoro.

  2. Assegnare al database un livello di prestazioni superiore per consentire un numero maggiore di richieste simultanee. Per altre informazioni, vedere Livelli di servizio e livelli di prestazioni del database SQL di Azure.

  3. Ottimizzare le query per ridurre l'uso delle risorse da parte di ogni query. Per altre informazioni, vedere la sezione Hint/ottimizzazione di query nell'articolo Linee guida sulle prestazioni del database SQL di Azure.

Nella tabella seguente vengono elencati i limiti relativi alle risorse oltre i quali il database SQL di Azure rifiuta la richiesta o termina le connessioni alla risorsa interessata e viene restituito un codice di errore.

 

Risorsa Limite Codice di errore restituito

Database Size

Dipende dalla quota del database (MAXSIZE)

40544

Transaction Duration

Stato 1: 24 ore

Stato 2: 20 secondi se una transazione blocca una risorsa richiesta da un'attività di sistema sottostante

40549

Transaction Lock Count

1 milione di blocchi per transazione

40550

Tempdb

Stato 1: 5 GB di spazio di tempdb

Stato 2: 2 GB per transazione in tempdb

Stato 3: 20% di spazio totale di log in tempdb

40551

Transaction Log Length

Stato 1: 2 GB per transazione

Stato 2: 20% di spazio totale di log

40552

Memory Usage

Concessione di 16 MB di memoria per più di 20 secondi

40553

Per informazioni dettagliate su ogni codice di errore, vedere Limiti delle risorse del database SQL di Azure.

La gravità di limitazione delle richieste rientra in una delle due fasi indicate di seguito.

  • Limitazione parziale: si tratta della prima fase in cui risorse del computer quali il log delle transazioni, l'I/O e lo spazio di archiviazione superano le soglie di sicurezza predefinite. Il database SQL seleziona un subset dei database che utilizzano la maggior parte delle risorse, quindi limita le relative attività. La limitazione delle richieste non viene applicata a tutti i database nel computer, bensì soltanto a quelli in cui vengono usate la maggior parte delle risorse. Un utilizzo al di sotto della soglia predefinita indica la disponibilità di risorse sufficienti per tutti i database nel server.

  • Limitazione totale: si tratta della seconda e ultima fase in cui un computer risente in modo significativo di un overload. Con la limitazione delle richieste totale non sono consentite ulteriori nuove connessioni ai database ospitati nel computer finché non verranno liberate risorse. Il database SQL restituisce messaggi di errore per nuovi tentativi di connessione, a indicare la risorsa che è stata superata.

Per altre informazioni sul meccanismo di limitazione del motore e sul corrispondente codice di errore che viene restituito nonché per indicazioni sulla modalità di risoluzione del problema, vedere Limitazione del motore del database SQL di Azure

Vedere anche

Mostra:
© 2014 Microsoft