Editar: Por favor, note que a seção de comentários agora é irrelevante porque minha resposta original se foi.
Sua pergunta:
How can the Private Bytes of a process be significantly less than its effect on the system commit charge?
Isso pode ser respondido com uma citação direta de Mark Russinovich:
There are two types of process virtual memory that do count toward the commit limit: private and pagefile-backed.
Os bytes privados atribuídos ao processo podem ser (e geralmente são) menores do que o efeito dos processos na carga de confirmação do sistema, porque o processo também pode alocar memória virtual suportada pelo arquivo de paginação.
A memória virtual suportada pelo arquivo de paginação é difícil de atribuir a um processo específico porque é compartilhável entre processos. Não há um contador de desempenho específico do processo que possa informar quanto de memória virtual suportada pelo arquivo de paginação qualquer processo alocou ou está fazendo referência, mas ainda conta contra o limite de confirmação.
Este artigo é o artigo oficial sobre o assunto, e Nesse artigo, ele demonstra especificamente um caso em que um processo alocou toneladas de VMs suportadas pelo arquivo de paginação e, no entanto, os bytes particulares do processo permanecem muito baixos.
Ele também mostra como usar handle.exe
para detectar o tamanho da alocação de alças para objetos de seção. É assim que você pode detectar qual processo está tendo um efeito tão grande na taxa de commit.
Você mencionou que já examinou sqlservr.exe
com handle.exe
e que ele não tem alças abertas para uma quantidade significativa de objetos de seção que seriam responsáveis pela cobrança de confirmação que é liberada quando você mata sqlservr.exe
.
Coincidentemente, há também alocações de memória no espaço do kernel que são carregadas contra o limite de confirmação do sistema, como pools paginados e não paginados e memória bloqueada do driver, incluindo itens como drivers de balão de máquina virtual etc. Eu não acredito é relevante para este caso, mas eu não queria deixar de dizer.
O SQL Server é um produto enorme e complexo que consiste em vários processos diferentes que trabalham juntos no sistema para fornecer todos os serviços do SQL Server. Na verdade, o SQL Server tem seu próprio gerenciador de memória interna que pode fazer com que pareça atípico do ponto de vista das ferramentas projetadas para medir as alocações de memória virtual do Windows.
sqlservr.exe
não age sozinho. Há também
-
msmdsrv.exe
(Analysis Services) -
sqlwriter.exe
(gravador de VSS do SQL) -
sqlagent.exe
(agente SQL) -
fdlauncher.exe
(Iniciador do Daemon do Filtro de Texto Completo) -
fdhost.exe
(host de texto completo) -
ReportingServicesService.exe
-
SQLBrowser.exe
Quando eu mato sqlservr.exe
, sqlagent.exe
também morre automaticamente. Isso significa que o encargo de confirmação do sistema será reduzido pelo valor contribuído pelos processos ambos . Os outros processos relacionados ao SQL também podem liberar seções com backup do arquivo de paginação quando sqlservr.exe
é eliminado, mesmo que os processos permaneçam em execução. Tudo isso faria com que a taxa de commit atual do sistema caísse quando sqlservr.exe
fosse eliminado, mesmo que eles nunca fizessem parte dos bytes privados de sqlservr.exe
.