SQL Server: Uso de memória alto (7 GB) + Uso de arquivo de página alto (7 GB), mas uso de CPU (2% a 10%) [duplicado]

2

Olá a todos,

Estou executando o SQL Server com vários scripts que atualizam grandes quantidades de dados (milhões de registros em várias tabelas). No entanto, eu acho que há um vazamento de memória como o uso de RAM vai para 7,5 GB dos 8GB possíveis - isso é em um servidor Core 8. O arquivo de paginação vai para 7.28GB, pois acho que o SQL Server continua sobrecarregando a RAM que eu não acho que esteja usando.

Eu realmente preciso de conselhos sobre o que pode estar causando isso ou como posso solucionar isso!

Minha configuração

Microsoft Windows Server 2003
Standard 64-bit edition
Service Pack 2

SQL Server 2005
Microsoft SQL Server Management Studio  9.00.4035.00
Microsoft Analysis Services Client Tools 2005.090.4035.00
Operating System 5.2.3790

Aplicativo e uso do SQL Server

Estou usando o SQL Server com PHp, onde executo scripts e consultas via SQLCMD usando a função exec do PHP.

Quais podem ser as possíveis causas de todo esse uso de RAM e enorme arquivo de paginação?

Espero ter dado informações suficientes para tentar identificar o problema. Deixe-me saber se mais alguma coisa que eu deveria adicionar ou tentar descobrir.

Obrigado a todos

    
por Abs 19.11.2009 / 14:02

3 respostas

14

O gerenciamento de memória do Sql Server é um tópico muito amplo, mas há algumas coisas mencionadas aqui que devem ser abordadas.

Suponho que você esteja olhando para o Gerenciador de Tarefas para obter o que está se referindo como o Uso do Arquivo de Página. Isso NÃO é o tamanho do seu arquivo de página física ou a quantidade de espaço físico no arquivo de páginas usado - isso é chamado de commit charge , que é basicamente a quantidade potencial de espaço total no arquivo de páginas físicas que seria necessário para armazenar todos os VAS (VAS e memória física não são a mesma coisa) . Se você deseja ver o uso real do arquivo de paginação, consulte o contador de desempenho PagingFile:% Usage - ele será quase certamente uma porcentagem muito pequena. O tamanho total de sua taxa de confirmação (ou seja, o que o Gerenciador de Tarefas exibirá como Uso de PF) é basicamente a soma de todos os possíveis VAS (ou seja, todo o espaço no arquivo de páginas + memória física total no sistema).

O Sql Server NÃO substitui os recursos de gerenciamento de memória do SO - ele usa as mesmas APIs de memória fornecidas pelo Windows que qualquer aplicativo de modo de usuário (principalmente o VirtualAlloc família e a AWE family , que ainda é usado em sistemas de 64 bits ,. O Sql Server tem, de fato, um subsistema dedicado a gerenciar sua própria utilização de memória , no entanto este subsistema não faz nada de especial que não esteja disponível para qualquer aplicativo em modo de usuário em termos de solicitação, recebimento, confirmação, etc. de memória do SO subjacente.

Como outros já mencionaram, o Sql Server foi definitivamente projetado para usar o máximo de memória possível com base nas restrições definidas pelo sistema / usuário. No entanto, ela crescerá com base no uso da memória com base na utilização do sistema (ou seja, reservará uma quantidade relativamente pequena de memória na inicialização e continuará solicitando / reservando do sistema operacional conforme necessário). Ele também é projetado para (e bastante bom) responder à pressão de memória do SO conforme necessário, e também manter sua memória reservada até / a menos que o sistema operacional "solicite" de volta (para uma compreensão mais completa disso, consulte este blog e este blog e este blog ).

Se você quiser forçar o Sql Server a liberar / encolher seu espaço de memória atual, você pode simplesmente dizer a ele para fazer isso (assumindo que você está executando o Sql 2005 e superior) diminuindo o valor especificado no configuração do sistema" max server memory " e executando uma reconfiguração. Certamente há limitações para isso (isto é, essa configuração limita apenas o buffer pool, no entanto este é de longe o maior consumidor de memória). Isto é NÃO uma configuração de nível de conexão como aludido em outro lugar, é uma configuração de todo o sistema (Existem configurações de nível de conexão relacionadas à memória, no entanto nada que tenha algo a ver com essa questão) . Se você estiver executando o Sql 2000, precisará fazer o ajuste e reciclar o Sql Service - OBSERVE que no Sql 2000 o gerenciamento de memória era muito, muito diferente em quase todos os aspectos (e provavelmente exigiria uma questão / discussão separada).

Recomendamos que você leia um casal de blogs para obter uma compreensão de windows básicos e gerenciamento de memória do sql server , não deve demorar muito e vale a pena o conhecimento ao tentar entender o que está acontecendo em situações como esta.

    
por 19.11.2009 / 15:48
0

O SQLServer possui seu próprio gerenciamento de memória, ele substitui o gerenciamento de memória do sistema operacional. Você pode restringir a quantidade de memória, e há várias maneiras de fazer isso, mas provavelmente o mais fácil é inicializar o SqlServer Management Studio, clicar com o botão direito do mouse na instância sql, selecionar propriedades e ir para a guia memory. Você também pode fazer isso no nível da conexão, se estiver chamando o banco de dados do código gerenciado.

    
por 19.11.2009 / 14:15
0

O SQL Server é projetado para usar toda a memória do sistema disponível. Como slugster sugere, você pode restringir isso se você tiver outras coisas que precisam de RAM na caixa, mas uma regra geral é ser grato SQL está usando a RAM: -).

    
por 19.11.2009 / 14:25