Pode não existir memória virtual suficiente quando tiver um grande número de bases de dados no SQL Server

Traduções de Artigos Traduções de Artigos
Artigo: 316749 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Poderá não existir suficiente espaço de endereçamento virtual disponível no processo do Microsoft SQL Server se todas as condições seguintes se verificarem quando estiver a executar SQL Server com as predefinições os valores de configuração:
  • O servidor tem 2 GB ou mais de RAM.
  • Existem um grande número de bases de dados do sistema (por exemplo, mais de 500).
  • A maioria das bases de dados é actualizada (por exemplo, as bases de dados não tem um estado "só de leitura").
  • Existem ligações suficiente utilizador activas em simultâneo a utilizar a maioria dos threads de trabalho do SQL Server 255.
SQL Server pode gera as seguintes mensagens de erro após o espaço de endereçamento virtual todo 2 GB é utilizado (ou depois do espaço de endereço virtual todo 3 GB é utilizado no SQL Server Enterprise Edition com o / 3 GB no ficheiro Boot.ini).

Mensagem 1

Erro: 17802, gravidade: 18, estado: 3
Não foi possível criar thread de eventos de servidor.

Mensagem 2

Do SQL Server não conseguiu expandir process_loginread thread.

Mensagem 3

Aviso: Limpar a cache do procedimento para libertar memória contígua.

Distribuição de memória intermédia: Roubado = 3454 livre = 2540 procedimentos = 138
Inram = 0 = sujos 1108 mantidas = 35
EU / O = 0, Latched = 0, outros = 214821
Números da memória intermédia: Enviado = 222096 destino = 222096 submetido a hash = 215964
InternalReservation = ExternalReservation 547 = 0 mínimo livre = 512
Cache de procedimento: TotalProcs = 8 TotalPages = 138 InUsePages = 138
Gestor de memória dinâmica: roubado = 3556
OS = geral 497 = 1706
Plano de consulta = Optimizer 755 = 0
Utilitários = ligação 9 = 1583
Recursos de objectos de memória global: = 1119 bloqueios = 163 XDES = 1 SQLCache = replicação 90 = 5 LockBytes = ServerGlobal 2 = 20
Gestor de memória de consulta: concede = 0 à espera = máximo 0 = 164370 disponíveis = 164370

Causa

Para cada base de dados actualizada, o SQL Server atribui, pelo menos, um bloco de 64 KB para utilizar na formatação registos antes que são escritas no disco. Esta atribuição ocorre quando o primeiro registo é gerado para a base de dados, como, por exemplo, durante uma instrução INSERT, UPDATE ou DELETE. Dependendo da actividade e o tamanho dos registos registo gerado, modificações subsequentes podem accionar a atribuição de atribuições adicionais de 64 KB. SQL Server 7.0 irá atribuir mais do que três blocos 54 KB. No SQL Server 2000, o número superior de atribuições para cada base de dados é uma função do número de processadores que SQL Server está configurado para utilizar.

Como contornar

Utilize o -g parâmetro de arranque para deixar adicional, não reservada memória de virtual disponível para estas bases de dados atribuições. O -g parâmetro documentado no Readme.txt do SQL Server 7.0 service pack e no SQL Server 2000 Books Online. O "Mais informação" deste artigo inclui as definições que a Microsoft recomenda que utilize para determinar o valor adequado para esta definição.

Mais Informação

