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[concurrency](dba)

Martin Hope
GenGG
Asked: 2022-08-11 18:10:54 +0800 CST

B-Tree de controle de simultaneidade entre Hash

  • 1

Eu sou novo na transação. Quando li o livro "Transactional Information Systems", é mencionado que o B-tree usa o bloqueio de intervalo de chaves para garantir a serialização. É verdade que todos os acessos à relação devem ser realizados através da mesma árvore B para garantir a serialização?

Se bem entendi, não há como garantir a serialização se os acessos forem por diferentes índices . Veja o exemplo a seguir.

Suponha que existam dois índices na mesma relação, ou seja, uma árvore B e um índice de hash, e existam duas transações.

Primeiro, uma transação lê a relação usando o índice de hash, por exemplo, fetchkey(16)para buscar o registro (atualmente ausente) com a chave 16e não encontra correspondência. Como o hash não possui bloqueio de intervalo de chaves, ele não pode bloquear a próxima chave. Em seguida, a outra transação insere um registro com a chave '16' por meio da árvore B. A inserção será bem sucedida, levando a um fantasma.

transaction concurrency
  • 2 respostas
  • 28 Views
Martin Hope
Martin Thoma
Asked: 2022-08-08 21:44:41 +0800 CST

Uma anomalia de serialização só é possível com SUM/COUNT?

  • 2

Eu li Entender profundamente os níveis de isolamento e Ler fenômenos no MySQL e PostgreSQL e especialmente a parte "Anomalia de serialização no Postgres". Acho que entendi o problema descrito lá, mas tenho dificuldade em julgar quando isso pode acontecer na minha aplicação.

Só é possível com funções agregadas como SUM/COUNT obter uma anomalia de serialização no Postgres? Se não, com o que mais devo ficar atento?

postgresql concurrency
  • 1 respostas
  • 132 Views
Martin Hope
Iliana Kollia
Asked: 2022-04-23 09:22:01 +0800 CST

ATUALIZAÇÕES simultâneas do MySQL

  • 2

Digamos que temos a seguinte situação em um aplicativo usando MySQL onde um usuário pode comprar um item e cada item tem um único comprador, mas o preço do item pode mudar.

Pseudo-código :

BEGIN TRANSACTION

seenPrice = SELECT price FROM Item
    WHERE id = ABC AND buyer IS NULL

UPDATE Item SET buyer = X
    WHERE id = ABC AND buyer IS NULL AND price = seenPrice

COMMIT

A seenPricevariável e as buyer IS NULL AND price = seenPriceverificações na instrução UPDATE servem como um meio de bloqueio otimista para garantir que nenhum problema de simultaneidade apareça .

Em um ambiente multi-threaded onde um thread A e um thread B passam pela SELECTinstrução ao mesmo tempo e dizem que o thread A executa a UPDATEinstrução primeiro, a simultaneidade não é uma preocupação , mas é possível que A e B executem a UPDATEinstrução no mesmo tempo exato? Para contextualizar o aplicativo está sendo desenvolvido usando Spring Boot e Spring Data JPA.

mysql concurrency
  • 3 respostas
  • 362 Views
Martin Hope
Jonathan Wood
Asked: 2022-02-01 10:01:04 +0800 CST

Obtenha o próximo número de fatura e incremente sem problemas de simultaneidade

  • -1

Eu tenho uma tabela de locais que se parece com isso:

CREATE TABLE Locations (
    Id INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(255) NOT NULL,
    NextInvoice INT NOT NULL,
    PRIMARY KEY (Id)
);

Agora quero criar uma fatura para um local e preciso de um número de fatura.

O número da fatura será igual ao NextInvoicevalor para aquele local. E então devo incrementar esse valor para a próxima fatura.

Lógica muito simples, mas complicada por condições de concorrência e corrida.

Como eu poderia executar essa tarefa de recuperar o próximo número de fatura disponível para um local e, em seguida, incrementar esse valor, e não duplicar ou pular nenhum número quando esse código é chamado mais de uma vez ao mesmo tempo?

Não posso usar um número de incremento automático de restrição exclusiva porque os números podem ser duplicados entre os locais.

