Partilhar via


Inicialização instantânea de arquivos de banco de dados

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

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

Por padrão, os arquivos de dados e de log são inicializados para substituir quaisquer dados existentes deixados no disco de arquivos excluídos anteriormente. Os arquivos de dados e de log são inicializados primeiro zerando os arquivos (preenchendo com zeros) quando você executa as seguintes operações:

  • Crie um banco de dados.
  • Adicione dados ou arquivos de log a um banco de dados existente.
  • Aumente o tamanho de um arquivo existente (incluindo operações de crescimento automático).
  • Restaure um banco de dados ou grupo de arquivos.

No SQL Server, a inicialização instantânea de arquivos permite uma execução mais rápida das operações de arquivo mencionadas anteriormente, uma vez que 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 SQL do Azure, a inicialização instantânea de arquivos está disponível apenas para arquivos de log de transações.

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

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, e Banco de Dados SQL do Azure e Instância Gerenciada 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 SQL do Azure, os eventos de crescimento automático do log de transações de até 64 MB podem se beneficiar da inicialização instantânea de arquivos. O incremento de tamanho de crescimento automático padrão para novos bancos de dados é de 64 MB. Os eventos de crescimento automático do arquivo de log de transações maiores que 64 MB não podem se beneficiar da inicialização instantânea do arquivo.

Ao contrário da inicialização instantânea de arquivos de dados, que é impedida se a criptografia de dados transparente (TDE) 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 de Negócios do Banco de Dados SQL do Azure e da Instância Gerenciada SQL do Azure, apenas para beneficiar o crescimento dos arquivos de log de transações.

  • A inicialização instantânea de arquivos não é configurável no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure.

Habilitar inicialização instantânea de arquivos

A inicialização instantânea de arquivos de dados só estará disponível se a conta de serviço ou o SID de serviço do serviço Mecanismo de Banco de Dados receber o SE_MANAGE_VOLUME_NAME privilégio. Os membros do grupo Administradores do Windows têm esse direito e podem concedê-lo a outros usuários adicionando-os à diretiva de segurança Executar tarefas de manutenção de volume . O SE_MANAGE_VOLUME_NAME privilégio não é necessário para a inicialização instantânea de arquivos de eventos de crescimento de até 64 MB no log de transações, que foi introduzido com o lançamento do SQL Server 2022 (16.x).

Recomendamos conceder o SE_MANAGE_VOLUME_NAME privilégio ao service SID do serviço 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 Usando SIDs de serviço para conceder permissões a serviços no SQL Server.

Importante

Alguns recursos, como a criptografia de dados transparente (TDE), podem impedir a inicialização instantânea de arquivos (IFI). No SQL Server 2022 (16.x) e versões posteriores, e no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure, a IFI é permitida no log de transações. Para obter mais informações, consulte Inicialização Instantânea de Arquivos 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 utilizar a instalação do prompt de comando, adicione o /SQLSVCINSTANTFILEINIT argumento ou marque a caixa Conceder privilégio para Executar Tarefa de Manutenção de Volume ao Serviço do Mecanismo de Banco de Dados do SQL Server no assistente de instalação.

Para conceder a uma conta ou a um SID de serviço a Perform volume maintenance tasks política de segurança:

  1. No computador onde os arquivos de dados serão criados, abra o aplicativo Diretiva de Segurança Local (secpol.msc).

  2. No painel esquerdo, expanda Diretivas 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 Diretiva 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.

    Aplica-se 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 posterior).

    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:

      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 informativa semelhante ao exemplo a seguir será registrada:

      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, utilize o valor de instant_file_initialization_enabled na vista de gerenciamento dinâmico sys.dm_server_services para identificar se a inicialização instantânea de arquivos está habilitada para a sua instância.

Considerações de segurança

Recomendamos habilitar a inicialização instantânea de arquivos, pois os benefícios podem superar o risco de segurança.

Quando você usa a inicialização instantânea de arquivos, o conteúdo do disco excluído é substituído somente quando novos dados são gravados nos arquivos. Por esse motivo, o conteúdo excluído é potencialmente acessível por uma entidade não autorizada, até que alguns outros dados sejam gravados nessa área específica do arquivo de dados.

Enquanto o arquivo de banco de dados é anexado à instância do SQL Server, esse risco de divulgação de informações é reduzido pela lista de controle de acesso discricionário (DACL) no arquivo. A DACL permite o acesso ao arquivo somente à conta de serviço do SQL Server, seu 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.

Existem considerações semelhantes quando:

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

  • Um arquivo é criado usando IFI. Um administrador do SQL Server poderia acessar o conteúdo da página bruta e ver o conteúdo excluído anteriormente.

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

Se o potencial para divulgar conteúdo excluído for uma preocupação, você deve tomar uma ou ambas as seguintes ações:

  • Certifique-se sempre de que todos os arquivos de dados desanexados e arquivos de backup tenham DACLs restritivas.

  • Desative a inicialização instantânea de arquivos para a instância do SQL Server. Para fazer isso, revogue SE_MANAGE_VOLUME_NAME da conta de serviço do Mecanismo de Banco de Dados e seu SID de serviço.

    Observação

    A desativação do IFI aumenta o tempo de crescimento dos arquivos de dados e afeta apenas os arquivos criados ou aumentados de tamanho após a revogação do privilégio.

SE_MANAGE_VOLUME_NAME privilégio

O SE_MANAGE_VOLUME_NAME privilégio pode ser atribuído em Ferramentas Administrativas do Windows, aplicação Diretiva 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 desempenho

O processo de inicialização do arquivo de banco de dados grava zeros nas novas regiões do arquivo sob inicialização. A duração desse processo depende do tamanho da parte do arquivo inicializada e do tempo de resposta e da capacidade do sistema de armazenamento. Se a inicialização demorar muito tempo, você poderá ver as seguintes mensagens 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 crescimento automático de um banco de dados e/ou arquivo de log de transações pode causar problemas de desempenho de consulta. Uma operação que requer o crescimento automático de um arquivo retém recursos como bloqueios ou travas durante a duração da operação de crescimento do arquivo. Talvez observe longas esperas nas travas para páginas de alocação. A operação que requer um longo crescimento automático mostra um tipo de espera de PREEMPTIVE_OS_WRITEFILEGATHER.