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-186310

Joe's questions

Martin Hope
Joe
Asked: 2022-11-22 13:52:04 +0800 CST

O Postgres executa nós de planos não paralelos sequencialmente, otimizados para IO ou em threads paralelos?

  • 6

É difícil encontrar um título adequado para isso, portanto, quaisquer sugestões e edições são bem-vindas.

Ao ANALISAR um plano, você é informado quando determinados nós emitiram a primeira linha e quando emitiram sua última linha. Alguns nós podem começar a operar mesmo sem ter o conjunto de resultados completo (um loop aninhado que faz uma pesquisa de índice recebendo linhas de um nó interno pode teoricamente já começar a fazer isso antes mesmo do nó interno ser totalmente avaliado, quando o nó interno já está retornando um subconjunto dos resultados).

Eu posso ver essas actual timessobreposições nas avaliações, o que significa que alguns nós já devem começar a ser avaliados antes mesmo de terminar os nós internos.

Minhas perguntas:

  • Todos os nós (a menos que um nó de processamento paralelo seja especificado) são executados sequencialmente, o que significa que eles só começam a trabalhar quando o nó interno é concluído? (nota: considerando as sobreposições de tempo reais na análise, acho que não)
  • Se eles não são executados sequencialmente, mas apenas executados em um único thread, eles são otimizados para IO, como em, enquanto um nó interno está fazendo algo pesado em IO, é um nó externo fazendo cálculos, se possível, e retornando assim que o nó interno está pronto?
  • Ou, alternativamente, eles realmente têm apenas vários threads, um para cada nó, sendo ativados assim que tiverem algo para fazer?

Sei que internamente as coisas são mais complicadas do que isso, mas acho que esta é uma boa explicação de alto nível dos meus pensamentos.

postgresql
  • 1 respostas
  • 26 Views
Martin Hope
Joe
Asked: 2022-04-26 01:55:56 +0800 CST

Altere a definição de um índice com expressão sem descartar/recriar o índice

  • 3

Estou em uma situação peculiar:

Eu tenho vários índices com expressões que usam uma função. Quero trocá-los para uma função diferente, onde posso garantir que a função se comporte da mesma forma (para que os valores indexados não sejam inválidos). Idealmente, não quero descartar o índice existente e reindexá-lo, porque isso requer mais sobrecarga de desenvolvimento.

