L'esecuzione di una query di grandi dimensioni su un database secondario in un gruppo di disponibilità influirà sulle prestazioni della transazione nel database primario?


17

Devo fornire dati in tempo reale, o quasi in tempo reale, per i report SSRS e Tableau. Non voglio che il sistema OLTP di produzione sia influenzato negativamente da query di lunga durata. L'esecuzione di una query di grandi dimensioni su un database secondario in un gruppo di disponibilità influirà sulle prestazioni della transazione nel database primario?

Risposte:


14

L'esecuzione di una query di grandi dimensioni su un database secondario in un gruppo di disponibilità influirà sulle prestazioni della transazione nel database primario?

Dipende dalla modalità di sincronizzazione utilizzata durante la configurazione del gruppo di disponibilità - Sincronizza o Asincronizza!

Nella replica secondaria , tutte le transazioni utilizzano SOLO il livello di isolamento dello snapshot e vengono ignorati anche tutti i suggerimenti di blocco. Ecco perché è importante testare il carico di lavoro quando si abbraccia AlwaysON.

Da: Riduzione al minimo del blocco del thread REDO durante l'esecuzione del carico di lavoro dei report sulla replica secondaria

Mentre la mappatura del carico di lavoro di reporting sull'isolamento dello snapshot elimina il blocco tra il carico di lavoro DML applicato dal thread REDO sulla replica secondaria e il carico di lavoro di lettura o reporting, non elimina il potenziale blocco del thread REDO durante l'esecuzione di un'operazione DDL .

Se si utilizza

  • Modalità sincrona

    • Il problema di blocco sulla replica secondaria influirà sulle prestazioni delle query sulla replica primaria. Pertanto, un carico di lavoro di lettura (seleziona) eseguito su secondario potrebbe impedire al thread di ripetizione di applicare le modifiche provenienti dalla replica primaria. Ciò significa che la replica primaria deve attendere che le modifiche vengano applicate a tutte le repliche SYNC secondarie prima di eseguire il commit a livello locale e potrebbe finire in timeout o blocco o deadlock.

      Il thread REDO può essere visto sul Secondario leggibile come DB STARTUPcomando in sys.dm_exec_requests. Se quel thread viene bloccato, il carico di lavoro di lettura sul secondario potrebbe causare un impatto sul primario.

      Per ulteriori dettagli, controllare - Scenario 1: REDO bloccato a causa di una query di grandi dimensioni sulla replica secondaria

  • Modalità asincrona

    • Il primario non attende il riconoscimento dal secondario. Un problema di blocco su secondario è solo isolato su secondario in cui la coda di ripetizione crescerà su secondaria fino a quando i blocchi non saranno chiari e il thread di ripetizione sarà in grado di applicare i blocchi di registro. Ciò non influirà sulla replica primaria.

La tua definizione di "in tempo reale o quasi in tempo reale" richiede ulteriori riflessioni tenendo presente il metodo di sincronizzazione utilizzato, la latenza della rete e l'impegno della replica primaria e l'attività di registro che deve essere trasportata secondaria.

SQL Server 2016 ha apportato alcuni importanti miglioramenti nel regno AlwaysON ad es


2
Un thread REDO bloccato non influisce "sulle prestazioni delle query nella replica primaria". La contesa di I / O sul secondario può ritardare il salvataggio dei record di registro sul secondario, il che può influire sui tempi di commit sul primario. Ma questo non ha nulla a che fare con il thread REDO. Il primario non attende che REDO applichi la modifica; solo per essere scritto nel file di registro. Vedi blogs.msdn.microsoft.com/sqlserverstorageengine/2011/12/22/…
David Browne - Microsoft
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.