Estou depois de alguma confirmação dessa idéia para corrigir um banco de dados com desempenho ruim ou uma sugestão melhor, se alguém tiver um. Sempre aberto a melhores sugestões.
Eu tenho um banco de dados muito grande (mais de 20 milhões de registros crescendo cerca de 1/2 milhão por dia) que estão usando GUID como PK.
Uma supervisão da minha parte, mas o PK está agrupado no servidor SQL e está causando problemas de desempenho.
O motivo de um guia - esse banco de dados é parcialmente sincronizado com outros 150 bancos de dados, portanto a PK precisava ser única. A sincronização não é gerenciada pelo SQL Server, mas há um processo personalizado criado que mantém os dados sincronizados para os requisitos do sistema - todos baseados nesse GUID.
Cada um dos 150 bancos de dados remotos não armazena os dados completos armazenados no banco de dados SQL central. eles armazenam apenas um subconjunto dos dados que eles realmente precisam e os dados que eles exigem não são exclusivos deles (10 dos 150 bancos de dados podem ter alguns dos mesmos registros dos bancos de dados de outros sites, por exemplo - eles compartilham). Além disso - os dados são realmente gerados nos sites remotos - não no ponto central - daí a necessidade dos GUIDs.
O banco de dados central é usado não apenas para manter tudo sincronizado, mas as consultas de mais de 3000 usuários serão executadas nesse banco de dados fragmentado muito grande. Já é um grande problema nos testes iniciais.
Felizmente, ainda não estamos no ar - para que eu possa fazer alterações e colocar offline, se necessário, o que é pelo menos algo.
O desempenho dos bancos de dados remotos não é um problema - os subconjuntos de dados são bem pequenos e o banco de dados geralmente nunca ultrapassa 1 GB no total. Os registros são retornados ao sistema principal com bastante regularidade e removidos dos BDs menores quando não são mais necessários.
O desempenho do banco de dados central, que é o guardião de todos os registros, é lamentável - devido a um GUID em cluster como uma chave primária para muitos registros. A fragmentação do índice está fora dos gráficos.
Então - o meu pensamento para corrigir o problema de desempenho é criar uma nova coluna - IDENTIDADE BIGINT não assinada (1,1) e depois alterar o PK em cluster da coluna BIGINT da tabela.
Eu criaria um índice não clusterizado exclusivo no campo GUID, que era a chave primária.
Os 150 bancos de dados remotos menores não precisam saber sobre a nova PK no banco de dados do SQL Server Central - será puramente usada para organizar os dados no banco de dados e impedir o mau desempenho e a fragmentação.
Isso funcionaria e melhoraria o desempenho do banco de dados SQL central e impediria a fragmentação futura do índice (até certo ponto)? ou eu perdi algo muito importante aqui que vai pular e me morder e causar ainda mais sofrimento?
int
em 4255 dias (11,5 anos). Se ele fez isso, ele só culpá-lo em 11,5 anos;)