Desenvolvimento

3 jun, 2013

Sobrecarga do registro após a instalação do SQL Server 2012 SP1

Publicidade

A instalação do SQL Server 2012 tem o potencial de deixar um processo do instalador msiexec.exe rodando depois que a instalação terminar, conforme descrito no site da Microsoft em Instalador do Windows inicializa repetidamente depois que você instala o SQL Server 2012 SP1:

Depois que você instalar o SQL Server 2012 no seu computador, o processo do Instalador do Windows (Msiexec.exe) é reiniciado repetidas vezes para reparar alguns componentes. Além disso, os seguintes eventos são gravados nos logs do aplicativo:
Source: MsiInstaller
Description: Detection of product ‘{A7037EB2-F953-4B12-B843-195F4D988DA1}’, feature ‘SQL_Tools_Ans’, Component ‘{0CECE655-2A0F-4593-AF4B-EFC31D622982}’ failed. The resource”does not exist.

EventId: 1001
Source: MsiInstaller
Description: Detection of product ‘{A7037EB2-F953-4B12-B843-195F4D988DA1}’, feature ‘SQL_Tools_Ans’ failed during request for component ‘{6E985C15-8B6D-413D-B456-4F624D9C11C2}’

Quando isso acontece, você experimenta um alto uso da CPU.
Causa

Isso acontece porque os componentes do SQL Server 2012 faziam referência a componentes incorretos. Esse comportamento faz com que a criação de uma imagem nativa falhe em determinados componentes. Portanto uma operação de reparos é iniciada no pacote do instalador.

Mas esse problema possui um efeito colateral muito mais sinistro: causa o crescimento da célula HKLM\Software do registro. Exceto pela célula  do sistema, todas as outras estão restritas a um máximo de 2GB, veja em Espaço de Armazenamento de Registro:

Visualizações dos arquivos do registro são mapeados na memória de paginação… O tamanho máximo da célula do registro é de 2GB, exceto pela célula do sistema.

Enquanto o processo msiexec mal comportado incha a célula do registro de Software, o seu sistema pode se aproximar do tamanho máximo permitido e, mesmo antes do limite ser alcançado, a enorme célula irá consumir mais e mais do precioso recurso de memória de paginação do kernel. O sistema pode começar a exibir um comportamento errático, reclamando de pouca memória, fechando conexões e apresentando outros sintomas. Como um exemplo do quão instável pode ser o comportamento apresentado, leia o artigo Por que o tamanho do registro pode causar problemas com a sua instalação em modo Cluster ou Failover do SQL 2012.

O grande problema com o inchaço do registro é que ele acontece logo após a instalação do SQL Server 2012 SP1 e é bastante difícil, mesmo para usuários experientes, relacionar as causas do comportamento instável do servidor com a instalação do SP1. Se você não tem certeza se esse problema está afetando você, execute o %SystemRoot%\system32\config e cheque o tamanho do arquivo SOFTWARE, que é o arquivo de armazenamento da célula do registro. Se estiver realmente com um inchaço na célula, visite o artigo KB2498915: Como comprimir células de registro “Inchadas”:

1) Inicialize o sistema a partir do disco WinPE.
2) Abra o regedit depois do boot com o WinPe, carregue a célula inchada no HLKM (ex. HKLM\Célula_Inchada).
3) Uma vez que a célula inchada foi carregada, exporte a célula carregada como um arquivo do tipo “Registry Hive” com um nome único (ex. %windir%\system32\config\celulacomprimida)
a) Você pode utilizar o comando dir no terminal para checar o tamanho antigo e novo da célula de registro.
4) Descarregue a célula de registro do regedit. (Se você receber um erro aqui, feche o editor de registro, abra o editor de registro novamente e tente mais uma vez).
5) Renomeie as células e então inicialize com as células comprimidas.
ex.
c:\windows\system32\config\ren software software.velho
c:\windows\system32\config\ren celulacomprimida software

