SharePoint SharePoint 2007 SharePoint 2010 Tecnologia

#Troubleshooting: Tamanho do Banco de Dados SharePoint por conta do versionamento [Parte 1]

Olá Pessoal!

Estavamos eu, Emílio Souza e Heber Lopes esses dias quebrando a cabeça por causa do tamanho do Banco de Dados SQLServer de um dos portais SharePoint de um de nossos clientes.

Acreditem, foi assustador ver que a tabela “AllDocVersions” estava ocupando cerca de 11 GB no nosso banco, e precisávamos então descobrir uma forma de consertar isso.

Primeiramente vimos o grande problema que estava causando essa bizarrice em nosso banco, o versionamento estava habilitado e um workflow atualizava os itens de tempos em tempos, portanto encontramos itens no banco que demonstravam itens de lista com mais de 8 mil versões… bizarro não?

Para consertarmos isso precisaríamos entender como funcionam as tabelas criadas pelo próprio SharePoint para que pudéssemos excluir os itens sobressalentes sem que isso nos prejudicasse.

*Relembrando que fazer essas alterações diretamente na base de dados não é recomendado pela equipe da Microsoft e que talvez você possa perder a garantia dos serviços de suporte caso haja algum problema após as alterações.

Então lá fomos nós testar como funcionavam as tabelas “AllDocVersions”, “AllDocs” e “AllUserData”, e descobrir a relação entre elas, que nos surpreeendeu.

Antes de começar a falar das tabelas, deixe-me explicar o que NÃO acontece com versionamento SharePoint:

  1. Quando temos várias versões e desabilitamos o controle de versão, o SharePoint NÃO exclui as versões antigas do banco, então se você desabilita e habilita novamente ele volta com todas as versões tranquilamente;
  2. Quando temos várias versões e limitamos a quantidade de versionamento, o SharePoint NÃO exclui as versões antigas do banco;
  3. Quando mandamos excluir todas as versões pelo Browser, o SharePoint encaminha os itens para a Lixeira, portanto, continua ocupando espaço no Banco de Dados;
  4.  Sobre o item acima, a única coisa que muda é um campo da tabela “AllDocVersions”, o campo “DeleteTransactionId”, que possui o valor “0x” (zero x) quando está no portal, e um outro valor quando é mandado para a Lixeira. Então se deseja apagar do banco as versões que estão na lixeira, basta rodar o script de DELETE na tabela “AllDocVersions” (“DELETE FROM dbo.AllDocVersions WHERE DeleteTransactionId <> 0x”)

Depois de apanharmos dessa arquitetura do SharePoint de manter o item no banco apesar de termos limitado ou apagado via browser, pudemos perceber o seguinte:

Nas tabelas “AllDocVersions” e “AllDocs”, existe um campo chamado “Id” e essa é a grande relação entre as duas tabelas, o que nos intrigou no começo e que nos fez bater bastante a cabeça no início.

Então pensemos o seguinte, a estrutura das tabelas do SharePoint e suas referências entre si são assim:

Vamos usar o exemplo de um item de Lista do SharePoint com versionamento habilitado…

Quando um item novo é criado, é também crido um novo registro na tabela “AllDocs”, contendo o identificador desse registro no campo “Id”. Até então na tabela “AllDocVersions” não temos nenhum registro, pois o item está na versão 1.0 e nessa primeira versão o item só fica registrado na tabela “AllDocs”.

Segue imagem abaixo para exemplificar e tentar tornar um pouco mais fácil:

Agora, a partir do momento que esse item é atualizado e ganha nova versão, um registro é adicionado na tabela “AllDocVersions” e para manter a referência de a qual item essa nova versão pertence, o campo “Id” da tabela “AllDocVersions” recebe o valor do campo “Id” do registro da tabela “AllDoc”, faz sentido não?

Então toda vez que o item é atualizado na Lista SharePoint, e irá ganhar versão nova, um novo registro é criado na tabela “AllDocVersions”, com o Id do item referência da tabela “AllDocs”.

Vamos supor que temos um item chamado “HelloWorld”, com um Id igual a “123456” na AllDocs, com 5 versões… no banco de dados ficará assim:

TABELA “ALLDOCS”

ID Titulo Número de Versões
123456 HelloWorld 5.0

TABELA “ALLDOCVERSIONS”

ID Versão
123456 2.0
123456 3.0
123456 4.0
123456 5.0

Na tabela “AllDocs” temos a versão original, e na “AllDocVersions” as versões posteriores.

Chegamos ao fim dessa primeira parte do artigo sobre Troubleshooting na Base de Dados SharePoint por conta do Versionamento.

Fique ligados que as outras partes vem por aí, aguardem e comentem!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s