AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-140598

Martin Karouš's questions

Martin Hope
Martin Karouš
Asked: 2024-07-30 20:46:01 +0800 CST

Armazenamento de consultas quebrado

  • 13

Temos o SQL Server 2022 Enterprise (16.0.4131.2) na VM do Windows 2022 (8 núcleos de vCPU) e há um problema com o Query Store em um dos bancos de dados.

Abaixo está a sequência de etapas que posso seguir para reproduzir o problema em um banco de dados específico e as observações que fiz sobre ele:

1 - O servidor está em estado inativo com apenas uma pequena carga gerada pelo usuário e utilização insignificante da CPU como ponto de partida.

insira a descrição da imagem aqui

2 - O Query Store está desligado e vazio para o banco de dados problemático, conforme mostrado na consulta abaixo.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

3 - Quando mudo o Query Store para o modo READ_WRITE, tudo fica perfeitamente bem por cerca de 10 a 15 minutos. No entanto, após esse período, a utilização da CPU do servidor aumenta repentinamente para 15-20%. Veja a captura de tela do Activity Monitor abaixo.

insira a descrição da imagem aqui

As estatísticas de espera mostram um grande aumento nas esperas SOS_SCHEDULLER_YELD e PREEMPTIVE_OS_QUERYREGISTRY - elas saltam para os principais tipos de espera do servidor nesse período.

A utilização da CPU gerada parece ser gerada por um processo interno em segundo plano (SPID < 51) relacionado a uma atividade do Service Broker no banco de dados do usuário problemático. O recurso Service Broker não está ativado no próprio banco de dados.

insira a descrição da imagem aqui

4 - A alta utilização da CPU, as esperas mencionadas acima e a atividade SPID mencionada acima são apresentadas continuamente até que o Query Store no banco de dados seja desligado.

Não há sinais de qualquer "auto-recuperação" potencial, se eu mantiver o Query Store ativado. Uma vez desligado, a utilização da CPU diminui, as esperas desaparecem e o SPID para de gerar a carga e fica "hibernando". Mudar o Query Store para o modo READ_ONLY não ajuda. O Query Store deve ser desativado para eliminar o problema.

Não há nenhuma quantidade significativa de dados no Repositório de Consultas quando o problema é acionado – veja abaixo (consultas feitas após o QS ser desativado).

insira a descrição da imagem aqui

Outras observações relacionadas

  • Se eu ativar (READ_WRITE) o Query Store e mantê-lo funcionando por apenas um tempo, mas não o suficiente para acionar o problema, mude para READ_ONLY, o problema não será acionado no período de 10 a 15 minutos conforme descrito acima. No entanto, ele será acionado quase instantaneamente se eu mudar o Query Store para READ_WRITE a qualquer momento posteriormente.

  • Quando a carga do usuário aumenta no momento em que o problema é acionado, pode-se observar que o uso de consultas no banco de dados que levam alguns milissegundos para serem processadas nas condições padrão começa a ficar mais lento e também mostra esperas PREEMPTIVE_OS_QUERYREGISTRY não desprezíveis (conforme sp_WhoIsActive mostrado abaixo). Essas consultas definitivamente não fazem consultas ao registro do Windows.

insira a descrição da imagem aqui

  • Temos o mesmo banco de dados (ou seja, a mesma estrutura) em várias outras instâncias do SQL Server com o mesmo padrão de carregamento (e volumes de dados e consultas ainda muito maiores) e o Query Store funciona perfeitamente bem lá. Parece que algo está quebrado no Query Store apenas para este banco de dados específico.

  • Pode ser importante que o Repositório de Consultas desse banco de dados esteja originalmente cheio e o "processo de limpeza baseado em tamanho" tenha sido acionado e o SQL Server (provavelmente) reiniciado durante esse período. Desconfio que haja algo quebrado no QS daquele banco de dados em relação a isso... Tentei também a procedure sys.sp_query_store_consistency_check , mas sem sucesso.

  • Depois que o problema é acionado e "suspenso" ao desligar o QS, quando o QS é ligado novamente (sem limpeza prévia), parece que o problema é acionado novamente quase instantaneamente.