Atualização: No momento da escrita deste artigo, a página de download do SQL Server SP1 recomenda a instalação da correção KB2793634. Pessoas muito gentis que lidaram com o problema também deram mais detalhes sobre os sintomas e as soluções. Me disseram que se o registro já estiver inchado por conta do problema com o msiexec, então seguir o KB2793634 não será o suficiente. A correção apenas previne que o msiexec reinicie automaticamente, mas não comprime o registro. As seguintes chaves de registro já podem estar enormes:

  • HKLM\Software\Wow6432Node\Microsoft\.NETFramework\v2.0.50.27\NGENService
  • HKLM\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\NGENService
  • HKLM\Software\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\NGENService
  • HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\NGENService

Sintomas de inchaço da célula do registro incluem os itens abaixo, mas não se limitam apenas a eles:

  • O serviço de cluster está quebrando e a seguinte mensagem aparece no log de eventos: “The Group Policy Client service failed the logon. Insufficient system resources exist to complete the requested service”.
  • É impossível fazer instalações adicionais ou você consegue fazer isso apenas logo depois de o servidor realizar o boot.
  • Usuários com contas no domínio não conseguem logar na máquina. Quando conseguem, um perfil temporário é carregado.
  • No gerenciador de serviços, os perfis e recursos não estão mais listados.
  • Muitas ações não são realizadas, e a seguinte mensagem de erro aparece: “Insufficient system resources exist to complete the requested service”.

A ação recomendada é abrir um chamado de suporte e contatar o serviço de suporte ao consumidor. Se você for corajoso ou não puder pagar contratos de suporte e tiver certo de que o problema que está tendo é por conta do SQL Server 2012 SP1, pode tentar seguir as instruções abaixo por sua própria conta e risco:

  • Instale a correção KB2793634 através do procedimento descrito no artigo.
  • A partir do prompt cmd, execute %SystemRoot%\Microsoft.Net\Framework\v4.0.30319\ngen.exe executequeueditems e %SystemRoot%\Microsoft.Net\Framework64\v4.0.30319\ngen.exe executequeueditems.
  • Comprima a célula de registro com o disco WinPE ou a partir do modo de recuperação (pressione F8 na tela de boot). Note que o sistema com o Windows no qual você irá comprimir a chave de registro deve ter a correção KB973817 instalada: o utilitário Reg.exe não comprime uma chave de registro quando o utilitário salva a chave de registro em um arquivo de célula que está executando Windows Server 2008, Windows Vista, Windows 7 ou Windows Server 2008. R2.
  • Depois que o procedimento de compressão estiver completo, a partir do prompt de comando, execute SCF /SCANNOW. Veja o post KB929833 para mais detalhes.

Nos casos em que o inchaço do registro impede que você instale inclusive a correção do SP1, é possível tentar aumentar o tamanho da célula para 4GB. Veja o link RegistrySizeLimit para isso. Editar essa chave de registro específica para um valor incorreto pode resultar em uma tela azul durante o boot por conta de um kernel panic BAD_SYSTEM_CONFIG_INFO a cada boot. Use por sua conta e risco. O valor correto é 0xFFFFFFFF.

Se você tiver uma instância RTM do SQL Server 2012 e planejar uma upgrade para o SP1 é recomendado criar uma instalação do tipo slipstream SP1+CU2 e então aplicar o patch. Veja a página Instalação de Atualização no SQL Server 2012. No SQL Server 2012, a funcionalidade de instalação slipstream foi renomeada:

O recurso de atualização do produto substituiu a funcionalidade Slipstream que estava disponível no SQL Server 2008 PCU1. Portanto, os parâmetros de linha de comando, /PCUSource e /CUSource, associados à funcionalidade Slipstream não devem mais ser usados. Os parâmetros continuarão a funcionar, mas poderão ser removidos em lançamentos futuros do SQL Sever. O parâmetro /UpdateSource combina a funcionalidades dos dois parâmetros Slipstream anteriores.

Sinceramente, acho que o nome “slipstream” era menos ambíguo do que “atualização de produto”, no entanto, quem sou eu para reclamar…

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://rusanu.com/2013/02/15/registry-bloat-after-sql-server-2012-sp1-installation/