Num computador com 2 GB ou mais de RAM, SQL Server reserva todos os mas 256 MB (SQL Server 7.0) ou 384 MB (SQL Server 2000) de espaço de endereçamento virtual durante o processo de arranque para utilização por conjunto de memória intermédia. Além disso, para armazenar a cache de dados e de procedimento, SQL Server utiliza a memória do conjunto de memória intermédia para a maior parte dos outros pedidos de memória de processos do SQL Server que são menores do que 8 KB. A memória não reservada restante destina com outras atribuições que não pode ser servido do conjunto de memória intermédia. Estas atribuições incluem, mas não estão limitadas a:
  • O bloco de ambiente de thread associado para os threads do SQL Server cria e pilhas. Depois do SQL Server cria todos os threads de trabalho 255, isto é aproximadamente 140 MB.
  • Atribuições que são efectuadas por outras DLL ou processos que estiverem a executar no espaço de endereço do SQL Server (que varia de sistema), tal como:
    • Fornecedores de OLE DB de todos os servidores ligados.
    • Objectos COM que são carregados através da utilização do sistema sp_OA procedimentos armazenados ou expandido procedimentos armazenados.
  • Procedimentos armazenados de quaisquer imagens (.exe ou .dll) que são carregadas no espaço de endereço, que normalmente utilizar 20 a 25 MB, mas possivelmente mais se estiver a utilizar servidores ligados, sp_OA , ou expandidas.
  • A pilha de processo e quaisquer outras pilhas do SQL Server pode criar. Durante o processo de arranque, normalmente é 10 MB, mas poderá ser mais se estiver a utilizar servidores ligados, sp_OA ou procedimentos armazenados estendidos.
  • Atribuições de processos de SQL Server são superiores a 8 KB (tais como os necessários para planos de consulta volumosos, enviar e receber memórias intermédias se a opção de configuração do tamanho do pacote de rede estiver próxima 8 KB e assim sucessivamente. Para ver este número, procure o valor Reservada do sistema operativo que é comunicado no DBCC MEMORYSTATUS e que é comunicado como número de páginas de 8 KB. Valores normais para esta são 5 MB.
  • Uma matriz para controlar informações de estado de cada memória intermédia que é no conjunto de memória intermédia. Isto está normalmente cerca de 20 MB, quando o SQL Server está a ser executado com endereço baseadas em janelas (AWE) activada, caso em que pode ser significativamente maior.
Em sistemas que tenham um grande número de bases de dados, as atribuições de 64 KB são necessárias para formatação de registo podem ocupar todas a restante memória virtual. Nessa altura, atribuições subsequentes podem falhar, resultando em um ou mais dos erros listados em "Sintomas" deste artigo.

Utilizando o -g parâmetro de arranque, pode indicar SQL Server para deixar mais memória virtual disponível para que a combinação destas atribuições relacionadas no registo e outras atribuições normais não é executado sem espaço de endereçamento virtual.

A seguinte tabela lista alguns sugeriram ponto de partida para a -g valor conforme o número de bases de dados e a versão do servidor:
Reduzir esta tabelaExpandir esta tabela
Bases de dadosSQL Server 7.0SQL Server 2000
250-g134 N/A
500-g185 N/A
750-g237 N/A
1000-g288 -g288
1250-g340 -g340
1500-g392 -g392
Esta tabela foi calculada utilizando os valores típicos que estão listados e também são baseada no pressuposto de que não actividade do servidor ligado, sp_OA ou procedimentos armazenados estendidos estão a ser utilizados. Baseia-se também no pressuposto de que não estiver a utilizar o AWE e esse SQL Profiler não está em utilização. Qualquer uma destas condições pode requerer que aumente o valor do -g .

A Microsoft recomenda que efectue grave consideração antes de executar um servidor com bases de dados mais do que isto porque a sobrecarga necessária para ter este número de bases de dados no sistema está a demorar uma grande quantidade de memória virtual fora do conjunto de memória intermédia, que poderá resultar num desempenho fraco do sistema como um todo.

Além disso, criar muitas bases de dados tem o efeito mais significativo de memória virtual. Também existem atribuições de memória por base de dados que poderão provocar uma condição de falta de memória de conjunto de memória intermédia. Por exemplo, poderá receber a seguinte mensagem de erro:
Erro: 701, gravidade: 17, estado: 123.
Existe memória de sistema insuficientes para executar esta consulta.
Este tipo de condição de memória esgotada possível mais comuns no SQL Server 2005 que controla o SQL Server 2005 metadados por base de dados mais do que versões anteriores do SQL Server.

Quando registar a utilização de índice remissivo utilizando o procedimento sys.dm_db_index_usage_stats armazenados, a operação pode requerem uma quantidade significativa de memória. A operação requer uma quantidade significativa de memória se cada base de dados tiver vários índices.

Propriedades

Artigo: 316749 - Última revisão: 28 de fevereiro de 2007 - Revisão: 11.1
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Standard Edition
Palavras-chave: 
kbmt kberrmsg kbtshoot kbnofix kbprb KB316749 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 316749

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com