Estoy después de una confirmación de esta idea para arreglar una base de datos de bajo rendimiento o una mejor sugerencia si alguien tiene una. Siempre abierto a mejores sugerencias.
Tengo una base de datos muy grande (más de 20 millones de registros que crecen aproximadamente 1/2 millón por día) que usan GUID como PK.
Un descuido de mi parte, pero el PK está agrupado en el servidor SQL y está causando problemas de rendimiento.
El motivo de un guid: esta base de datos está parcialmente sincronizada con otras 150 bases de datos, por lo que la PK debe ser única. La sincronización no es administrada por SQL Server, sino que hay un proceso personalizado creado que mantiene los datos sincronizados para los requisitos del sistema, todo basado en ese GUID.
Cada una de las 150 bases de datos remotas no almacena los datos completos como se almacenan en la base de datos central de SQL. solo almacenan un subconjunto de los datos que realmente requieren, y los datos que requieren no son exclusivos para ellos (10 de las 150 bases de datos pueden tener algunos de los mismos registros de las bases de datos de otros sitios, por ejemplo, comparten). Además, los datos se generan en los sitios remotos, no en el punto central, de ahí la necesidad de los GUID.
La base de datos central se usa no solo para mantener todo sincronizado, sino que las consultas de más de 3000 usuarios se ejecutarán en esa gran base de datos fragmentada. Este ya es un gran problema en las pruebas iniciales.
Afortunadamente, todavía no estamos en vivo, por lo que puedo hacer cambios y desconectar las cosas si es necesario, que es al menos algo.
El rendimiento de las bases de datos remotas no es un problema: los subconjuntos de datos son bastante pequeños y la base de datos generalmente nunca supera el tamaño de 1 GB en total. Los registros se retroalimentan al sistema principal con bastante regularidad y se eliminan de los BD más pequeños cuando ya no son necesarios.
El rendimiento de la base de datos central que es el guardián de todos los registros es lamentable, debido a un GUID agrupado como clave principal para esa cantidad de registros. La fragmentación del índice está fuera de los gráficos.
Entonces, mi intención de solucionar el problema de rendimiento es Crear una nueva columna: IDENTIDAD BIGINT sin firmar (1,1) y luego cambiar el PK agrupado de la columna BIGINT de la tabla.
Crearía un índice único no agrupado en el campo GUID, que era la clave principal.
Las 150 bases de datos remotas más pequeñas no necesitan saber acerca de la nueva PK en la base de datos del Servidor SQL Central: se utilizará exclusivamente para organizar los datos en la base de datos y detener el mal rendimiento y la fragmentación.
¿Funcionaría y mejoraría el rendimiento de la base de datos central de SQL y evitaría un futuro infierno de fragmentación del índice (hasta cierto punto)? ¿O me he perdido algo muy importante aquí que va a saltar y morderme y causar aún más dolor?
int
en 4255 días (11.5 años). Si lo hiciera, solo te culparía en 11.5 años;)