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 / 93565
Accepted
Pixelated
Pixelated
Asked: 2015-02-24 06:21:38 +0800 CST2015-02-24 06:21:38 +0800 CST 2015-02-24 06:21:38 +0800 CST

Altas esperas PAGELATCH_* e WRITELOG. Eles estão relacionados?

  • 772

Estamos vendo tipos de espera PAGELATCH_EX e PAGELATCH_SH muito altos junto com esperas WRITELOG altas. Eu diagnostiquei a consulta que causa as esperas PAGELATCH e posso eliminá-las reduzindo a taxa de inserção em uma chave primária agrupada ocupada definida com um valor IDENTITY. Entendo que esse fenômeno é conhecido como contenção de trava de inserção da última página.

No entanto, minha pergunta é quando um novo registro é inserido, o SQL Server pega um PAGELATCH_EX exclusivo em uma página de buffer, insere o registro na página do buffer, grava o registro no log de transações e libera o PAGELATCH_EX exclusivo conforme detalhado https:// www.microsoft.com/en-ie/download/details.aspx?id=26665 Página 24. Ou ele grava o registro no log de transações primeiro antes de usar o PAGELATCH_EX conforme detalhado "Resolvendo a contenção de PAGELATCH em cargas de trabalho INSERT altamente simultâneas - Informações básicas Guia do SQLCAT para: Mecanismo Relacional

Se o registro for gravado fora do mecanismo de travamento, posso descartar gravações lentas no disco como causa de altas esperas de PAGELATCH. Mas se a trava for mantida até que o registro seja endurecido para log, provavelmente devo levar o WRITELOG em consideração.

Além disso, ter vários índices não clusterizados faria com que a trava PAGELATCH_* fosse mantida por mais tempo, ou seja, se uma tabela tivesse um cluster e vários índices não clusterizados fossem adicionados e liberados para cada uma das páginas do buffer de índice simultaneamente?

Atualização 1 Depois de ler o slide dois do confio-sql-server-writelog-wait e a arquitetura geral do WAL. Agora entendo que a etapa "Registrar uma entrada de log de que a linha foi modificada" detalhada em ambos os white papers refere-se ao SQL Server registrando uma alteração no cache do log de transações, não no disco. Assim que a transação for concluída ou o buffer estiver cheio, todos os registros serão imediatamente descarregados no disco.

sql-server sql-server-2008-r2
  • 1 1 respostas
  • 1611 Views

1 respostas

  • Voted
  1. Best Answer
    Shanky
    2015-02-24T08:30:55+08:002015-02-24T08:30:55+08:00

    No entanto, minha pergunta é quando um novo registro é inserido, o SQL Server pega um PAGELATCH_EX exclusivo em uma página de buffer, insere o registro na página do buffer, grava o registro no log de transações e libera o PAGELATCH_EX exclusivo

    Você deve observar que a trava protege apenas a integridade física da página enquanto ela está na memória, portanto, a trava seria tomada quando a página estivesse na memória. Suponha que um registro esteja sendo inserido e para essa página precise ser buscado. Primeiro, a página seria bloqueada e trazida para a memória, depois seria travada e as informações seriam gravadas. O processo depois disso seria

    • Gerar registro de log

    • Atualize o LSN da página para corresponder ao do registro de log

    • Alterar dados (sujar a página)

    • Trava de liberação

    • Confirmar início da transação

    • FlushToLSN do Commit

    • Liberar bloqueios

    • Confirmar transação concluída

    Para obter mais detalhes e explicações sobre as etapas acima, leia o blog de apresentação I/O de Bob Dorr

    As esperas Pagelatch* não são esperas de E/S e, na maioria das vezes, essas esperas são proeminentes devido à contenção de alocação. Meu palpite é que tem a ver com como tempdb is configured. Então, como seu tempdb está configurado?, quantos arquivos de dados tempdb estão presentes? Certifique -se de que eles tenham o mesmo crescimento automático e o mesmo tamanho. Quando uma nova página é criada, páginas do sistema como páginas GAM, SGAM e PFS precisam ser atualizadas ou acessadas e quando o SQL Server encontra contenção ao acessar essas páginas, essa espera entra em cena.

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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