Nota: Minhas habilidades principais incluem C# e não necessariamente SQL-Server. Na verdade, estou usando o Entity Framework para isso. Mas não estou acima de escrever um procedimento armazenado, se necessário.

sql-server concurrency
  • 1 respostas
  • 608 Views
Martin Hope
Yves
Asked: 2021-09-15 07:32:09 +0800 CST

Qual é a maneira correta de lidar com a inserção multithread

  • 0

Sou iniciante em Banco de Dados e por enquanto preciso trabalhar com MySQL para construir um servidor web.

Em uma palavra, tenho um framework web, desenvolvido com Python. Ele lerá/gravará dados de/no MySQL.

Por enquanto não sei como lidar com o caso de multithreading insert.

Digamos que há muitos usuários que estão gravando seus dados em uma tabela. Usarei um pool de threads para processar essas solicitações, o que significa que haveria vários inserts ao mesmo tempo.

Minha pergunta é:

Se eu tiver definido concurrent_insert=2, vários inserts ainda causarão o bloqueio da tabela para que eu tenha um desempenho muito ruim (todos os inserts devem ser tratados um por um)? Ou o próprio MySQL pode lidar com os múltiplos inserts corretamente para que eu possa obter um desempenho não ruim?

Para os múltiplos inserts, há alguma diferença entre "compartilhar um objeto de conexão" e "cada um inserttem seu próprio objeto de conexão"?

mysql concurrency
  • 2 respostas
  • 644 Views
Martin Hope
Alex Shelemin
Asked: 2021-02-16 01:33:23 +0800 CST

Linhas ausentes no isolamento confirmado de leitura

  • 7

É bem conhecido que o isolamento Read Committed é propenso a diferentes anomalias. Li a série de The Great Paul White sobre níveis de isolamento. O post relevante para a discussão é este:

  • O Nível de Isolamento Comprometido de Leitura

Ele afirma (novamente, é razoavelmente bem conhecido), que uma instrução executada sob isolamento de leitura confirmada:

Can encounter the same row multiple times;
Can miss some rows completely;

Minha pergunta é sobre a parte das 'linhas ausentes'. Exemplos que falam sobre linhas ausentes geralmente demonstram o problema usando consultas como:

select count(*) from table.

Minha pergunta é que as linhas podem ser perdidas em uma consulta de seleção 'regular' ? Ou seja, uma consulta como

select * from table

ou mesmo

select * from table where id = @id

também perder as linhas que são confirmadas antes do início dessa consulta? Esta pergunta se aplica apenas a Read confirmada com bloqueio (não RCSI), pois o RCSI não permite esses tipos de anomalias.

sql-server concurrency
  • 1 respostas
  • 343 Views
Martin Hope
ClassNotFoundException
Asked: 2021-01-26 01:20:31 +0800 CST

Atualização simultânea de array (Postgres)

  • 0

Eu tenho uma matriz que posso atualizar de vários trabalhadores da seguinte forma: UPDATE my_table SET arr = array_append(my_table.arr, element).

O problema aparece quando dois trabalhadores tentam atualizar a matriz ao mesmo tempo. Por exemplo, ambos os trabalhadores veem que no momento da atualização, o array está vazio e tentam anexar um elemento da seguinte forma: array_append(empty_arr, element_a)e array_append(empty_arr, element_b). No final, o conteúdo final do array será: arr[element_a]ou arr[element_b]porque um dos workers terminará de atualizar o array mais cedo e seu valor será substituído pelo valor do outro worker. Como posso garantir que ambos os valores sejam escritos na matriz: arr[element_a, element_b]?

postgresql concurrency
  • 1 respostas
  • 144 Views
Martin Hope
Léo Vital
Asked: 2020-11-10 10:42:12 +0800 CST

Qual é a maneira correta de validar que um relacionamento muitos-para-muitos não ultrapassará um certo limite?

  • 1

Em um banco de dados Postgres, tenho um relacionamento da seguinte forma:

  1. Uma tabela Grupo tem uma coluna userEntranceLimits.
  2. Uma tabela UserEntrance tem uma coluna userId e uma coluna groupId.
  3. A contagem de usuários distintos de uma UserEntrance para um grupo específico não pode exceder userEntranceLimits do grupo.
  4. Dentro de uma transação (cujo nível de isolamento é REPEATABLE_READ) para criar uma nova UserEntrance, verifico se a contagem atual de UserEntrances para aquele grupo é >= o limite.
  5. Se não for, prossigo para criar um novo UserEntrance.
  6. Em algumas raras ocasiões, um grupo aparece com mais UserEntrances do que seu limite.