O Query Store fica completamente inutilizável para o banco de dados nessas condições. Alguma idéia de como consertar isso?

ATUALIZAÇÃO 01/08/2024

Com base na dica do comentário de Paul White, fiz alguns experimentos com a opção de escopo do banco de dados CE_FEEDBACK e parece ser o verdadeiro gatilho. O comportamento é descrito abaixo:

Tenho o Query Store não limpo de tentativas anteriores (apenas algumas centenas de consultas de captura) como ponto de partida.

  • Quando defino CE_FEEDBACK = OFF e coloco o QS em READ_WRITE, o problema não é acionado.
  • Quando defino CE_FEEDBACK = ON e coloco o QS em READ_WRITE, o problema é acionado quase instantaneamente.
  • Quando defino CE_FEEDBACK = OFF e coloco o QS em READ_WRITE, o problema não é acionado. Então (com o QS em execução) eu alterno CE_FEEDBACK = ON. O problema é novamente desencadeado instantaneamente. O interessante também é que quando eu configurei CE_FEEDBACK = OFF novamente, não é suficiente para resolver o problema. O QS também deve ser desligado para pará-lo.

TIPO DE CARGA DE TRABALHO

Como o problema parece estar relacionado também ao tipo de carga de trabalho, tentarei descrevê-lo aqui, pois o padrão é bastante direto. É quase 99% ad hoc com os seguintes padrões de consulta:

  • Cerca de 85% das consultas executadas durante o experimento são uma simples junção à variável da tabela. O número de linhas passadas para a variável varia de +/- 10 a +/- 500. A tabela do banco de dados de origem varia entre as consultas, mas o padrão do plano de execução é o mesmo mostrado abaixo.

insira a descrição da imagem aqui

  • O restante da carga de trabalho são consultas que seguem o padrão abaixo. O problema com esta parte é que devido a uma alta variabilidade dos parâmetros (o número de parâmetros muda frequentemente), então é capaz de preencher um armazenamento de consultas de 2GB em poucos dias com consultas "únicas", mas não é o caso para o cenário atual

insira a descrição da imagem aqui

Posso imaginar que provavelmente a primeira parte da carga de trabalho possa ser problemática para o CE_FEEDBACK.

sql-server
  • 1 respostas
  • 118 Views
Martin Hope
Martin Karouš
Asked: 2024-07-23 15:11:18 +0800 CST

A coluna run_duration do msdb.dbo.sysjobhistory retorna valores negativos

  • 8

De vez em quando, a coluna run_duration do msdb.dbo.sysjobhistory retorna um valor negativo para um dos trabalhos, veja o exemplo abaixo.

insira a descrição da imagem aqui

O trabalho foi concluído com sucesso no momento da consulta. Alguma ideia do que poderia ser uma razão para isso?

Estamos discutindo o SQL 2019 (15.0.4322.2). Até agora, isso aconteceu apenas 2 ou três vezes nos últimos dias, com apenas um único trabalho executado na frequência de 5m. O trabalho foi executado sem esse problema há meses. Nenhum outro trabalho apresenta esse comportamento, mas é difícil dizer se é uma regra...

Este é um trabalho criado pelo usuário. Causa apenas um pequeno problema com o monitoramento dos trabalhos de longa duração (já tratei da exceção que isso causa). Só estou me perguntando o que poderia causar esse comportamento.

sql-server
  • 1 respostas
  • 180 Views
Martin Hope
Martin Karouš
Asked: 2024-07-17 05:00:17 +0800 CST

Alta utilização de CPU em uma instância ociosa do SQL Server sem tráfego de usuário [duplicado]

  • 5
Essa pergunta já tem resposta aqui :
Armazenamento de consultas quebrado (1 resposta)
Fechado há 3 horas .

