Compartilhar via


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 IFI (inicialização instantânea de arquivo) e como habilitá-la para acelerar o crescimento dos 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 antigo é 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 apenas 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.

Ao contrário da inicialização instantânea de arquivos para arquivos de dados, que é impedida se a TDE (transparent Data Encryption) estiver habilitada, a inicialização instantânea de arquivos é permitida para o crescimento do log de transações em bancos de dados que têm o TDE habilitado, devido à forma como o arquivo de log de transações cresce e ao fato de que o log de transações é gravado de forma serial.

  • A inicialização instantânea de arquivos está em uso para as camadas de Uso Geral e Crítica para Negócios do Banco de Dados SQL do Azure e da Instância Gerenciada de Banco de Dados SQL do Azure, somente para beneficiar o crescimento dos arquivos de log 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 arquivos de dados só estará disponível se a conta de serviço ou o SID do serviço do Mecanismo de Banco de Dados tiver o privilégio SE_MANAGE_VOLUME_NAME concedido. Os membros do grupo de Administradores do Windows têm este direito e podem conceder a outros usuários ao adicioná-los à política de segurança Executar Tarefas de Manutenção de Volume. O SE_MANAGE_VOLUME_NAME privilégio não é necessário para inicialização instantânea de arquivos de eventos de crescimento de até 64 MB no log de transações, que foi introduzido com a versão do SQL Server 2022 (16.x).

Recomendamos que você conceda o privilégio SE_MANAGE_VOLUME_NAME à SID de serviço do serviço do Mecanismo de Banco de Dados. Isso garante que a concessão permaneça mesmo se você alterar a conta de serviço do serviço Mecanismo de Banco de Dados. Para obter mais informações, consulte Como usar SIDs de serviço para conceder permissões a serviços no SQL Server.

Importante

O uso de alguns recursos, como o Transparent Data Encryption (TDE), pode impedir a Inicialização Instantânea de Arquivo (IFI). No SQL Server 2022 (16.x) e versões posteriores 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. Para obter mais informações, consulte inicialização instantânea do arquivo e o log de transações.

No SQL Server 2016 (13.x) e versões posteriores, essa permissão pode ser concedida ao SID (Identificador de Segurança do Serviço do Mecanismo de Banco de Dados) no momento da instalação, durante a instalação.

Se você usar 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 política de segurança Perform volume maintenance tasks a uma conta ou SID de serviço:

  1. No computador em que os arquivos de dados serão criados, 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. Selecione Adicionar Usuário ou Grupo e adicione a conta de serviço do Mecanismo de Banco de Dados ou seu SID de serviço.

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

  6. Reinicie o serviço Mecanismo de Banco de Dados.

  7. Verifique o log de erros do Mecanismo de Banco de Dados na inicialização.

    Aplicável a: SQL Server (a partir do SQL Server 2012 (11.x) SP4, SQL Server 2014 (12.x) SP2 e SQL Server 2016 (13.x) e versões posteriores).

    1. Se a conta de serviço do Mecanismo de Banco de Dados ou seu SID de serviço receber o SE_MANAGE_VOLUME_NAME privilégio, uma mensagem informativa semelhante ao exemplo a seguir será registrada em 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 serviço do Mecanismo de Banco de Dados ou seu SID de serviço não tiver recebido o SE_MANAGE_VOLUME_NAME privilégio, uma mensagem de informação semelhante ao exemplo a seguir 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. Devido a isso, o conteúdo excluído torna-se potencialmente acessível 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. A DACL permite o acesso de arquivos somente à conta de serviço do SQL Server, ao SID de serviço e ao administrador local. No entanto, quando o arquivo é desanexado, ele é potencialmente acessível por um usuário ou serviço que não tem o SE_MANAGE_VOLUME_NAME privilégio.

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 da área de armazenamento. Também é possível que a rede da área de armazenamento apresente sempre as novas páginas como pré-inicializadas. Nesse caso, fazer com que o sistema operacional reinicialize as páginas poderá 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 o privilégio SE_MANAGE_VOLUME_NAME da conta de serviço do Mecanismo de Banco de Dados e de sua SID de serviço.

    Observação

    Desabilitar a IFI aumenta o tempo de crescimento para arquivos de dados e afeta apenas os arquivos que são criados ou aumentados de tamanho depois que o privilégio é revogado.

Privilégio SE_MANAGE_VOLUME_NAME

O SE_MANAGE_VOLUME_NAME privilégio pode ser atribuído nas Ferramentas Administrativas do Windows, no applet da 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 de arquivo de banco de dados grava zeros nas novas regiões do arquivo em inicialização. A duração do processo depende do tamanho da parte do arquivo que é inicializada, 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. Uma operação que exija o aumento automático de um arquivo mantém recursos como bloqueios ou travas 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.