Eu posso ver na pg_indextabela, há uma indexprscoluna, que contém a definição "interna" de um índice (a pg_indexestabela é uma versão muito impressa disso). Especificamente, acho que identifiquei os índices relevantes para ter um formato nos moldes de ({FUNCEXPR :funcid 870 :funcresulttype 25 :funcretset false...

Voltando funcid 870para o information_schema.routines, consegui correlacioná-lo no specific_name(que contém esse funcid) e pude determinar que é de fato a função específica que quero alterar.

Seria - teoricamente - possível substituir esse funcid pelo novo funcid e os índices então se refeririam à nova função? Como eu faria isso, já que esta coluna é do tipo pg_node_tree? Se não, existe uma maneira de atingir meu objetivo de uma maneira não hackeada?

Adendo: Provavelmente ainda farei isso da maneira "limpa", a menos que haja uma maneira segura e comprovada de fazer isso, mas isso despertou meu interesse o suficiente para fazer uma pergunta sobre isso.

postgresql database-internals
  • 1 respostas
  • 78 Views
Martin Hope
Joe
Asked: 2022-03-05 07:06:34 +0800 CST

Preciso indexar uma coluna que é usada em todas as consultas, mas raramente se desvia do padrão?

  • 0

Um exemplo bem prático:

Suponha uma tabela User que tenha uma coluna "excluída" que armazena carimbo de data/hora. Suponha que exista um filtro "excluído NÃO É NULO" em praticamente todas as consultas que acessam essa tabela. Este campo muito raramente não é nulo e, quando é, geralmente é de curta duração.

Perguntas:

  • É necessário um índice? Embora a entropia desta coluna seja geralmente 1, não acho que o Postsgresql acompanhe a entropia sem criar um índice, o que significa que precisaria fazer uma varredura completa da tabela para cada consulta (provavelmente como a última operação, mas ainda ai!)
  • Faz sentido pré-otimizar esse índice para ser um índice de hash em vez de um índice B, supondo que eu não precise de todos os operadores adicionais do índice B? Como a entropia está próxima de 1, não acho que haja uma grande diferença de tamanho entre os dois índices e, portanto, um B-Index seria superior.
postgresql index
  • 1 respostas
  • 50 Views
Martin Hope
Joe
Asked: 2021-09-23 02:29:38 +0800 CST

Registrar ocorrências quando as políticas de segurança em nível de linha filtram linhas

  • 0

Atualmente estou trabalhando na implementação de uma segurança de 2 camadas, o que significa que temos filtragem de consulta orm em nosso código de aplicativo, bem como em nosso banco de dados. No banco de dados estou usando o Postgre Row Level Security.

Em um mundo ideal, todas as consultas de filtragem criadas no código do aplicativo são perfeitas e as políticas de segurança em nível de linha nunca removem entradas. No entanto, se acontecer de filtrar um resultado, isso significa que temos um erro em nossa filtragem no código do aplicativo que deve ser corrigido. Eu gostaria de poder registrar isso.

É possível configurar o Postgresql para que eu possa ser notificado/registrar essas ocorrências?

postgresql postgresql-12
  • 1 respostas
  • 147 Views
Martin Hope
Joe
Asked: 2019-09-27 11:15:11 +0800 CST

Como inserir valores em um banco de dados altamente normalizado sem verificação excessiva de duplicatas?

  • 6

A situação:

O líder do nosso projeto decidiu usar um banco de dados altamente normalizado como nosso design de banco de dados. O que significa que literalmente todos os campos de uma tabela grande são um ID em vez do valor real. Sua intenção é não ter duplicatas de qualquer tipo, mesmo em lugares onde duplicatas não machucam (primeiros nomes de pessoas, esse tipo de coisa).

No entanto, isso leva a um problema: ao inserir novos dados, precisamos verificar cada subtabela para ver se o valor existe (primeira consulta) e inseri-lo se não existir (segunda consulta) ou então recuperar o ID, fazer isso para literalmente todas as colunas da tabela principal (então 30 vezes ou algo assim), e então podemos criar o objeto que realmente queríamos obter. (São ~60 acessos ao banco de dados para criar um objeto!).

Trabalhamos na primavera, então usamos jdbcTemplate para construir uma conexão de banco de dados, e cada consulta é cara. Quando estamos inserindo milhares de novos registros ou atualizando-os, isso na verdade torna o banco de dados muito lento.

Todo esse processo parece completamente sujo e errado para mim e, portanto, queria perguntar: existe uma maneira melhor? É possível fazer uma subconsulta inserir um valor se não existir, ou não, se existir, e retornar a chave real em ambos os casos, que é usada imediatamente para definir o ID na tabela principal? Existe uma solução elegante para reduzir o número de consultas sem introduzir muito SQL complicado (para o bem dos membros da equipe)?

mysql mariadb
  • 2 respostas
  • 2458 Views
Martin Hope
Joe
Asked: 2019-07-26 05:02:16 +0800 CST

Como consultar "previsões" de endereço ao aplicar restrições

  • 1

Digamos que eu tenha esse esquema de banco de dados simplificado.Esquema de banco de dados

O esquema consiste em três tabelas, rua, cidade e CEP que têm uma relação muitos-para-muitos entre si.

O que eu quero fazer é uma previsão que consulte o banco de dados para possíveis correspondências, além de prever dados ausentes. Para colocar mais em um exemplo: digamos que o usuário comece a digitar uma cidade, talvez "Wash". Ele já tinha uma rua digitada, para eu não conhecer nenhuma rua, vamos chamar de "New Street Avenue". Esta é uma restrição , o que significa que deve ser cumprida em nossa previsão. Agora quero que a cidade consulte possíveis finalizadores de "Wash", bem como forneça dados ausentes, neste caso, CEPs, que tenham uma rua chamada "New Street Avenue"

Veja como seria a abordagem ingênua:

  1. Filtre a rua para todas as chaves cujo nome corresponda a "New Street Avenue"
  2. Filtre street_city para todas as chaves da rua e retorne as chaves da cidade
  3. Inner junte as chaves da cidade em city_zipcode e, em seguida, Inner junte-as no código postal

O problema com esta abordagem: O conhecimento entre rua e código postal é completamente ignorado. Isso significa que podemos acabar com CEPs e pares de cidades, onde sabemos que a cidade contém a rua que procuramos, mas o CEP não necessariamente . Esta seria uma previsão inválida para retornar, pois o endereço não existe!

Isso significa que preciso "persistir" as informações sobre a rua mais adiante.

Minha abordagem seria esta :

  1. Filtre a rua em busca das chaves que cumprem nossa condição.
  2. Inner Junte a rua na cidade para as chaves de #1. Mantenha ambas as colunas-chave.
  3. Inner join no city_zipcode mantendo as chaves do código postal também
  4. Filtre todos os pares de rua e CEP que não estão presentes em street_zipcode

(Em uma nota lateral: para "esperar" melhorar o desempenho, após cada "previsão", eu colocaria um comando LIMIT 10 (ou similar), pois precisamos apenas de uma quantidade sensata de previsões).

Essa abordagem deve funcionar. Pode não ser o melhor otimizado, mas retornaria os resultados corretos. No entanto, isso não apenas parece muito sujo para mim, mas também abre outro problema:

Tenho certeza de que escala horrivelmente, tanto no tamanho da mesa quanto nas tabelas adicionais

Há uma boa probabilidade de que haja outra tabela que tenha relacionamentos muitos para muitos, para fins de argumento, rua e CEP. Agora, se eu quiser pesquisar uma cidade com restrição de rua, preciso fazer o que fiz acima e adicionar ainda mais para filtrar também quaisquer relações entre rua e a nova tabela.

Sinto que estou entrando em um beco sem saída com essa abordagem. Eu adoraria alguém para me ajudar aqui sobre como abordar este problema melhor.

database-design performance
  • 1 respostas
  • 49 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