Práticas recomendadas de FILESTREAM
Este tópico fornece as práticas recomendadas indicadas para uso do FILESTREAM.
Configuração e manutenção física
Ao configurar volumes de armazenamento de FILESTREAM, considere as seguintes diretrizes:
Desative nomes de arquivos curtos em sistemas de computador FILESTREAM. Nomes de arquivos curtos precisam de significativamente mais tempo para serem criados. Para desabilitar nomes de arquivos curtos, use o utilitário fsutil do Windows.
Desfragmente regularmente os sistemas de computador FILESTREAM.
Use clusters de NTFS de 64 KB. Volumes compactados devem ser definidos como clusters de NTFS de 4 KB.
Desabilite a indexação em volumes de FILESTREAM e defina disablelastaccess. Para definir disablelastaccess, use o utilitário fsutil do Windows.
Desabilite o exame de antivírus de volumes de FILESTREAM quando ele for desnecessário. Se o exame de antivírus for necessário, evite diretivas de configuração que excluirão automaticamente os arquivos incorretos.
Configure e ajuste o nível de RAID para tolerância a falhas e para o desempenho exigido por um aplicativo.
Nível de RAID |
Desempenho de gravação |
Desempenho de leitura |
Tolerância a falhas |
Comentários |
RAID 5 |
Normal |
Normal |
Excelente |
O desempenho é melhor do que o de um disco ou JBOD; e menor do que o do RAID 0 ou do RAID 5 com distribuição. |
RAID 0 |
Excelente |
Excelente |
Nenhum |
|
RAID 5 + distribuição |
Excelente |
Excelente |
Excelente |
A opção mais cara. |
Design físico do banco de dados
Ao criar um banco de dados de FILESTREAM, considere as seguintes diretrizes:
As colunas de FILESTREAM devem ser acompanhadas por uma coluna correspondente uniqueidentifier ROWGUID. Esses tipos de tabelas também devem ser acompanhados por um índice exclusivo. Normalmente esse índice não é um índice clusterizado. Se a lógica corporativa do bancos de dados exigir um índice clusterizado, você precisará verificar se os valores armazenados no índice não são aleatórios. Valores aleatórios farão com que o índice seja reorganizado toda vez que uma linha for adicionada ou removida da tabela.
Por razões de desempenho, grupos de arquivos e contêineres de FILESTREAM devem residir em volumes diferentes do sistema operacional, do banco de dados do SQL Server, do log do SQL Server, do tempdb ou do arquivo de paginação.
Gerenciamento e diretivas de espaço não são diretamente suportados por FILESTREAM. No entanto, você pode gerenciar espaço e aplicar diretivas indiretamente atribuindo cada grupo de arquivos de FILESTREAM a um volume separado e usando os recursos do gerenciamento do volume.
Design e implementação de aplicativos
Ao criar e implementar aplicativos que usam FILESTREAM, considere as seguintes diretrizes:
Use NULL em vez de 0x representar uma coluna de FILESTREAM não inicializada. O valor 0x faz com que um arquivo seja criado; NULL não faz.
Evite operações de inserção e de exclusão em tabelas que contêm colunas de FILESTREAM não nulas. As operações de inserção e de exclusão podem modificar as tabelas de FILESTREAM que são usadas para coleta de lixo. Isso pode fazer com que o desempenho de um aplicativo seja reduzido ao longo do tempo.
Em aplicativos que usam replicação, use NEWSEQUENTIALID() em vez de NEWID(). NEWSEQUENTIALID() executa melhor que NEWID() para geração de GUID nesses aplicativos.
A API FILESTREAM foi projetada para acesso de streaming do Win32 aos dados. Evite usar Transact-SQL para ler ou gravar BLOBs (objetos binários grandes) de FILESTREAM que sejam maiores que 2 MB. Se você precisar ler ou gravar dados BLOB de Transact-SQL, verifique se todos os dados BLOB serão consumidos antes de você tentar abrir o BLOB de FILESTREAM no Win32. O não consumo de todos os dados Transact-SQL pode provocar falha em quaisquer operações sucessivas de abertura ou de fechamento de FILESTREAM.
Evite instruções Transact-SQL que atualizam, acrescentam ou precedem dados no BLOB de FILESTREAM. Isso faz com que os dados BLOB sejam colocados no spool no banco de dados tempdb e retornados em um novo arquivo físico.
Evite acrescentar atualizações de BLOBs pequenos a um BLOB de FILESTREAM. Cada acréscimo faz com que os arquivos FILESTREAM subjacentes sejam copiados. Se um aplicativo precisar acrescentar BLOBs pequenos, grave os BLOBs em uma coluna varbinary(max) e, em seguida, execute uma única operação de gravação no BLOB de FILESTREAM quando o número de BLOBs atingir um limite predeterminado.
Evite recuperar o comprimento de dados de muitos arquivos de BLOB em um aplicativo. Essa é uma operação demorada porque o tamanho não é armazenado no Mecanismo de Banco de Dados do SQL Server. Se você precisar determinar o comprimento de um arquivo de BLOB, use a função DATALENGTH() do Transact-SQL para determinar o tamanho do BLOB se ele estiver fechado. A função DATALENGTH() não abre o arquivo de BLOB para determinar seu tamanho.
Se um aplicativo usar o protocolo SMB1, os dados BLOB de FILESTREAM deverão ser lidos em múltiplos de 60 KB para otimizar o desempenho.