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 / 289106
Accepted
gavenkoa
gavenkoa
Asked: 2021-04-02 07:12:38 +0800 CST2021-04-02 07:12:38 +0800 CST 2021-04-02 07:12:38 +0800 CST

Um bloqueio significa uma espera?

  • 772

Eu realmente não entendo promessas sobre esperas em caso de acesso simultâneo a dados.

Todos os manuais operam por termo lock . Ninguém explica que o bloqueio provavelmente faz com que os clientes SQL aguardem a aquisição do bloqueio no lado do servidor (e pode levar segundos/minutos/infinito)?

Existem casos em que os bloqueios não causam esperas? Eu posso imaginar:

  • provavelmente READ UNCOMMITTEDem algumas situações, como não há DDL?
  • erro é reportado sem esperar...
  • ninguém espera, mas primeiro quem faz commitganha, outros falham em seuscommit

Eu revisei a API JDBC : ela menciona literalmente:

SQLTimeoutException - quando o driver determinou que o valor de tempo limite especificado pelo método setQueryTimeout foi excedido e pelo menos tentou cancelar a instrução atualmente em execução

De acordo com os documentos, o tempo limite é detectado no lado do cliente . A API do cliente amplamente usada não tem influência nos tempos limite do lado do servidor ( incluindo causados ​​por bloqueios ). Provavelmente você pode definir algumas propriedades de conexão proprietárias para influenciar o comportamento do banco de dados.

Eu vejo algumas extensões SQL proprietárias, como:

  • https://learn.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql SET LOCK_TIMEOUT timeout_period
  • https://www.postgresql.org/docs/13/runtime-config-client.html set lock_timeout ms &set statement_timeout ms

Para mim, as esperas de banco de dados devido a bloqueios são uma área cinzenta. Um bloqueio significa uma espera?

locking blocking
  • 1 1 respostas
  • 132 Views

1 respostas

  • Voted
  1. Best Answer
    Justin Cave
    2021-04-02T07:53:23+08:002021-04-02T07:53:23+08:00

    Na maioria dos casos, os bloqueios não causam esperas.

    Imagine que eu tenha um sistema bancário simples. Para transferir dinheiro da conta A para a conta B, inicio uma transação e adquiro um bloqueio em nível de linha em ambos os registros de conta. Isso me permite executar minhas validações (ou seja, A tem dinheiro suficiente para a transferência, o departamento de fraude não tem um sinalizador em nenhuma das contas, etc.), atualizar ambas as contas para refletir o novo saldo, gerar qualquer registro necessário e confirmar sem se preocupar que alguma outra sessão tenha feito uma alteração em uma ou ambas as contas que deveriam ter impedido a transferência.

    A menos que alguma outra sessão apareça na fração de segundo em que estou processando a transferência que tenta bloquear A ou B, os bloqueios que adquiri não geram esperas. Claro, é possível que outra sessão esteja processando uma transação para A no mesmo instante que minha sessão, daí a necessidade do bloqueio. Mas, dadas as milhares de contas e milhões de transações que precisam ser processadas, é muito improvável que haja disputa pelo bloqueio. Particularmente se eu projetar o sistema de forma sensata para que, por exemplo, todas as transações em lote para uma determinada conta sejam processadas por um thread. Se não há contenção, não há esperas.

    • 2

relate perguntas

  • Usando (NOLOCK) em um bloco de transação READ COMMITTED

  • Benefícios do bloqueio no nível da tabela

  • SQL Server: o que deve ser feito quando um processo está bloqueando outro processo?

  • O que é bloqueio e como isso acontece?

  • Justifique NÃO usando a dica (nolock) em todas as consultas

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