Considerações de desempenho para NTFS transacional
O NTFS transacional (TxF) foi cuidadosamente projetado para desempenho e normalmente terá um desempenho melhor do que as alternativas transacionais de uso geral em cenários semelhantes. No entanto, as transações do sistema de arquivos têm mais sobrecarga do que as operações não transacionadas, e é de se esperar alguma redução no desempenho de E/S em comparação com a E/S não transacionada. Os aplicativos críticos de desempenho devem executar um ciclo de qualificação de adoção de tecnologia, avaliando o impacto no desempenho das operações do sistema de arquivos transacionado.
Visão geral das operações TxF
O TxF usa desfazer log para registrar as alterações necessárias para colocar o sistema de arquivos de volta em um estado consistente, também conhecido como reversão, caso ocorra uma interrupção da transação. Esse log de desfazer gera E/S adicionais e é a fonte da sobrecarga de desempenho TxF em comparação com operações de sistema de arquivos não transacionais.
Um resumo de alto nível de como o TxF opera é o seguinte:
- À medida que uma transação progride, o TxF grava desfaz registros em seu arquivo de log para cada modificação que faz no sistema de arquivos. Se ocorrer um abortamento, esses registros de desfazer serão analisados para colocar o sistema de arquivos de volta no estado em que estava antes do início da transação.
- Uma alteração de metadados registro de desfazer descreve uma alteração apenas nos metadados do sistema de arquivos. Alguns exemplos disso são movimentos, renomeações, acréscimos e alterações de atributos. Para desfazer registros de alteração de metadados, todas as informações necessárias para desfazer a alteração estão no registro e armazenadas no arquivo de log.
- Uma substituição de registro de desfazer descreve uma substituição de uma parte de um arquivo. Quando ocorre uma substituição de arquivo, o conteúdo original do arquivo é armazenado em um arquivo de desfazer especial em um diretório oculto e o registro de desfazer de substituição aponta para esse arquivo. Quando as atualizações de arquivo são eventualmente liberadas do cache para o disco, o conteúdo do arquivo de desfazer também deve ser liberado, de modo que uma substituição de arquivo transacionado pode gerar até duas operações de E/S aleatórias extras: uma para ler os dados antigos e outra para gravá-los no arquivo de desfazer. Essas operações de E/S extras são um custo de desempenho do TxF.
- Quando ocorre uma confirmação, o TxF primeiro libera todas as informações de desfazer, depois libera as alterações reais do arquivo e, em seguida, grava e libera um registro de confirmação. Se não houver arquivos de desfazer para liberar, a única sobrecarga TxF adicional em relação à E/S não transacionada é a própria liberação de log. No entanto, as liberações de log resultam em gravações sequenciais grandes e eficientes, de modo que o custo de desempenho é mínimo.
- TxF é otimizado para confirmação. Espera-se que a maioria das transações seja bem-sucedida e não precise reverter, portanto, espera-se que todos os registros de desfazer de uma transação fiquem sem uso. Do ponto de vista do desempenho, as operações de confirmação TxF são rápidas e as reversões consomem muitos recursos.
- A reversão consome mais recursos do que a confirmação. Durante a reversão, todas as alterações feitas na transação devem ser desfeitas. Em geral, a duração da reversão pode ser aproximadamente a mesma que levou para fazer as alterações originalmente. Por exemplo, se levasse 1 segundo para fazer todas as alterações, poderia levar cerca de 1 segundo para desfazê-las. Para transações muito longas, a reversão pode criar impactos adicionais no desempenho. Por exemplo, o tempo de inicialização do sistema pode ser atrasado se o sistema precisar reverter automaticamente uma transação no caso de o sistema parar de responder e executar uma reinicialização não programada.
As conclusões resumidas sobre o desempenho que podem ser retiradas da lista anterior são as seguintes:
- O custo de desempenho do TxF para transações envolvendo substituições de arquivos pode ser significativo.
- O custo de desempenho do TxF para transações que envolvem apenas operações de metadados pode ser relativamente baixo, desde que grandes transações sejam usadas. Uma transação grande é quando há muitos registros de desfazer para cada registro de confirmação.
Recomendações para o melhor desempenho
Amortize as despesas gerais do TxF em transações maiores. Por exemplo, se você tiver N conjuntos de alterações para fazer onde cada alteração tem etapas M e tiver a opção de fazer isso como N transações de M etapas cada ou fazer tudo isso como uma única transação com M*N etapas, esta última opção seria mais eficiente.
Considere o possível impacto na inicialização de transações muito grandes. Como dito anteriormente, a reversão pode ser lenta e atrasará o tempo de inicialização se o sistema precisar executar reversões automáticas como tempo de inicialização. Quanto maior a transação, maior o atraso.
Mantenha as transações principalmente em operações de metadados. É para isso que o TxF é otimizado e, em geral, o desempenho é aproximadamente o mesmo que E/S de arquivos não transacionados para grandes transações de metadados. Exemplos de funções TxF de metadados eficientes são MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransactede gravações anexadas (chamadas para a função WriteFile quando o ponteiro do arquivo como no final do arquivo ou EOF). Um exemplo de operações sem metadados que consomem muitos recursos são chamadas para a função WriteFile quando o ponteiro do arquivo não está no EOF.
Resumo das expectativas de desempenho do TxF
Para atualizações in-loco, as substituições em uma seção de um arquivo serão muito mais lentas do que a E/S de arquivo não transacionada, enquanto o desempenho TxF para operações de metadados do sistema de arquivos (por exemplo, criar, mover e acrescentar) é comparável à E/S de arquivo não transacionada para transações grandes.