Condividi tramite


Stimare le dimensioni di un heap

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema di Piattaforma Analitica (PDW)Database SQL in Microsoft Fabric

I seguenti passaggi sono utilizzabili per valutare la quantità di spazio necessaria per l'archiviazione dei dati in un heap:

  1. Specificare il numero di righe che verranno incluse nella tabella:

    • Num_Rows = numero di righe della tabella
  2. Specificare il numero di colonne di lunghezza fissa e e variabile e calcolare lo spazio necessario per la loro archiviazione:

    Calcolare lo spazio occupato da ognuno di questi gruppi di colonne all'interno della riga di dati. Le dimensioni di una colonna dipendono dal tipo di dati e dalla lunghezza specificata.

    • Num_Cols = numero totale di colonne (a lunghezza fissa e a lunghezza variabile)
    • Fixed_Data_Size = dimensioni totali in byte di tutte le colonne a lunghezza fissa
    • Num_Variable_Cols = numero di colonne a lunghezza variabile
    • Max_Var_Size = dimensioni massime totali in byte di tutte le colonne a lunghezza variabile
  3. Parte della riga, nota come mappa di bit dei null, è riservata per gestire la nullità delle colonne. Calcolarne le dimensioni:

    • Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Solo l'integrale di questa espressione dovrebbe essere utilizzato. Scartare il rimanente.

  4. Calcolare le dimensioni dei dati di lunghezza variabile:

    Se la tabella include colonne di lunghezza variabile, determinare la quantità di spazio utilizzata per l'archiviazione delle colonne nella riga:

    • Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

    I byte aggiunti a Max_Var_Size servono a tenere traccia di ogni colonna a lunghezza variabile. Questa formula si basa sul presupposto che tutte le colonne a lunghezza variabile siano piene al 100%. Se si prevede che verrà usata una percentuale inferiore dello spazio di archiviazione delle colonne a lunghezza variabile, è possibile modificare il valore di Max_Var_Size in base a tale percentuale per ottenere una stima più accurata delle dimensioni complessive della tabella.

    Note

    È possibile combinare colonne varchar, nvarchar, varbinaryo sql_variant che fanno eccedere gli 8.060 byte per la larghezza totale definita della tabella. La lunghezza di ognuna di queste colonne deve comunque essere compresa nel limite di 8.000 byte per una colonna varchar, nvarchar, varbinary o sql_variant. Tuttavia, le larghezze combinate potrebbero superare il limite di 8.060 byte in una tabella.

    Se non sono presenti colonne di lunghezza variabile, impostare Variable_Data_Size su 0.

  5. Calcolare le dimensioni totali della riga:

    • = Row_Size + Fixed_Data_Size + Variable_Data_SizeNull_Bitmap + 4

    Il valore 4 nella formula è l'overhead dell'intestazione di riga dei dati.

  6. Calcolare il numero di righe per pagina (8.096 byte gratuiti per pagina):

    • Rows_Per_Page = 8096 / (Row_Size + 2)

    Poiché le righe non si estendono su più pagine, il numero di righe per pagina deve essere arrotondato per difetto al numero intero di righe più vicino. Il valore 2 nella formula è per la voce di riga nella matrice di slot della pagina.

  7. Calcolare il numero di pagine necessario per archiviare tutte le righe:

    • Num_Pagine = Num_Righe / Righe_Per_Pagina

    Il numero di pagine stimato deve essere arrotondato alla pagina intera più vicina.

  8. Calcolare la quantità di spazio necessaria per archiviare i dati nell'heap (8.192 byte totali per pagina):

    Dimensioni dell'heap (byte) = 8192 x Num_Pages

Questo calcolo non considera le condizioni seguenti:

  • Partizionamento: il sovraccarico dello spazio dal partizionamento è minimo, ma complesso da calcolare. Non è importante includere.

  • Pagine di allocazione: è presente almeno una pagina IAM usata per tenere traccia delle pagine allocate a un heap, ma il sovraccarico dello spazio è minimo e non esiste alcun algoritmo per calcolare in modo deterministico esattamente il numero di pagine IAM che verranno usate.

  • Valori LOB (Large Object): algoritmo per determinare esattamente la quantità di spazio che verrà usata per archiviare i tipi di dati LOB varchar(max), varbinary(max), nvarchar(max), text, ntextxml e i valori dell'immagine sono complessi. È sufficiente aggiungere solo le dimensioni medie dei valori LOB previsti e aggiungerli alla dimensione totale dell'heap.

  • Compressione: non è possibile precalcolatare le dimensioni di un heap compresso.

  • Colonne di tipo sparse: per informazioni sui requisiti di spazio delle colonne di tipo sparse, vedere Usare colonne di tipo sparse.