Particionando em um único grupo de arquivos

10

Eu tenho algumas tabelas muito grandes no meu banco de dados, mas uma parte substancial desses dados é "antiga".

Devido a circunstâncias fora do meu controle, não tenho permissão para remover esses dados "antigos". A outra limitação é que não consigo modificar o banco de dados, o que significa adicionar grupos de arquivos a ele. Do jeito que as coisas estão agora, tudo reside no PRIMARYgrupo de arquivos.

Eu estava pensando em particionar essas tabelas em algumas partições, como "novo", "antigo", "arquivado" e similares. Eu tenho uma coluna "status" que gostaria de usar para esse fim.

Dado o cenário descrito e as limitações, fiquei pensando se o particionamento faz algum sentido aqui. Em outras palavras, se minha tabela for particionada dessa maneira, mas todas as partições estiverem no mesmo grupo de arquivos, o SQL Server será inteligente o suficiente para encontrar a área especial no arquivo subjacente onde residem meus "novos" dados e não tocar no área com dados "antigos"?

Em outras palavras, se, digamos, 80% dos meus dados são "antigos". O SQL Server tem um mecanismo para evitar acessar 100% dos arquivos subjacentes e acessar apenas 20% que contém dados "novos" (supondo, é claro, que eu especifique minha coluna de particionamento na WHEREcláusula das consultas).

Acho que, para responder a isso, seria necessário entender como o particionamento é implementado internamente. Agradeço qualquer indicação.

Paul White 9
fonte

Respostas:

6

Há duas vantagens em particionar uma tabela no mesmo grupo de arquivos:

  1. Permitindo que partes de um índice grande sejam reconstruídas gradualmente, permitindo uma manutenção mais eficiente. Revise ALTER INDEX [foo] REBUILD PARTITION=npara obter mais detalhes.
  2. Aproveitando a eliminação da partição e (possivelmente) o bloqueio no nível da partição para melhorar a manutenção da consulta. Eu discuto isso no meu blog .

Há várias coisas a ter em mente se você estiver particionando.

  • Se sua tabela tiver um índice em cluster (e realmente deveria), sua chave de particionamento deverá fazer parte do índice em cluster.
  • Para evitar problemas de desempenho, você deve alinhar suas partições. Isso significa que todos os seus índices devem incluir sua chave de partição, como uma inclusão ou como parte do próprio índice.
  • As recriações de índice para partições estão offline nas versões atuais do SQL Server (2005-2012). Se suas partições forem grandes e sua reconstrução por partição, isso poderá levar a problemas de bloqueio.

Eu recomendo fazer uma pesquisa completa sobre particionamento antes de implementá-lo. Kendra Little tem uma excelente lista de recursos onde você pode começar.

Mike Fal
fonte
Se eu particionei o índice clusterizado, nem todos os índices não clusterizados já contêm a coluna de particionamento como um localizador de linhas?
Zikato 20/05/19
0

A resposta é sim". Ele possui um mecanismo em qualquer consulta que filtre as entradas com base na lógica usada para definir as partições.

Você precisa ter o filtro apropriado ou todas as partições serão verificadas. Isso normalmente envolveria ter filtros de data (no seu caso) para escolher a partição.

Uma maneira de impor isso é ter visualizações que acessam apenas uma partição, com a lógica correta na visualização.

Gordon Linoff
fonte
Gostaria de saber quanto o ganho de desempenho seria para particionar o mesmo disco físico ..
SOTN