Temos um SQL Server 2022 CU13 Enterprise em uma VM Windows 2022 com 8 vCPU. O processo sqlserver.exe mostra uma alta utilização da CPU entre 10-15%, mesmo quando não há carga gerada pelo usuário (o que significa que não há conexão do usuário no momento, até mesmo o SQL Server Agent é interrompido para eliminar toda carga que não seja do sistema) em o servidor. O tipo de espera dominante é SOS_SCHEDULER_YELD nesse tempo ocioso.

Essa atividade do servidor também bloqueia a interrupção do serviço SQL Server. Uma tentativa de interromper o serviço resulta em uma espera interminável e o processo de serviço do Windows precisa ser encerrado para "parar". Após a reinicialização, a utilização funciona perfeitamente por algum tempo (o servidor inativo tem */- 0 utilização de CPU), mas após algum período de tempo (algumas horas ou alguns dias no máximo) com a carga do usuário em execução, o problema volta novamente . Significa que a utilização é maior do que deveria ser com a carga do usuário gerada e, novamente, após a carga ser interrompida (sem conexões do usuário), a utilização permanece alta conforme mencionado acima...

Não há mensagens suspeitas no log de erros, na sessão de integridade do XE, no log de eventos do Windows...

Aqui está a visualização do Activity Monitor no servidor durante o período ocioso descrito acima: insira a descrição da imagem aqui

Após alguma investigação, provavelmente identifiquei o SPID, que causa essa utilização. Parece ser um SPID do sistema (SPID 37 no momento da investigação) e consome cerca de 10 segundos de tempo de CPU em um período de 10 segundos (veja a saída da Consulta 4 abaixo). O database_id do SPID parece estar mudando entre o mestre (database_id = 1) e um dos bancos de dados do usuário (database_id = 10). Apenas os IDs de bancos de dados 1 e 10 parecem estar envolvidos nesta atividade SPID. O SPID também está gerando uma alocação cada vez maior no tempdb (veja a saída da Consulta 3 abaixo).

Aqui está a saída do sys.dm_exec_request ao mesmo tempo em que a imagem do Activity Monitor acima foi tirada (o spid problemático é o 37): Consulta 1

Aqui está a saída de sp_WhoIsActive ao mesmo tempo: Consulta 2

Aqui está um cálculo do tempo de CPU consumido para o SPID durante o período de 10 segundos: Consulta 3

Pelo que entendi, parece ser uma atividade do Service Broker. No entanto, não há Service Broker habilitado no banco de dados mestre nem no banco de dados do usuário. Não usamos ativamente o Service Broker em nossos bancos de dados. Não tenho ideia do que possa ser essa atividade do corretor e com que atividade do sistema ela pode estar conectada. Não há nenhum recurso "incomum" usado no servidor ou no banco de dados do usuário, apenas um "conjunto básico de recursos comuns", o único "recurso incomum" é o TDE habilitado.

Alguma idéia de como posso investigar melhor a causa raiz desse problema (do que se trata essa atividade do corretor) e como posso me livrar dele?

sql-server
  • 1 respostas
  • 64 Views
Martin Hope
Martin Karouš
Asked: 2024-03-14 17:07:18 +0800 CST

MS SQL Server - Alto consumo de "memória modificada"

  • 6

Operamos uma instância do MS SQL Server 2022 (padrão 16.0.4095.4) no Windows Server 2022 (máquina virtual com 32GB de RAM) e tendo problema com a “Memória Modificada” consumida pelo processo sqlservr.exe.

A configuração de memória do SQL Server é a seguinte:

Configuração de memória do SQL Server

O consumo geral de memória é assim:

Consumo geral de memória

Quando olho o que consome essa memória modificada, vejo que é o SQL Server:

Saída do mapa RAM

Essa parte "modificada" da memória está em constante crescimento e parece nunca diminuir (ela tem se mantido cada vez mais alta há dias). As estatísticas de desempenho do SQL Server não indicam nenhum problema de desempenho no momento.

Além disso, a saída do DBCC MEMORYSTATUS não me dá nenhuma pista sobre o que poderia ser essa parte de "memória modificada". Pelo que entendi a saída (veja abaixo) o consumo de memória relatado pelo DBCC MEMORYSTATUS se enquadra no limite definido em "Memória máxima do servidor".

