Inicialização imediata de arquivos do banco de dados.

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Neste artigo, você aprenderá sobre a inicialização instantânea de arquivo (IFI) e como habilitá-la para acelerar o crescimento de seus arquivos de banco de dados do SQL Server.

Por padrão, arquivos de dados e de log são inicializados para substituir todos os dados existentes que foram deixados no disco por arquivos excluídos anteriormente. Os arquivos de dados e de log são inicializados pela primeira vez ao anular os arquivos (preenchimento com zeros) quando você executa as seguintes operações:

  • Criar um banco de dados.
  • Adicionar dados ou arquivos de log a um banco de dados existente.
  • Aumentar o tamanho de um arquivo existente (inclusive operações de aumento automático).
  • Restaurar um banco de dados ou grupo de arquivos.

No SQL Server, a Inicialização instantânea de arquivo permite uma execução mais rápida das operações de arquivo mencionadas anteriormente, já que ela recupera o espaço em disco usado sem preencher esse espaço com zeros. Em vez disso, o conteúdo do disco é substituído à medida que novos dados são gravados nos arquivos.

No Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, a inicialização instantânea de arquivo está disponível somente para os arquivos de logs de transações.

Inicialização instantânea de arquivo e o log de transações

Aplicável a: SQL Server 2022 (16.x) e versões posteriores, Banco de Dados SQL do Azure e Instância Gerenciada de SQL do Azure.

Historicamente, os arquivos de log de transações não podiam ser inicializados instantaneamente. No entanto, a partir do SQL Server 2022 (16.x) (todas as edições) e no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, os eventos de aumento automático do log de transações de até 64 MB podem se beneficiar da inicialização instantânea de arquivo. O incremento de tamanho de crescimento automático padrão para os novos bancos de dados é de 64 MB. Os eventos de aumento automático do arquivo de log de transações com mais de 64 MB não podem se beneficiar da inicialização instantânea de arquivo.

A Inicialização instantânea de arquivo é permitida para o crescimento do log de transações para bancos de dados que têm Transparent Data Encryption (TDE) habilitado, devido à natureza de como o arquivo de log de transações é expandido e ao fato de que o log de transações é gravado em uma forma serial.

  • A inicialização instantânea de arquivo está em uso para as camadas de uso geral e comercialmente críticas do Banco de Dados SQL do Azure e da Instância Gerenciada de SQL do Azure somente para beneficiar o aumento dos arquivos de logs de transações.
  • A inicialização instantânea de arquivo não é configurável no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure.

Habilitar a inicialização instantânea de arquivo

A inicialização instantânea de arquivo de arquivos de dados estará disponível somente se a conta de inicialização do serviço SQL Server receber SE_MANAGE_VOLUME_NAME. Os membros do grupo administrador do Windows têm esse direito e podem atribuí-lo a outros usuários adicionando-os à política de segurança Executar tarefas de manutenção de volume . O direito SE_MANAGE_VOLUME_NAME não é necessário para a inicialização instantânea de arquivo de eventos de aumento de até 64 MB no log de transações, que foi introduzido com a liberação do SQL Server 2022 (16.x).

Importante

O uso de alguns recursos, como a Transparent Data Encryption (TDE), pode impedir a inicialização instantânea de arquivo. A partir do SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure, a IFI é permitida no log de transações. Consulte Inicialização instantânea de arquivo e o log de transações para mais informações.

Observação

A partir do SQL Server 2016 (13.x), essa permissão pode ser concedida à conta de serviço no momento da instalação.

Se estiver usando a instalação do prompt de comando, adicione o argumento /SQLSVCINSTANTFILEINIT ou marque a caixa Conceder privilégio Realizar tarefa de manutenção de volume para o serviço de mecanismo de banco de dados do SQL Server no assistente de instalação.

Para conceder a permissão Perform volume maintenance tasks a uma conta:

  1. No computador em que o arquivo de dados será criado, abra o aplicativo Política de Segurança Local (secpol.msc).

  2. No painel esquerdo, expanda Políticas Locais e selecione Atribuição de Direitos de Usuário.

  3. No painel direito, clique duas vezes em Executar tarefas de manutenção de volume.

  4. Clique em Adicionar Usuário ou Grupo e adicione a conta que executa o serviço SQL Server.

  5. Selecione Aplicar e feche todas as caixas de diálogo Política de Segurança Local.

  6. Reinicie o serviço SQL Server.

  7. Verifique o log de erros do SQL Server na inicialização.

    Aplica-se a: SQL Server (a partir do SQL Server 2012 (11.x) SP4, o SQL Server 2014 (12.x) SP2 e o SQL Server 2016 (13.x) e versões posteriores).

    1. Se a conta de inicialização do serviço SQL Server tiver a concessão de SE_MANAGE_VOLUME_NAME, uma mensagem informativa semelhante à seguinte será registrada no log:

      Database Instant File Initialization: enabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    2. Se a conta de inicialização do serviço SQL Server não tiver a concessão de SE_MANAGE_VOLUME_NAME, uma mensagem informativa semelhante à seguinte será registrada no log:

      Database Instant File Initialization: disabled. For security and performance considerations see the topic 'Database Instant File Initialization' in SQL Server Books Online. This is an informational message only. No user action is required.

    Observação

    No SQL Server, use o valor de instant_file_initialization_enabled na exibição de gerenciamento dinâmico sys.dm_server_services para identificar se a inicialização instantânea de arquivos está habilitada para sua instância.

