Perché un file .bacpac è così piccolo rispetto a un file .bak dello stesso database?

Ho eseguito backup dei miei database SQL Server 2014 Express per limportazione su altri server e ho notato una differenza nella dimensione del file tra .bacpac e .bak.

Perché un file .bacpac è così piccolo rispetto a un .bak file dello stesso database?

Grazie per eventuali approfondimenti!

Risposta

A

  • .bacpac file = Schema + Data. Nota che i dati sono BCP” editi utilizzando il formato nativo (non leggibile da umano).

    • Puoi rinominare .bacpac in .zip per vedere contenuto effettivo.

    • Puoi utilizzare ...DAC\bin\sqlpackage.exe per estrarre il .bacpac contenuto in modo programmatico.

    • È una istantanea che include dati utente + schema da SQL Server o database SQL di Azure.

  • Backup (comunemente ha .bak estensione) = Un backup COMPLETO del database contiene una copia completa del database e fornisce un unico punto nel tempo in cui il database può essere ripristinato. Un backup completo contiene alcuni record del log delle transazioni in modo che il componente ripristinato (database, file o filegroup) possa essere reso coerente dal punto di vista delle transazioni.

Un BACPAC non sostituisce un backup COMPLETO. È solo unistantanea che può essere utilizzata per spostare un database da un server a un altro (o nel cloud) e archiviando un database esistente in un formato aperto .

Dal mio test, di seguito sono riportati i risultati

inserisci qui la descrizione dellimmagine

Commenti

  • Il file di registro è probabilmente il motivo principale della differenza di dimensioni.
  • ' presumo che ci sia ' non contiene dati di indice neanche nel .bacpac, il che probabilmente contribuisce alla dimensione del file.

Risposta

Un backup creato tramite BACKUP DATABASE command (.bak) è una copia pagina per pagina di un database. Si noti che il database di SQL Server contiene non solo pagine di dati. Esistono anche pagine con indici che possono essere di grandi dimensioni. Maggiori dettagli qui

Un backup creato utilizzando lapplicazione Export Data-Tier (.bacpac) loperazione è semplicemente una riga esportata da un database in formato XML posta in un archivio. Puoi visualizzare manualmente i contenuti di BACPAC, basta modificare lestensione di questo file in .zip.

La dimensione del .bacpac il file è direttamente proporzionale al numero di record in un database (tenendo conto del rapporto di compressione).

La dimensione del file .bak dipende non solo dai dati ma anche dalla dimensione degli indici.

A volte questo può essere un problema, controlla ad esempio questa vecchia discussione

Pertanto, .bacpac di solito è di dimensioni inferiori.

Ho eseguito i test più semplici con il database AdventureWorks e ho ottenuto questi risultati.

AdventureWorks.bacpac - 17 mb AdventureWorks.bacpac.zip - 16 mb AdventureWorks_with_compression.bak - 49 mb AdventureWorks_with_compression.bak.zip - 47 mb 

Devo usare .bacpac per ridurre le dimensioni del backup?

No.

Export \ Import Data Tier Application presenta diversi svantaggi significativi che sono critici per database di grandi dimensioni:

  1. Questa non è unoperazione consistente a livello di transazione. Le tabelle vengono esportate in sequenza. Potrebbe esserci un problema con la chiave esterna. Questo è doppiamente negativo perché lo scopri solo quando cerchi di riprenderti. Pertanto, quando si esegue questa operazione, è necessario acquisire unistantanea del database ed esportare listantanea.
  2. Ci vuole molto più tempo per lesportazione e limportazione. Nel momento in cui hai urgente bisogno di eseguire un ripristino, non sarai in grado di farlo perché il ripristino da .bacpac richiederà diverse ore per essere completato.
  3. Lesportazione può caricare in modo significativo il server, specialmente per grandi tabelle, che, insieme al punto precedente, rende i backup regolari una decisione dubbia.

Il backup classico creato utilizzando il comando BACKUP DATABASE è privo di questi inconvenienti, per risparmiare spazio usa Ripristino point-in-time

Lapplicazione di livello dati Export \ Import può essere considerata un modo per creare un backup solo per database di piccole dimensioni, nei casi in cui non si ha accesso a il file system. In questo caso, non esportare il database live in nessuna circostanza, assicurati di creare unistantanea per unesportazione coerente.

Risposta

Bene, la differenza più grande è che i dati vengono compressi (utilizzando zip) per il file .bacpac, il che non è il caso di un normale .bak file. Comprimi semplicemente il file .bak e verifica che sia molto più piccolo;)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *