- Che cos'è l'hot spotting?
Aaron ha ragione e non ripeterò ciò che ha detto sopra, tuttavia non si tratta solo di IO del disco. La parte principale con cui molte persone hanno problemi in TempDB è dovuta alla contesa su alcune strutture di tracciamento.
Poiché la presenza di più file tempdb consente agli algoritmi di riempimento proporzionale e round robin di avere effettivamente luogo in modo "equo" tra le allocazioni, l'aggiunta di un nuovo file senza allocazioni lo rende un po 'meno. Non sono d'accordo sul fatto che si tratti di un avvertimento "piccolo pollo" (vedi gli aggiornamenti del prodotto di seguito) se inizi a vedere le PAGELATCH_*
attese su quel nuovo file e non molti o nessuno su altri file. Questo in genere accade su sistemi con attività TempDB elevata e che hanno già più di un singolo file.
Si noti che ci sono opzioni in SQL Server 2019 per modificare alcune delle tabelle di sistema sottostanti in tabelle in memoria che possono avere un miglioramento poiché gli oggetti in memoria sono allocati in modo diverso rispetto alle tabelle al forno su disco. Le tabelle basate su disco sono le tabelle tradizionali con cui tutti abbiamo lavorato nel corso degli anni. SQL Server 2014 ha introdotto tabelle ottimizzate per la memoria . SQL Server 2019 può gestire alcuni metadati di allocazione in tabelle ottimizzate per la memoria.
Un'altra modifica è stata apportata in SQL Server 2019 per aiutare con le modifiche PFS simultanee, che è in genere ciò che i conflitti per la struttura in memoria nell'allocazione stanno PAGELATCH_*
aspettando.
- Che dire di hot spotting rende le cose molto peggio in tempdb?
Niente di IMHO. Sì, TempDB ha più elementi che possono causare scritture su di esso senza essere utilizzati direttamente in modo da poter ostacolare alcuni elementi. Tuttavia, un database di utenti molto impegnato in termini di velocità di modifica dei dati è altrettanto negativo. Non è limitato a solo TempDB.
- Quali cose specifiche nel DB peggiorerebbero molto?
Mi piace molto l'analogia di Aaron! Questa è l'essenza di ciò che sta succedendo. Ciò che peggiora davvero è l'allocazione e il tracciamento dello spazio per gli oggetti nel database. Se il tuo database utente è prevalentemente statico (basso tasso di modifica) o il tuo TempDB non viene realmente utilizzato, non noterai nulla. Se, tuttavia, è un server abbastanza occupato, è possibile avviare o aggravare le attese di pagelatch che potrebbero portare al blocco dei convogli.
Aaron ha già sottolineato che nella versione precedente ci sono flag di traccia per assicurarsi che vengano utilizzate estensioni uniformi e che tutti i file in un filegroup crescano insieme (Aaron sottolinea 1117 e 1118 che sono NOP nel 2016+). L'altra cosa che vorrei sottolineare di nuovo è che questo non è solo per TempDB ma per qualsiasi database, e il layout fisico dovrebbe essere pensato a seconda delle esigenze.
Questo non è solo per problemi di hot spot ma è applicabile ad altre parti del sistema come backup / ripristino, gestione dei file, frammentazione dei metadati del filesystem, ecc., Che possono essere tutti aiutati da avere più file.
È possibile visualizzare la contesa della struttura di allocazione cercando a waitresource
in una pagina PFS (che è la pagina 1 e quindi ogni 8088 pagine). Se vedi che tutto nello stesso file (2: file: pagina), sai che sta succedendo.