Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di Fabric, Power BI e SQL. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Iscriviti oggi stessoQuesto browser non è più supportato.
Esegui l'aggiornamento a Microsoft Edge per sfruttare i vantaggi di funzionalità più recenti, aggiornamenti della sicurezza e supporto tecnico.
Si applica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
L'interleaving delle query è una configurazione del sistema in modalità tabulare che può migliorare le prestazioni delle query negli scenari di concorrenza elevata. Per impostazione predefinita, il motore tabulare di Analysis Services funziona in modo first-in first-out (FIFO) per quanto riguarda la CPU. Con FIFO, ad esempio, se viene ricevuta una risorsa e una query del motore di archiviazione lenta e quindi seguita da due query altrimenti veloci, le query veloci possono potenzialmente essere bloccate in attesa del completamento della query costosa. Questo comportamento viene illustrato nel diagramma seguente, che mostra Q1, Q2 e Q3 come query, la relativa durata e l'ora della CPU.
L'interleaving delle query con distorsioni di query brevi consente alle query simultanee di condividere le risorse della CPU, il che significa che le query veloci non vengono bloccate dietro query lente. Il tempo necessario per completare tutte e tre le query è ancora uguale, ma nell'esempio Q2 e Q3 non vengono bloccati fino alla fine. Il pregiudizio della query breve significa query veloci, definite dalla quantità di CPU che ogni query ha già utilizzato in un determinato momento può essere allocata una percentuale superiore di risorse rispetto alle query a esecuzione prolungata. Nel diagramma seguente, le query Q2 e Q3 vengono considerate veloci e allocate più CPU rispetto a Q1.
L'interleaving delle query è destinato a avere un impatto sulle prestazioni ridotte o nulle sulle query eseguite in isolamento; una singola query può comunque utilizzare la CPU come fa con il modello FIFO.
Prima di determinare se l'interleaving delle query è adatto per lo scenario, tenere presente quanto segue:
Per configurare l'interleaving delle query, impostare la proprietà Threadpool\SchedulingBehavior . Questa proprietà può essere specificata con i valori seguenti:
Valore | Descrizione |
---|---|
-1 | Automatico. Il motore sceglierà il tipo di coda. |
0 (impostazione predefinita per SSAS 2019) | Prima di tutto (FIFO). |
1 | Distorsione della query breve. Il motore limita gradualmente le query a esecuzione prolungata quando sotto pressione a favore delle query veloci. |
3 (impostazione predefinita per Azure AS, Power BI, SSAS 2022 e versioni successive) | Distorsione della query breve con annullamento rapido. Migliora i tempi di risposta delle query utente negli scenari di concorrenza elevata. Si applica solo ad Azure AS, Power BI, SSAS 2022 e versioni successive. |
In questo momento, la proprietà SchedulingBehavior può essere impostata solo tramite XMLA. In SQL Server Management Studio, il frammento di codice XMLA seguente imposta la proprietà SchedulingBehavior su 1, con distorsione della query breve.
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object />
<ObjectDefinition>
<Server xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
<ID>myserver</ID>
<Name>myserver</Name>
<ServerProperties>
<ServerProperty>
<Name>ThreadPool\SchedulingBehavior</Name>
<Value>1</Value>
</ServerProperty>
</ServerProperties>
</Server>
</ObjectDefinition>
</Alter>
Importante
È necessario riavviare l'istanza del server. In Azure Analysis Services è necessario sospendere e quindi riprendere il server, riavviare in modo efficace.
Nella maggior parte dei casi, SchedulingBehavior è l'unica proprietà da impostare. Le proprietà aggiuntive seguenti hanno impostazioni predefinite che devono funzionare nella maggior parte degli scenari con distorsioni di query brevi, tuttavia possono essere modificate se necessario. Le proprietà seguenti non hanno alcun effetto a meno che l'interleaving delle query non sia abilitata impostando la proprietà SchedulingBehavior.
ReservedComputeForFastQueries : imposta il numero di core logici riservati per le query veloci . Tutte le query vengono considerate veloci finché non decadono perché hanno usato una certa quantità di CPU. ReservedComputeForFastQueries è un intero compreso tra 0 e 100. Il valore predefinito è 75.
L'unità di misura per ReservedComputeForFastQueries è la percentuale di core. Ad esempio, un valore pari a 80 su un server con 20 core tenta di riservare 16 core per query veloci (mentre non vengono eseguite operazioni di aggiornamento). ReservedComputeForFastQueries si arrotonda fino al numero intero più vicino di core. È consigliabile non impostare questo valore di proprietà inferiore a 50. Ciò è dovuto al fatto che le query veloci potrebbero essere private e sono in contrasto con la progettazione complessiva della funzionalità.
DecadimentoIntervalCPUTime : intero che rappresenta il tempo della CPU in millisecondi trascorso da una query prima del decadimento. Se il sistema è sotto pressione cpu, le query decadite sono limitate ai core rimanenti non riservati alle query veloci. Il valore predefinito è 60.000. Questo rappresenta 1 minuto di tempo della CPU, non trascorso il tempo del calendario.
ReservedComputeForProcessing : imposta il numero di core logici riservati per ogni operazione di elaborazione (aggiornamento dati). Il valore della proprietà è un intero compreso tra 0 e 100, con un valore predefinito pari a 75 espresso. Il valore rappresenta una percentuale dei core determinati dalla proprietà ReservedComputeForFastQueries. Un valore pari a 0 (zero) significa che le operazioni di elaborazione sono soggette alla stessa logica di interleaving di query, quindi può essere decaduta.
Mentre non vengono eseguite operazioni di elaborazione, ReservedComputeForProcessing non ha alcun effetto. Ad esempio, con un valore pari a 80, ReservedComputeForFastQueries in un server con 20 core riserva 16 core per query veloci. Con un valore pari a 75, ReservedComputeForProcessing riserva quindi 12 dei 16 core per le operazioni di aggiornamento, lasciando 4 per le query veloci durante l'esecuzione e l'utilizzo della CPU. Come descritto nella sezione Query decadite di seguito, i 4 core rimanenti (non riservati alle query veloci o alle operazioni di elaborazione) verranno comunque usati per query veloci ed elaborazioni se inattive.
Queste proprietà aggiuntive si trovano nel nodo Proprietà ResourceGovernance . In SQL Server Management Studio il frammento di codice XMLA di esempio seguente imposta la proprietà DecayIntervalCPUTime su un valore inferiore al valore predefinito:
<Alter AllowCreate="true" ObjectExpansion="ObjectProperties" xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
<Object />
<ObjectDefinition>
<Server xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500">
<ID>myserver</ID>
<Name>myserver</Name>
<ServerProperties>
<ServerProperty>
<Name>ResourceGovernance\DecayIntervalCPUTime</Name>
<Value>15000</Value>
</ServerProperty>
</ServerProperties>
</Server>
</ObjectDefinition>
</Alter>
I vincoli descritti in questa sezione si applicano solo se il sistema è sotto pressione della CPU. Ad esempio, una singola query, se è l'unica in esecuzione nel sistema in un determinato momento, può utilizzare tutti i core disponibili indipendentemente dal fatto che sia decaduto o meno.
Ogni query può richiedere molti processi del motore di archiviazione. Quando un core nel pool per le query decadite diventa disponibile, l'utilità di pianificazione verificherà la query in esecuzione meno recente in base al tempo trascorso del calendario per verificare se è già stato usato il diritto massimo core (MCE). Se no, il processo successivo viene eseguito. In caso affermativo, viene valutata la query meno recente successiva. La query MCE è determinata dal numero di intervalli di decadimento già usati. Per ogni intervallo di decadimento usato, l'ambiente di gestione delle chiavi viene ridotto in base all'algoritmo illustrato nella tabella seguente. Ciò continua fino a quando la query non viene completata, il timeout o l'ambiente di gestione dei dati viene ridotto a un singolo core.
Nell'esempio seguente il sistema ha 32 core e la CPU del sistema è sotto pressione.
ReservedComputeForFastQueries è 60 (60%).
DecayIntervalCPUTime è 60.000 (1 minuto di tempo della CPU).
Il ciclo di vita di una query può essere il seguente, purché non venga completato o non completato:
Fase | Stato | Esecuzione/pianificazione | MCE |
---|---|---|---|
0 | Veloce | McE è 20 core (riservato per le query veloci). La query viene eseguita in modo FIFO rispetto ad altre query veloci tra i 20 core riservati. L'intervallo di decadimento di 1 minuto di tempo della CPU viene usato. |
20 = MIN(32/2˄0, 20) |
1 | Decaduto | McE è impostato su 12 core (12 core rimanenti non riservati alle query veloci). I processi vengono eseguiti in base alla disponibilità fino a MCE. L'intervallo di decadimento di 1 minuto di tempo della CPU viene usato. |
12 = MIN(32/2˄1, 12) |
2 | Decaduto | McE è impostato su 8 core (trimestre di 32 core totali). I processi vengono eseguiti in base alla disponibilità fino a MCE. L'intervallo di decadimento di 1 minuto di tempo della CPU viene usato. |
8 = MIN(32/2˄2, 12) |
3 | Decaduto | McE è impostato su 4 core. I processi vengono eseguiti in base alla disponibilità fino a MCE. L'intervallo di decadimento di 1 minuto di tempo della CPU viene usato. |
4 = MIN(32/2˄3, 12) |
4 | Decaduto | McE è impostato su 2 core. I processi vengono eseguiti in base alla disponibilità fino a MCE. L'intervallo di decadimento di 1 minuto di tempo della CPU viene usato. |
2 = MIN(32/2˄4, 12) |
5 | Decaduto | McE è impostato su 1 core. I processi vengono eseguiti in base alla disponibilità fino a MCE. L'intervallo di decadimento non si applica perché la query è stata inferiore. Nessun ulteriore decadimento perché viene raggiunto un minimo di 1 core. |
1 = MIN(32/2˄5, 12) |
Se il sistema è sotto pressione CPU, ogni query verrà assegnata senza più core rispetto al relativo MCE. Se tutti i core sono attualmente usati dalle query all'interno dei rispettivi MCEs, altre query attendeno fino a quando i core non diventano disponibili. Poiché i core diventano disponibili, viene recuperata la query con diritto meno recente in base al tempo trascorso del calendario. L'MCE è un limite sotto pressione; non garantisce il numero di core in qualsiasi momento.
Eventi
31 mar, 23 - 2 apr, 23
Il più grande evento di apprendimento di Fabric, Power BI e SQL. 31 marzo - 2 aprile. Usare il codice FABINSIDER per salvare $400.
Iscriviti oggi stessoFormazione
Percorso di apprendimento
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Certificazione
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
Scrivere query efficienti, creare criteri di indicizzazione, gestire e effettuare il provisioning delle risorse nell'API SQL e nell'SDK con Microsoft Azure Cosmos DB.