Entendendo o MS DTC

Posted: 27/06/2011 by murilomiranda in Cluster

O serviço MS DTC (Distributed Transaction Coordinator) é um componente das versões mais recentes do Windows, que é responsável por coordenar transações que abrangem vários gestores de recursos, como bancos de dados, filas de mensagens e sistemas de arquivos.

O MS DTC foi incluído a partir do Windows 2000 e também foi disponibilizado para Windows NT 4.0. Este recurso desempenha a função de coordenador de transações de arquiteturas COM e .NET. Na terminologia do MS DTC, o diretor (director) é chamado de gerenciador de transações (transaction manager).

No Windows Server 2008, o componente MS DTC suporta clusters ativo/ativo em que o recurso MS DTC em cluster (clustered MS DTC) coordena transações distribuídas em um grupo do cluster Windows.

Existem duas categorias de clusters para Windows Server: ativo/ativo e ativo/passivo.
No ativo/passivo, o nó passivo é utilizado apenas quando o ativo falha, já o ativo/ativo todos os nós são usados.

As últimas versões do Windows Server, como Windows Server 2003 e Windows 2000 Server, suportam o MS DTC em um cluster activo/passivo. Porém, existem limitações. Por suportar apenas um recurso MS DTC por cluster, alguns pontos negativos passaram a transparecer:

  • Podem ocorrer problemas de isolamento, pois aplicativos diferentes compartilham a mesma DTC para a coordenação.
    Como apenas um recurso MS DTC serve todo o cluster, se alguma coisa der errado com o cluster DTC, por conta de uma falha aplicacional, todas as aplicações com transações coordenadas através do cluster MS DTC podem ser afetadas.
  • O desempenho pode ser degradado, por conta da “falta de habilidade” de algumas aplicações em reagir a situações de failover.
    Por exemplo, quando um cluster MS DTC deve coordenar uma transação de uma aplicação que não está sendo executada no mesmo nó, pode existir alguma latência na mensagem de coordenação, o que pode gerar um timeout aplicacional.

No Windows Server 2008, já é possível a criação de vários DTCs em um failover cluster, seguindo os seguintes passos:

  1. Criando múltiplos cluster groups no failover cluster.
  2. Criando um recurso MS DTC para cada um destes grupos.

Para se aproveitar ao máximo a potência de processamento do cluster, deve-se criar tantos grupos quantos nós existentes no cluster, e distribuir estes grupos pelos nós disponíveis. Segue-se uma lista de benefícios desta abordagem:

  • A falha de uma aplicação em cluster, não irá necessariamente prejudicar as outras aplicações.
    No Windows Server 2008 existe a possibilidade de se criar um recurso MS DTC por cada grupo.
  • Não existem limitações de configuração para recursos MS DTC em cluster. Como é possível ter uma instância DTC em cada nó, alguns problemas, como a instalação de aplicações COM+ em e sua configuração em cluster foram resolvidos.
  • Como cada grupo pode ter seu próprio recurso MS DTC, as latências antes existentes praticamente deixam de existir, por este motivo é possível que se note uma melhoria de performance aplicacional.

E o que é melhor para o SQL Server? A Microsoft sempre recomendou que não houvessem “misturas” no resource group do SQL Server, especialmente os que alteram as dependências. Porem, o sugerido é criar um recurso DTC por cada instância de SQL Server existente no cluster, adicionar este recurso no grupo da sua respectiva instância e apontar o log para um disco disponível no grupo.
Não é nem um pouco recomendável que o SQL Server ou o SQL Server Agent sejam dependentes do DTC, pois qualquer alteração a nível do DTC, como alterações de propriedades ou até instalações de hotfixes, irá fazer com que os serviços citados sejam reiniciados. Como esta configuração o SQL Server terá um MS DTC dedicado ajudando em transações, que possam gerar bottlenecks, entre servidores .

Alguns fatos:

  • Se não existirem recursos MS DTC no cluster, o SQL Server irá iniciar a conexão pela instância local do MS DTC.
  • Se existe um recurso MS DTC no cluster, então a primeira instância a ser usada será a padrão, utilizada pelas instâncias SQL Server. A instância MS DTC padrão poderá ser alterada através da console “Component Services Management”.
  • Se existe um MS DTC no grupo do SQL Server, este será usado.

Criando um recurso MS DTC dentro de um grupo SQL Server:

  1. No Failover Cluster Management, clique no respectivo resource group com o botão direito do mouse.
  2. Clique em Add resource->Other resources->Distributed Transaction Coordinator.
  3. Crie as dependencias do recurso MS DTC (network name e disco).
  4. Clique com o botão direito sobre o recurso MS DTC e em seguida clique em “Bring Online

Código para testar um transação distribuída (deverá retornar a mensagem “Command(s) completed successfully.”):

Begin Distributed transaction;
Commit Transaction;

 

Guia com a resolução de alguns problemas relacionados com o MS DTC:
http://www.sqlwebpedia.com/content/msdtc-troubleshooting

Fontes:

Comments
  1. Marcio says:

    Excelente iniciativa,,,,ótimo post,,,parabéns,,
    Só falta uma bandeira ai do nosso Vascão :)

    Abração.

    • murilomiranda says:

      Obrigado Marcio!!
      Qdo o vasco vencer a Libertadores no ano que vem vou ter que dedicar um post ao título :D

      Abraço!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>