Visão Geral
No SharePoint, um objeto binário grande (BLOB) é um arquivo, tal como um documento ou um arquivo de vídeo. Por padrão, esses BLOBs, também chamados de dados não estruturados, são embutidos no banco de dados de conteúdo do SharePoint com os metadados ou dados estruturados. O tamanho dos BLOBs pode ser enorme: 2gb no SharePoint 2013, e a remoção dos BLOBs do banco de dados do SQL pode ser útil para melhorar o desempenho do servidor SQL.
Para isto podemos utilizar o RBS com Filestream, que é um recurso do SQL Server (a partir da versão 2008) que permite que dados estruturados sejam armazenados no banco de dados e que os dados associados não estruturados sejam armazenados diretamente no sistema de arquivos NTFS e mantenham a consistência transacional entre os dados estruturados e não estruturados, permitindo até mesmo a recuperação pontual dos dados FILESTREAM usando backups de log.
Seguindo os testes da Microsoft teremos o melhor ganho de desempenho com BLOBs maiores do que 1mb: Filestream usa o cache do sistema NT para dados de arquivo cache, reduzindo o efeito dos BLOBs no database engine. O pool de buffer do SQL Server não é utilizado, portanto, temos mais memória disponível para o processamento de consultas.
Outros efeitos positivos:
Configuração
Observações:
- A conta do usuário utilizada executando as etapas da configuração das bases deve ser membro do db_owner em cada banco de dados que você está configurando para RBS.
- A conta do usuário que instala a biblioteca do cliente RBS deve ser membro do grupo de Administradores em todos os computadores em quais você instala a biblioteca do cliente do RBS.
- A conta do usuário que habilita RBS para cada banco de dados de conteúdo do SharePoint deve ser administrador da farm do SharePoint.
- Todas as configurações mencionadas nesse artigo foram testado em uma farm "three-tier" do SharePoint 2013 SP1 e com servidor SQL 2012 SP2.
- O RBS com Filestream não influencia nos tamanhos recomendados pela Microsoft de 200GB e/ou 4TB.
Habilitar Filestream na instância do SQL do SharePoint
a.) Abra o SQL Server Configuration Manager.b.) Entre nas propriedades da instância no serviço do SQL e escolha FILESTREAM.
c.) Habilite filestream na instância do SQL conforme imagem abaixo:
d.) Execute a seguinte consulta para finalizar essa configuração:
EXEC sp_configure filestream_access_level, 2RECONFIGURE
e.) Reinicie a instância do SQL.
Obs.: Essa configuração precisa ser feita uma única vez na instância do SQL em qual você utilizará RBS com Filestream.
Provisionar o repositório BLOB para cada base de dados de conteúdo.
Configurar o repositório da base
Altere o nome da base e execute as consultas abaixo para cada base de dados de conteúdo.
Obs.: Utilize uma chave de encriptação diferente (create master key encryption by password = N'Admin Key Password !2#4')!
use [WSS_Content]if not exists(select * from sys.symmetric_keyswhere name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'
use [WSS_Content]if not exists(select groupname from sysfilegroupswhere groupname=N'RBSFilestreamProvider')alter database [WSS_Content]add filegroup RBSFilestreamProvider contains filestreamObs.: Altere o lugar do repositório, conforme desejado.
use [WSS_Content]alter database [WSS_Content]add file (name = RBSFilestreamFile, filename = 'c:\Blobstore')to filegroup RBSFilestreamProvider
Instalar o cliente RBS em todos os servidores Web do SharePoint (em todos com o serviço "Microsoft SharePoint Foundation Web Application" habilitado).
1. Baixe o cliente RBS (x64 RBS.msi) do Microsoft® SQL Server® 2012 SP2 Feature Pack.
2. Execute no primeiro servidor do SharePoint o seguinte comando em um prompt administrativo:
msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content" DBINSTANCE="DBInstanceName" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1
Verifique em seguida o sucesso da instalação no log gerado (rbs_install_log.txt), você deve encontrar no final do log a mensagem do sucesso: "Product: Microsoft SQL Server 2012 Remote BLOB Store -- Installation completed successfully."
3. Execute o comando abaixo nos demais servidores web do SharePoint:
msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME="WSS_Content_Intranet" DBINSTANCE="mvplabsql" ADDLOCAL=Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer
Verifique em seguida o sucesso da instalação no log gerado (rbs_install_log.txt), você deve encontrar no final do log a mensagem do sucesso: "Product: Microsoft SQL Server 2012 Remote BLOB Store -- Installation completed successfully."
4. Ative RBS nas bases de conteúdo do SharePoint.
Execute o script abaixo no Powershell do SharePoint:
$cdb = Get-SPContentDatabase <ContentDatabaseName>
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Installed()
$rbss.Enable()
$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
$rbss
O conteúdo existente pode ser migrado acrescendo a linha $rbs.Migrate().
A configuração está funcional a partir desse momento - você pode salvar arquivos dentro do SharePoint e monitorar o crescimento imediato do tamanho da pasta configurada: No caso da minha configuração c:\Blobstore.
Manutenção do RBS com Filestream
Uma parte ainda não está funcional: Os BLOBs não são excluídos automaticamente do repositório do RBS quando o conteúdo correspondente é excluído do SharePoint. Um ciclo de coleta de lixo usando o Maintainer do RBS é necessário para limpar os BLOBs órfãos.
Observação: O Maintainer não precisa ser executado no servidor SQL e pode ser executado a partir do qualquer servidor do SharePoint com o client instalado (Seção "Instalar o cliente RBS em todos os servidores Web do SharePoint" desse artigo).
Configurar o Maintainer do RBS
1. Verifique a configuração em vigor no arquivo da configuração da conexão com os seguintes comandos:
cd C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\MaintainerVocê deve encontrar as mesmas configurações feitas na instalação do cliente:
rename Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config web.config
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pdf connectionStrings .
<connectionStrings>2. Em seguida encripte a configuração da conexão novamente:
<add name="RBSMaintainerConnection" connectionString="Data Source=SQLSERVER;Initial Catalog=CONTENTDATABASE;Integrated Security=True;Application Name="Remote Blob Storage Maintainer"" providerName="System.Data.SqlClient" />
</connectionStrings>
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -pef connectionStrings . -prov DataProtectionConfigurationProvider
rename web.config Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config
3. Configure uma tarefa agendada para ser executada, por exemplo mensalmente, no servidor responsável pela manutenção do RBS com Filestream.
Nas configurações da tarefa, na caixa Programa/script, navegue para o arquivo binário do Maintainer >C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\Maintainer\Microsoft.Data.SqlRemoteBlobs.Maintainer.exe e insira na caixa de texto os seguintes parâmetros:
<-ConnectionStringName RBSMaintainerConnection> <-Operation GarbageCollection ConsistencyCheck ConsistencyCheckForStores>
<-GarbageCollectionPhases rdo>
<-ConsistencyCheckMode r>
<-TimeLimit 120>
Verificação da limpeza dos órfãos
A limpeza dos órfãos deve estar ativa após a configuração anterior e pode ser testada. Para isto precisamos estar ciente do ciclo de vida dos BLOBs, que é diferente dependendo do modo da recuperação da base de dados do conteúdo do SharePoint:
No modo simples: Após a execução do Maintainer e um backup completo.
No modo full: Após a execução do Maintainer e de dois backups dos logs e dois checkpoints manuais (backup, checkpoint, backup, checkpoint)
1. Altere o período da limpeza para 0 com a seguinte consulta:
exec mssqlrbs.rbs_sp_set_config_value 'garbage_collection_time_window', 'time 00:00:00';Observação: Execute a consulta abaixo para reverter essa configuração após os testes.
exec mssqlrbs.rbs_sp_set_config_value 'delete_scan_period', 'time 00:00:00';
exec mssqlrbs.rbs_sp_set_config_value 'orphan_scan_period', 'time 00:00:00';
exec mssqlrbs.rbs_sp_set_config_value 'garbage_collection_time_window', 'days 30';2. Execute em seguida o seguinte comando no servidor responsável pela manutenção.
exec mssqlrbs.rbs_sp_set_config_value 'delete_scan_period', 'days 30';
exec mssqlrbs.rbs_sp_set_config_value 'orphan_scan_period', 'days 30';
"C:\Program Files\Microsoft SQL Remote Blob Storage 11.0\Maintainer\Microsoft.Data.SqlRemoteBlobs.Maintainer.exe" -ConnectionStringName RBSMaintainerConnection -Operation GarbageCollection ConsistencyCheck -GarbageCollectionPhases rdo -ConsistencyCheckMode rO resultado deve ter essa aparência, importante nesse caso é a linha “Scanned 98 blobs. Deleted 98 blobs in the range of […]”
Starting Maintainer tasks.3. Execute o(s) backup(s) necessários, conforme mencionado anteriormente.
Starting Garbage Collection.
Starting Reference Scan.
Reference Scan is complete for this database.
Scanned 98 blobs. Deleted 98 blobs in the range of 0x000000000000000
000000000(exclusive) to 0x000000000000006200000001(inclusive).
This task has ended. Processed 1 work units total. 0 Work units were incomplete.
Starting Delete Propagation.
Starting Delete Propagation for pool <PoolId 1, BlobStoreId 1, Store PoolId 0x01000000>.
..
This pool does not have to be deleted. Reason: PoolCanStoreNewBlobs.
Delete Propagation complete for pool <PoolId 1, BlobStoreId 1, Store
PoolId 0x01000000>.
98 Delete for 98 blobs attempted, 98 blobs were deleted. 0 blobs were not found in the blob store. For more information, see the RBS Maintainer log.
Delete Propagation is complete for this database.
This task has ended. Processed 1 work units total. 0 Work units were incomplete. Needed to delete 98 blobs. Succeeded in deleting 98 blobs, 0 blobs were not found in the blob store.
Starting Orphan Cleanup.
Starting Orphan Cleanup for pool <PoolId 1, BlobStoreId 1, StorePool Id 0x01000000>.
.
Enumerated 0 blobs, 0 blobs are being considered for orphan cleanup.
.
Orphan Cleanup complete for pool <PoolId 1, BlobStoreId 1, StorePool Id 0x01000000>.
0 Delete for 0 blobs attempted, 0 blobs were deleted. 0 blobs were not found in the blob store. For more information, see the RBS Maintainer log.
Orphan Cleanup is complete for this database.
This task has ended. Processed 1 work units total. 0 Work units were incomplete. Needed to delete 0 blobs. Succeeded in deleting 0 blobs, 0 blobs were not found in the blob store. Enumerated 0 blobs, 0 blobs are being considered for orphan cleanup.
This task has ended.
Starting RBS consistency check with attempt to repair.
No RBS consistency issues found.
Consistency check completed.
This task has ended.
Backup e restaurar dados
O backup e restaurar dados, tanto no servidor SQL como no SharePoint, continua a funcionar da mesma forma com algumas pequenas alterações:
- SQL Filestream não suporta Snapshots, portanto não podemos utilizar o parâmetro -UseSqlSnapshot na execução do backup pelo comando Backup-SPSite.
- É recomendável a utilização do comando Backup-SPSite e Restore-SPSite para trazer um site collection em um web application com Filestream habilitado para um outro web application ou uma outra farm, sem Filestream para evitar problemas.
- No backup dos web applications vai ocorrer o seguinte evento no log: "Warning: [WSS_Content] A Remote Blob Storage provider is configured for this content database. To successfully recover your data on database restore, you may need to follow additional steps as indicated by your Remote Blob Storage provider." que pode ser desconsiderado nessa configuração.
Fontes:
Overview of RBS in SharePoint 2013
https://technet.microsoft.com/en-us/library/ee748649.aspx
Deciding to use RBS in SharePoint 2013
https://technet.microsoft.com/en-us/library/ff628583.aspx
Install and configure RBS with FILESTREAM in a SharePoint 2013 farm
https://technet.microsoft.com/en-us/library/ee748631.aspx
Habilitar e configurar FILESTREAM
https://msdn.microsoft.com/library/cc645923.aspx
View, restore, or delete items in the Recycle Bin of a SharePoint site
https://support.office.com/en-sg/article/View-restore-or-delete-items-in-the-Recycle-Bin-of-a-SharePoint-site-6df466b6-55f2-4898-8d6e-c0dff851a0be
Maintaining Remote BLOB Store
https://technet.microsoft.com/en-us/library/gg316773(v=sql.105).aspx
ASP.NET IIS Registration Tool (Aspnet_regiis.exe)
https://msdn.microsoft.com/en-us/library/k6h9cz8h(v=vs.140).aspx
Whitepaper Armazenamento de Filestream
http://download.microsoft.com/download/6/1/D/61D13F7E-76D9-4D0F-A1B9-39B66F47DDEB/FILESTREAMStorage.docx
Database Checkpoints (SQL Server)
https://msdn.microsoft.com/en-us/library/ms189573.aspx
Software boundaries and limits for SharePoint 2013
https://technet.microsoft.com/en-us/library/cc262787.aspx
Restore content databases in SharePoint 2013
https://technet.microsoft.com/en-us/library/ee748604.aspx
Migrar conteúdo para e do RBS no SharePoint 2013
https://technet.microsoft.com/pt-br/library/ff628254.aspx