Entendo por que essa condição de corrida existe, mas não entendo a maneira correta de evitar que isso aconteça sem usar o nível de isolamento SERIALIZABLE. Temos muitas escritas simultâneas nesta tabela, e quando tentamos tornar a transação SERIALIZABLE antes, não deu muito certo.

Minha ideia agora é fazer um SELECT ... FOR UPDATEe contar o número de ocorrências no lado do aplicativo, mas isso me parece uma solução ruim. Qual é a solução adequada para este tipo de problema?

postgresql concurrency
  • 1 respostas
  • 105 Views
Martin Hope
Paul Draper
Asked: 2020-10-22 17:41:23 +0800 CST

O que é "especial" na atualização do PostgreSQL vs delete+insert

  • 12

Meu entendimento é que uma atualização bloqueia uma tupla, marca-a como excluída e adiciona uma nova tupla.

Em outras palavras, update = delete + insert.

Ou então eu tinha acreditado. Mas parece que há algo fundamentalmente diferente sobre atualização de delete + insert no MVCC.


Configurar:

CREATE TABLE example (a int PRIMARY KEY, b int);
INSERT INTO example VALUES (1, 1);

Método 1: Atualizar

-- session A                          session B
BEGIN;
UPDATE example SET b = 2 WHERE a = 1;
                                      DELETE FROM example WHERE a = 1;
COMMIT;
-- now there are 0 rows in table example (1 row was deleted by session B)

Método 2: Excluir e inserir

-- session A                          session B
BEGIN;
DELETE FROM example WHERE a = 1;
INSERT INTO example VALUES (1, 2);
                                      DELETE FROM example WHERE a = 1;
COMMIT;
-- now there is 1 row in table example (0 rows deleted by session B)

Desta forma

UPDATE example SET b = 2 WHERE a = 1;

é diferente de

DELETE FROM example WHERE a = 1;
INSERT INTO example VALUES (1, 2);

Como devo entender a natureza da atualização do MVCC? A tupla tem algum tipo de "identidade" MVCC que é preservada durante a atualização? O que é isso?

postgresql concurrency
  • 1 respostas
  • 2958 Views
Martin Hope
user183966
Asked: 2020-07-04 07:32:55 +0800 CST

Como evitar a conversão implícita de bytea para texto durante a conexão atual no postgres?

  • 1

No Postgres bytea, os valores são convertidos automaticamente textquando inseridos em text/ varcharcolunas, com base na bytea_outputconfiguração.

Estou trabalhando com algum código de programa que converte automaticamente certos valores (strings binárias) no programa para um formato bytea. O problema é que os usuários podem acidentalmente tentar inserir esses valores em uma textcoluna. Por padrão, o Postgres permitirá isso, mas nem sempre isso funcionará sem problemas - por exemplo, se houver bytes não ASCII. Acho que os usuários podem não perceber que o estranho comportamento de inserção é devido ao uso de uma string binária no programa de chamada. Portanto, se ocorrer uma conversão byteapara text, quero que o Posgres gere uma exceção.

Estou ciente de CREATE CAST, mas pelo que entendi, esta é uma ação de todo o sistema. Não quero alterar o comportamento do sistema para outras conexões. Eu poderia fazer CREATE CASTseguido, DROP CASTmas isso parece sujo para mim, pois ainda não está contido na conexão.

Como faço conversões (implícitas) de bytealançar textuma exceção apenas dentro da conexão atual?

O sql é emitido automaticamente, então eu posso adicionar uma instrução SQL anterior antes de cada instrução, isso não é problema.

Fiquei um pouco surpreso com esse comportamento porque o Postgres geralmente erra no lado da rigidez, o que eu gosto.

Esta pergunta segue a minha pergunta anterior:

  • Como evitar que diferentes conexões tratem o bytea na mesma consulta de maneira diferente?
postgresql concurrency
  • 1 respostas
  • 3003 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