Sto cercando una conferma di questa idea per riparare un database mal funzionante o un suggerimento migliore se qualcuno ne ha uno. Sempre aperto a suggerimenti migliori.
Ho un database molto grande (20+ milioni di record in crescita di circa 1/2 milioni al giorno) che usano GUID come PK.
Una supervisione da parte mia, ma il PK è cluster su server SQL e sta causando problemi di prestazioni.
Il motivo di una guida: questo database è parzialmente sincronizzato con altri 150 database, quindi il PK doveva essere unico. La sincronizzazione non è gestita da SQL Server, ma esiste un processo personalizzato che mantiene i dati sincronizzati per i requisiti del sistema, il tutto basato su quel GUID.
Ognuno dei 150 database remoti non memorizza i dati completi come archiviati nel database SQL centrale. memorizzano solo un sottoinsieme dei dati effettivamente richiesti e i dati richiesti non sono univoci per loro (10 database su 150 possono avere alcuni degli stessi record di database di altri siti, ad esempio, condividono). Inoltre - i dati vengono effettivamente generati nei siti remoti - non nel punto centrale - da qui la necessità dei GUID.
Il database centrale viene utilizzato non solo per mantenere tutto sincronizzato, ma le query di oltre 3000 utenti verranno eseguite su quel database frammentato molto grande. Già questo è un grosso problema nei test iniziali.
Fortunatamente non siamo ancora in vita - quindi posso apportare modifiche e portare le cose offline se necessario, che è almeno qualcosa.
Le prestazioni dei database remoti non sono un problema: i sottoinsiemi di dati sono piuttosto piccoli e il database di solito non supera mai le dimensioni di 1 GB in totale. I record vengono inviati al sistema principale abbastanza regolarmente e rimossi dai BD più piccoli quando non sono più necessari.
Le prestazioni del DB centrale, che è il custode di tutti i record, sono deplorevoli, a causa di un GUID cluster come chiave primaria per quel numero di record. La frammentazione dell'indice è fuori dai grafici.
Quindi - il mio pensiero per risolvere il problema delle prestazioni è di creare una nuova colonna - Unsigned BIGINT IDENTITY (1,1) e quindi modificare il PK cluster della colonna BIGINT della tabella.
Vorrei creare un indice univoco non cluster sul campo GUID che era la chiave primaria.
I 150 database remoti più piccoli non hanno bisogno di conoscere il nuovo PK sul database Central SQL Server: verranno semplicemente utilizzati per organizzare i dati nel database e arrestare le prestazioni e la frammentazione non valide.
Funzionerebbe e migliorerebbe le prestazioni del database SQL centrale e impedirebbe in futuro l'inferno della frammentazione dell'indice (fino a un certo punto)? o ho perso qualcosa di molto importante qui che sta per saltare e mordermi e causare ancora più dolore?
int
in 4255 giorni (11,5 anni). Se lo facesse, ti