“Timeouts” em acções/operações de CRM.

Por vezes em ambientes CRM muito “customizados” ou com elevada carga, podemos receber erros como estes em varias acções/operações:

Import timeout error.

Maximum request length exceeded.

The file could not be uploaded or Import failed

This is not a valid customization file. Please use an .XML file that was generated by exporting customizations.

Microsoft CRM Platform Error Report:
Error Description: Timeout expired
Error Details: Details on this error have not been provided by the platform.
Error Number: 0x80040E31

Stack Trace Info: [SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

The statement has been terminated.]

>MessageProcessor fail to process message 'Merge' for 'account'.

Estes erros podem ocorrer quando:

· O tempo de importação ou upgrade excede o OLEDBTimeout (valor máximo em segundos para cada pedido SQL).

· O tempo de importação ou upgrade excede o ExtendedTimeout (valor máximo em segundos para operações demoradas, tais como a importação de customizações).

· Quando se excede o valor definido em SQLConnectTimeout ou SQLCommandTimeout

· Quando se excede o valor definido em maxRequestLength, como o limite máximo de um pedido HTTP em ASP .NET (por exemplo, quando o tamanho do ficheiro Customization.xml é superior a 7.5MB).

· Quando a conexão atinge o valor definido no TcpTimedWaitDelay e é fechada.

Valores por defeito destes parâmetros para uma instalação por defeito de CRM são:

OLEDBTimeout = 30 segundos

ExtendedTimeout = 900000 milissegundos

executionTimeout = 300 segundos

maxRequestLength = 8192 Kilobytes

SQLConnectTimeout = -1 (desactivado)

SQLCommandTimeout = 30 segundos

            TcpTimedWaitDelay = 240 segundos

Localização e valores de teste sugeridos para ultrapassar estes erros:

Os valores do OLEDBTimeout e do ExtendedTimeout devem ser alterados/criados em:

                HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM

O valor de teste sugerido para o OLEDBTimeout é 86400, que equivale a 24 horas.

O valor de teste sugerido para o ExtendedTimeout é 1200000,que equivale a 20 minutos.

Pode encontrar o valor executionTimeout e o maxRequestLength, dentro do ficheiro Web.config existente na raiz do website de CRM e num segundo ficheiro com o mesmo nome na pasta MSCRMServices. Dentro dos ficheiros, basta localizar o elemento httpRuntime:

<httpRuntime executionTimeout="300" maxRequestLength="8192"/>

O valor de teste sugerido para o executionTimeout é 1200 que equivale a 15 minutos.

O valor de teste para o maxRequestLength deverá ser superior ao tamanho do ficheiro Customization.xml.

Referências:

A time-out occurs when you import large customization files into Microsoft Dynamics CRM

https://support.microsoft.com/default.aspx?scid=kb;EN-US;918609

httpRuntime Element (ASP.NET Settings Schema)

https://msdn.microsoft.com/en-us/library/e1f13641.aspx

Os valores doSQLConnectTimeout e o SQLCommandTimeout encontram-se na base de dados MSCRM_CONFIG,tabela DeploymentProperties, coluna IntColumn e podem ser actualizados com um simples update:

update DeploymentProperties set IntColumn = 600 where columnname = ‘SQLConnectTimeout

update DeploymentProperties set IntColumn = 600 where columnname = ‘SQLCommandTimeout

Os valores de teste para o SQLConnectTimeout e o SQLCommandTimeout, alteram consoante o cenário, mas um valor médio usado com regularidade no suporte é 600, que equivale a 10 minutos.

Por fim, gostava ainda de deixar uma nota sobre o TcpTimedWaitDelay, que embora seja definido ao nível do sistema operativo, pode causar também timeouts na aplicação de CRM.

Este parâmetro determina o tempo máximo que uma conexão espera no estado “TIME_WAIT”, até ser fechada. Este estado é também conhecido por “2MSL” e o seu valor deve rondar geralmente duas vezes o TTL do segmento de rede.

Este valor pode ser definido, através da criação de uma chave de registo tipo DWORD com o nome TcpTimedWaitDelay em:

 

                HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

O valor de teste sugerido para o TcpTimedWaitDelay é260 (decimal).

Referências:

Description of TCP/IP settings that you may have to adjust when SQL Server connection pooling is disabled

https://support.microsoft.com/kb/328476

TcpTimedWaitDelay

https://technet.microsoft.com/en-us/library/cc938217.aspx

 

 

 

José Alves

CRM Support Engineer PT