Considerações de segurança

É recomendável habilitar a inicialização instantânea de arquivo, pois os benefícios podem superar o risco à segurança.

Ao usar a inicialização instantânea de arquivo, o conteúdo excluído do disco será substituído apenas à medida que novos dados forem gravados nos arquivos. Por esse motivo, o conteúdo excluído poderá ser acessado por uma entidade de segurança não autorizada, até que outros dados sejam gravados naquela área específica do arquivo de dados.

Embora o arquivo de banco de dados esteja associado à instância do SQL Server, esse risco de divulgação de informações é reduzido pela DACL (lista de controle de acesso discricionário) no arquivo. Essa DACL permite acesso de arquivo somente à conta de serviço do SQL Server e ao administrador local. Porém, quando o arquivo é desassociado, ele pode ser acessado por um usuário ou serviço que não tenha SE_MANAGE_VOLUME_NAME.

Há considerações semelhantes quando:

  • É feito backup do banco de dados. Se o arquivo de backup não for protegido com uma DACL adequada, o conteúdo excluído poderá ficar disponível para um usuário ou um serviço não autorizado.

  • Um arquivo é expandido usando a IFI. Um administrador do SQL Server pode, potencialmente, acessar o conteúdo da página bruta e ver o conteúdo excluído anteriormente.

  • Os arquivos do banco de dados são hospedados em uma rede de área de armazenamento. Também é possível que a rede de área de armazenamento apresente sempre novas páginas como pré-inicializadas e fazer com que o sistema operacional reinicialize as páginas pode gerar uma sobrecarga desnecessária.

Se houver preocupação com a possível divulgação do conteúdo excluído, você deverá executar uma das seguintes ações ou ambas:

  • Sempre se certifique de que todos os arquivos de dados desassociados e arquivos de backup tenham DACL restritivas.

  • Desabilite a inicialização instantânea de arquivo para a instância do SQL Server. Para fazer isso, revogue SE_MANAGE_VOLUME_NAME da conta de inicialização do serviço SQL Server.

    Observação

    Desabilitar aumentará os tempos de alocação para arquivos de dados e afetará apenas os arquivos que forem criados ou aumentados em tamanho após o direito do usuário ser revogado.

Direito do usuário SE_MANAGE_VOLUME_NAME

O privilégio do usuário SE_MANAGE_VOLUME_NAME pode ser atribuído nas Ferramentas administrativas do Windows, miniaplicativo de Política de segurança local. Em Políticas Locais, selecione Atribuição de Direito do Usuário e modifique a propriedade Executar tarefas de manutenção de volume.

Considerações sobre o desempenho

O processo de inicialização do arquivo de banco de dados grava zeros nas novas regiões do arquivo em inicialização. A duração desse processo depende do tamanho da parte do arquivo que é inicializada e do tempo de resposta e da capacidade do sistema de armazenamento. Se a inicialização demorar muito tempo, as mensagens a seguir poderão ser registradas no log de erros do SQL Server e no log do aplicativo.

Msg 5144
Autogrow of file '%.*ls' in database '%.*ls' was cancelled by user or timed out after %d milliseconds. Use ALTER DATABASE to set a smaller FILEGROWTH value for this file or to explicitly set a new file size.
Msg 5145
Autogrow of file '%.*ls' in database '%.*ls' took %d milliseconds. Consider using ALTER DATABASE to set a smaller FILEGROWTH for this file.

Um longo aumento automático de um banco de dados e/ou de um arquivo de log de transações poderá causar problemas de desempenho de consulta. Isso ocorre porque uma operação que requer o aumento automático de um arquivo mantém recursos do tipo bloqueio ou trava durante a operação de aumento do arquivo. Podem ocorrer longas esperas nas travas das páginas de alocação. A operação que exige o longo aumento automático mostrará um tipo de espera igual a PREEMPTIVE_OS_WRITEFILEGATHER.