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 / dba / Perguntas / 331224
Accepted
Sranda
Sranda
Asked: 2023-09-14 22:52:44 +0800 CST2023-09-14 22:52:44 +0800 CST 2023-09-14 22:52:44 +0800 CST

Diferença entre forwarded_fetch_count e forwarded_record_count

  • 772

Estou coçando a cabeça, relendo a ajuda da MSFT e ainda não consigo entender a diferença entre forwarded_fetch_count e forwarded_record_count em sys.dm_db_index_operative_stats e sys.dm_db_index_physical_stats. Deixe-me ilustrar meu problema de compreensão dos pontos de vista com o exemplo abaixo.

Eu executei as seguintes consultas:

;with heaps as ( 
select 
    DB_NAME(DB_ID()) dbname, object_name ( p.object_id ) objname, sum(row_count) row_count,
    DB_ID() database_id, p.object_id objectid
from 
    sys.dm_db_partition_stats p
    join sys.objects o on o.object_id = p.object_id 
WHERE 
    index_id = 0 and o.is_ms_shipped = 0 --and row_count > 0
    group by p.object_id ) 
select 
    h.*, 
    forwarded_fetch_count
from heaps h
    cross apply sys.dm_db_index_operational_stats(database_id, objectid, 0, null) ps
    WHERE forwarded_fetch_count > 0 ORDER BY forwarded_fetch_count DESC¨

E

SELECT page_count, OBJECT_NAME(ps.object_id)
,avg_record_size_in_bytes
,avg_page_space_used_in_percent
,forwarded_record_count 
FROM sys.dm_db_index_physical_stats(db_id('your_db_name'), NULL,NULL, NULL, 'DETAILED') AS ps
WHERE forwarded_record_count IS NOT NULL AND forwarded_record_count > 0
GO

Ambas as consultas retornaram listas diferentes de tabelas em um único banco de dados que estou ajustando. A primeira consulta retornou tabelas variando de 1.000 a 100.000 buscas encaminhadas por tabela, a segunda consulta retornou qualquer coisa entre 10 e 60.000 contagens de registros encaminhados para outro conjunto de tabelas.

Para consertar a fita adesiva, reconstruí as tabelas em questão. No entanto, no monitor de desempenho do Windows, ainda vejo muitos registros encaminhados/s (o gráfico geralmente chega a 100). Ao executar sp_blitzfirst @seconds = 30, sou alertado sobre muitas buscas encaminhadas/s. Uma vez que o alerta é geral (ou seja, não relacionado a nenhum banco de dados), outros 9 alertas da mesma instrução mencionam: "Forwarded Fetches/Sec High: TempDB Object". E de acordo com a contagem de buscas encaminhadas, há dez ou cem vezes mais buscas encaminhadas no TempDB do que fora do TempDB.

Por último, mas não menos importante, o ISV implementou fortemente gatilhos (que relaciono com as buscas encaminhadas do TempDB).

Minhas perguntas:

  • Qual é a diferença entre as duas colunas em duas visualizações?
  • Ao lidar com banco de dados lento devido a registros encaminhados em um heap, qual devo usar? (Eu sei que a ajuda da MSFT menciona forwarded_record_count em dm_db_index_physical_stats relacionado especificamente a heaps, ainda não deixando isso mais claro para mim).
  • Posso identificar o que no TempDB está causando essas buscas encaminhadas?
sql-server-2019
  • 1 1 respostas
  • 40 Views

1 respostas

  • Voted
  1. Best Answer
    Paul White
    2023-09-15T00:56:59+08:002023-09-15T00:56:59+08:00

    A visualização de estatísticas físicas retorna informações sobre a estrutura física do índice ou tabela.

    A contagem de registros encaminhados mostra quantas linhas no heap encaminharam registros . Eles são criados quando uma linha de heap é atualizada para um tamanho que não cabe mais na página. A linha é movida para uma página diferente com espaço suficiente e um ponteiro de encaminhamento é deixado na linha original.

    Para uma tabela heap com 123 registros encaminhados, a contagem de registros encaminhados também será 123.

    A visualização de estatísticas operacionais mantém a contagem de operações no heap (ou índice) do ponto de vista do mecanismo de armazenamento.

    Uma busca encaminhada ocorre quando um plano de execução precisa de uma linha de heap que foi encaminhada. Ele é incrementado cada vez que um ponteiro de encaminhamento é seguido para localizar os dados necessários à consulta ou instrução.

    A varredura completa de uma tabela heap com 123 registros encaminhados adicionaria 123 à contagem de buscas encaminhadas . Executar essa consulta 5 vezes adicionaria 5 x 123 = 615 à contagem.

    Uma única consulta (e plano de execução) que varre o heap mais de uma vez também pode adicionar múltiplos de 123 à contagem, ou qualquer outro número, caso o heap seja apenas parcialmente varrido (talvez porque a consulta tenha uma cláusula) TOP.

    A questão é que a contagem de buscas encaminhadas é incrementada sempre que qualquer usuário, qualquer consulta e qualquer operador de plano dentro de um plano de execução precisar de uma linha do heap e descobrir que ela foi encaminhada.


    Em outras palavras, as estatísticas operacionais fornecem métricas cumulativas sobre como as consultas acessam os dados. As estatísticas físicas informam sobre o estado físico da pilha em um determinado momento.

    Se você estiver interessado no desempenho da consulta, provavelmente prestará atenção às estatísticas operacionais .

    Se você estiver interessado no estado das estruturas físicas, verá as estatísticas físicas .

    Quando tiver certeza de que os registros encaminhados estão realmente causando um problema real de desempenho, você os corrigirá não usando heaps, reconstruindo heaps ou alterando a estrutura da tabela ou consultas para que menos atualizações resultem no encaminhamento de linhas.

    • 5

relate perguntas

  • O período de avaliação do SQL Server expirou

  • Como o novo procedimento armazenado do sistema sys.xp_delete_files é diferente de sys.xp_delete_file?

  • Atualizando do SQL Server 2012 SP1 para o SQL Server 2019

  • O MS SQL Server tem a função generate_series

  • Como você habilita o cache do conjunto de resultados do SQL Server 2019?

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