Saída DBCC MEMORYSTATUS

Você tem alguma ideia do que poderia causar o tipo de consumo de memória muito acima do valor definido em "Memória máxima do servidor" ou como posso investigar mais detalhadamente?

O problema não ocorre em nenhuma outra instância que temos - a "memória modificada" é uma pequena parte do consumo de memória. A única diferença entre esta e outras instâncias é que há vários grupos básicos de disponibilidade configurados nesta caixa. Não são permitidos quaisquer outros "recursos suspeitos" (sem índices columnstore, sem OLPT na memória ...).

O que tentei só por curiosidade é diminuir o valor de "Memória máxima do servidor". O único efeito foi que a “memória em uso” liberada por isso foi lenta mas seguramente trocada para a “memória modificada” em algum tempo. Estou pensando em aumentar a memória da VM, mas temo que isso resulte apenas em um consumo maior de "memória modificada"...

sql-server
  • 2 respostas
  • 133 Views
Martin Hope
Martin Karouš
Asked: 2021-10-07 06:06:08 +0800 CST

Processo em auto-deadlock em uma variável de tabela

  • 7

Estamos executando o SQL Server 2019 CU12 para um de nossos clientes. Algum tempo atrás, começamos a obter deadlocks com fio em que um único processo se bloqueia no acesso a uma variável de tabela.

Exemplo de relatório de impasse

    <deadlock>
 <victim-list>
  <victimProcess id="process2ae9f9f7468" />
 </victim-list>
 <process-list>
  <process id="process2ae9f9f7468" taskpriority="0" logused="0" waitresource="OBJECT: 2:-1194094756:0 " waittime="110" ownerId="6978622122" transactionname="GetInitializedIMA" lasttranstarted="2021-09-15T21:46:44.243" XDES="0x2b4d9477be8" lockMode="Sch-S" schedulerid="3" kpid="10868" status="suspended" spid="102" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2021-09-15T21:46:44.113" lastbatchcompleted="2021-09-15T21:46:44.113" lastattention="2021-09-15T21:46:15.777" clientapp=".Net SqlClient Data Provider" hostname="removed" hostpid="15900" loginname="removed" isolationlevel="read committed (2)" xactid="6978622078" currentdb="15" currentdbname="MigrationSubjects" lockTimeout="4294967295" clientoption1="673187936" clientoption2="128056">
   <executionStack>
    <frame procname="unknown" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">unknown</frame>
   </executionStack>
   <inputbuf>
     (@Ids [SubjectRegistry.Consolidation.IdTable] READONLY)
     DELETE [reg].[HistoricalCompanyInfo] FROM [reg].[HistoricalCompanyInfo] t
     INNER JOIN @Ids ids ON ids.Id = t.HistoricalCompanyInfoId
   </inputbuf>
  </process>
 </process-list>
 <resource-list>
  <objectlock lockPartition="0" objid="-1194094756" subresource="FULL" dbid="2" objectname="tempdb.dbo.#B8D38F5C" id="lock2ac0942fa00" mode="Sch-M" associatedObjectId="-1194094756">
   <owner-list>
    <owner id="process2ae9f9f7468" mode="Sch-M" />
    <owner id="process2ae9f9f7468" mode="Sch-S" requestType="wait" />
   </owner-list>
   <waiter-list>
    <waiter id="process2ae9f9f7468" mode="Sch-S" requestType="wait" />
   </waiter-list>
  </objectlock>
 </resource-list>
</deadlock>

A definição do tipo de tabela é a seguinte:

CREATE TYPE [dbo].[SubjectRegistry.Consolidation.IdTable] AS TABLE(
    [Id] [bigint] NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC) WITH (IGNORE_DUP_KEY = OFF)
)
GO

Alguma idéia do que poderia causar esses bloqueios estranhos e como ignorá-los?

sql-server deadlock
  • 1 respostas
  • 477 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve