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 / 问题

All perguntas(dba)

Martin Hope
zxx
Asked: 2024-07-01 17:42:09 +0800 CST

A simultaneidade do PostgreSQL16 upsert linhas com subconsulta na função trugger talvez tenha sido mal lida

  • 5

Eu tenho duas mesas:

create table name
(
    id         bigserial            primary key,
    name       text                    not null
);

create table name_score
(
    id        bigserial            primary key,
    name        text                  not null,
    score     bigint    default 1     not null
);

e um índice exclusivo na tabela name_score:

create unique index name_score_name_uindex
    on name_score(name);

e uma função de gatilho:

create or replace function add_name_func() returns trigger as
$name_count$
DECLARE
    new_name text;
begin
    new_name := NEW.name;
    insert into name_score(name)
    values (new_name)
    on conflict (name) do update set score=(select score from name_score where name = new_name for update) + 1;

    return null;
end;

$name_count$ language plpgsql;


create trigger name_score_trigger
    after insert
    on name
    for each row
execute procedure add_name_func();

e agora, quando insiro 3 linhas pela primeira vez usando muti thread, obtive:

ERROR: null value in column "score" of relation "name_score" violates not-null constraint
  Detail: Failing row contains (273, "test", null).
  Where: SQL statement "insert into name_score(name)
    values (new_name)
    on conflict (name) do update set score=(select score from name_score where name = new_name for update) + 1"
PL/pgSQL function add_name_func() line 7 at SQL statement

e há uma linha inserida com sucesso no banco de dados com pontuação 1

depois disso, essa função às vezes apresenta pontuação errada.


Eu tentei lock table e está funcionando, estou confundindo isso.

E eu quero saber se existe alguma maneira melhor de resolver isso?

Muito obrigado por ler minha pergunta.

postgresql
  • 1 respostas
  • 17 Views
Martin Hope
VansFannel
Asked: 2024-06-29 17:16:48 +0800 CST

Retorne os dados na mesma ordem em que os inseri com Sqlite3

  • 4

Acho que estou trabalhando com a versão mais recente do Sqlite e C++. Tenho uma tabela com dados, e preciso retornar esses dados na ordem que os inseri.

Tenho alguma garantia de que as colunas sempre serão devolvidas nesta ordem?

insira a descrição da imagem aqui

Talvez eu deva adicionar outra coluna para definir a ordem e usar ORDER BY:

insira a descrição da imagem aqui

sqlite
  • 1 respostas
  • 17 Views
Martin Hope
Wipqozn
Asked: 2024-06-28 21:53:29 +0800 CST

Como o sp_executesql interage com tabelas temporárias?

  • 8

Não sei por que parte do aproveitamento do SQL sp_executesqlestá funcionando da maneira que funciona quando tabelas temporárias estão envolvidas, junto com INSERTe SELECT - INTO. Estou usando o SQL Server.

Aqui está o código em questão:

-- Insert into
CREATE TABLE #results
(
       rid INT,                    
);

declare @sql nvarchar(max) = '';
set @sql = 'INSERT INTO #results (rid) VALUES (1);';
EXEC sp_executesql @sql;
select * from #results; 

-- Select into
CREATE TABLE #results2
(
       rid INT,                      
);

declare @sql2 nvarchar(max) = '';
set @sql2 = 'select rid into #results2 from #results;';
EXEC sp_executesql @sql2;
select * from #results2; 

-- Clean up
drop table #results;
drop table #results2;

Quando isso é executado, #results tem uma única linha onde rid = 1e #results2 não tem nenhuma linha, o que você pode ver aqui:

insira a descrição da imagem aqui

Honestamente, há vários pontos de confusão que tenho com isso. Para começar, eu esperaria que SELECT - INTOfalhasse, pois uma tabela chamada #results2 já deveria existir nesta sessão.

Você pode ver esse erro com este trecho semelhante de SQL que não sp_executesqlaproveita SELECT - INTO:

-- Insert into
CREATE TABLE #results
(
                rid INT,                      
);

declare @sql nvarchar(max) = '';
set @sql = 'INSERT INTO #results (rid) VALUES (1);';
EXEC sp_executesql @sql;
select * from #results; 

-- Select into
CREATE TABLE #results2
(
                rid INT,                     
);

declare @sql2 nvarchar(max) = '';
select rid into #results2 from #results;
select * from #results2; 

-- Clean up
drop table #results;
drop table #results2;

Este código, como esperado, gera o erro:

Já existe um objeto chamado '#results2' no banco de dados.

Com base nesta resposta , presumi que isso estava acontecendo porque sp_executesqltem sua própria sessão. Devido a isso, o SELECT - INTOinterior aninhado de sp_executesqlnão sabe que #results2 existe, então ele cria sua própria tabela temporária chamada #results2, insere nela e depois descarta essa tabela.

Isso faz sentido para mim, exceto que nesse mesmo sp_executesqlestá acessando a tabela #resultados. Então sp_executesqlconhece a tabela #results, mas não a tabela #results2? Além disso, meu primeiro sp_executesqlwith than INSERTtambém não teve problemas para acessar a tabela #results. Com base neste commnet , parece que o motivo sp_executesqlpara acessar #results é porque sp_executesqlna verdade cria seu próprio lote, e os lotes na mesma sessão podem ver as tabelas temporárias uns dos outros. Ótimo, exceto que voltamos à minha confusão original sobre por que não estou sp_executesqlreclamando da existência de #results2 ao executar o SELECT - INTO?


Se eu tivesse que resumir, meus principais pontos de confusão são:

  • Por que o SELECT - INTOaninhado dentro de não sp_executesqlgera um erro informando que #results2 já existe?
  • Por que a INSERTinstrução aninhada dentro de sp_executesqlnão tem problemas para acessar #resultados e inserir nela?
  • Por que o SELECT - INTOaninhado dentro de sp_executesqlnão tem problemas para acessar #resultados, mas parece não reconhecer a existência de #resultados2?
sql-server
  • 1 respostas
  • 100 Views
Martin Hope
Jeff Bauersfeld
Asked: 2024-06-28 09:23:58 +0800 CST

“Chamada de API assíncrona longa” após atualização do SQL Server

  • 6

Após a CU mais recente do SQL Server 2019, KB5037331, recebo a seguinte mensagem repetidamente em alguns dos meus logs do SqlServer Server: "Chamada de API assíncrona longa: a imparcialidade do agendamento do agendador pode ser impactada por uma invocação de API assíncrona excedendo inesperadamente [grandes 8 dígitos número] senhora."

Vi nas notas de atualização a seguinte alteração:

"Adiciona a seguinte mensagem de log quando altas latências de E/S são detectadas no Bufferpool Lazy Writer (chamada de sistema ntdll!ZwWriteFile) devido a um problema de desempenho no armazenamento subjacente:

AVISO Chamada de API assíncrona longa: a imparcialidade do agendamento do agendador pode ser afetada por uma chamada de API assíncrona que exceda inesperadamente xxx ms."

O problema é que não sei o que devo fazer com essas informações além da solução básica de problemas de E/S. O que preciso matar para fazer esta mensagem parar? E como identifico quais arquivos/objetos estão envolvidos no problema de E/S para resolver o problema subjacente?

sql-server-2019
  • 2 respostas
  • 611 Views
Martin Hope
Marc S
Asked: 2024-06-28 01:26:33 +0800 CST

Consultar estatísticas de atualização automática do Optimizer antes de executar o processo armazenado?

  • 6

Todas as evidências afirmam que isso está correto, mas preciso que alguém verifique minha matemática sobre isso...

Eu tenho um procedimento armazenado que faz o seguinte:

  1. Inserir um registro de status em uma tabela
    • O gatilho de tabela aciona a inserção de um registro em uma tabela diferente.
  2. Selecione na TabelaA.
  3. Selecione novamente na TabelaA.
  4. Selecione novamente na TabelaA.
  5. CTE encadeado selecionando entre várias tabelas (mas nenhuma das tabelas envolvidas em 1-4).

O que estou vendo é que o tempo geral de processamento desse procedimento é de alguns minutos sempre que uma das grandes tabelas do item 5 exigir uma atualização de estatísticas, em vez de segundos. No entanto, o carimbo de data/hora do registro inserido em #1 é posterior às atualizações de estatísticas que estão acontecendo como resultado de #5 (capturadas com eventos estendidos). Parece que o SQL avalia todo o processo e, se alguma tabela exigir atualizações de estatísticas, ele o fará antes de executar QUALQUER consulta dentro do procedimento e, em seguida, executará o conteúdo do procedimento.

Alguém pode confirmar que esse é o comportamento ou estou faltando alguma outra coisa?

sql-server
  • 1 respostas
  • 64 Views
Martin Hope
Marcello Miorelli
Asked: 2024-06-27 22:31:05 +0800 CST

como definir o servidor sql de criptografia em trânsito?

  • 6

hoje tive que verificar se a criptografia em trânsito estava instalada e funcionando em um determinado servidor (sql server) e se não, configurá-la.

a maneira como isso é feito é:

No SQL Server Configuration Manager, expanda Configuração de rede do SQL Server, clique com o botão direito em Protocolos para e selecione Propriedades. Na guia Sinalizadores, na caixa ForceEncryption, selecione Sim e selecione OK para fechar a caixa de diálogo. Reinicie o serviço SQL Server.

a imagem abaixo é depois de reiniciar o serviço do sql server .

insira a descrição da imagem aqui

agora, sou um DBA que gosta do paraíso do DBA e de toda automação e coisas feitas por meio de scripts.

Como eu poderia fazer isso por meio de scripts? soluções parciais também são válidas. e pode ser PowerShell, T-SQL ou qualquer outra linguagem de script.

sql-server
  • 1 respostas
  • 33 Views
Martin Hope
Adrian B.
Asked: 2024-06-27 05:05:25 +0800 CST

Bloqueio para atualização dentro dos CTEs

  • 8

Se eu fizer uma consulta usando CTEs parecida com esta:

WITH cte_a AS (
    SELECT a.id, a.something
    FROM a
    WHERE a.something IS NOT NULL 
),
-- [...] some other CTEs
cte_d AS (
    SELECT 
        cte_a.id,
        cte_a.something
    FROM cte_a
    JOIN 
        -- something
    JOIN
        -- something
    WHERE 
        -- something
    ORDER BY cte_a.id ASC
    FOR UPDATE  -- Here, will the `FOR UPDATE` locks `a` rows?
),
-- rest of the query, which will update `a.something`.

O bloqueio para atualização será aplicado nas linhas da tabela aou o bloqueio será aplicado em uma tabela materializada gerada por cte_a?

Se o bloqueio se aplicar à tabela materializada, o seguinte resolveria o problema?

WITH cte_a AS NOT MATERIALIZED (
-- Rest of the query

Estou usando o PostgreSQL v14.

Se isso mudar alguma coisa, estou mais interessado no comportamento com o nível de isolamento READ COMMITTED padrão.

postgresql
  • 1 respostas
  • 104 Views
Martin Hope
J. Mini
Asked: 2024-06-27 04:15:53 +0800 CST

Por que adicionar um índice columnstore vazio às minhas tabelas faz com que os planos de execução ignorem os bitmaps de forma consistente?

  • 9

Problema

Estou usando uma caixa SQL Server 2019 Standard Edition. Dada a edição, os níveis de compatibilidade não devem ser relevantes (os recursos do modo batch dependente do nível não são permitidos no Standard). Nesta caixa, tenho experimentado o hack de adicionar um índice columnstore filtrado e não clusterizado vazio a uma tabela temporária antes de juntá-lo a outras tabelas, permitindo assim que as consultas com a referida junção usem o modo em lote, apesar de não usarem nenhum índice columnstore . Quando faço isso, tenho encontrado regularmente o seguinte comportamento nas consultas que anteriormente não usavam o modo em lote:

  • As partes dos planos de execução que agora usam o modo em lote são executadas muito mais rapidamente. Em particular, as funções de janela tornam-se incríveis em comparação com o que eram nos planos que não tinham peças em modo lote.
  • Os planos com peças em modo batch terão sempre um custo muito menor do que as consultas que não o fazem, mesmo que demorem mais para serem executadas.
  • Às vezes, o Gather Streams fica muito mais lento, mesmo que cada operador esteja sendo executado uniformemente em dois threads nos planos que possuem etapas no modo em lote.
  • Consultas que anteriormente construíam um bitmap em uma tabela para fazer uma varredura barata e depois fazer hash em outra tabela, passando pela sonda de hash do bitmap na varredura, tornam-se muito mais lentas. Em vez de um bitmap dentro de uma varredura de índice, eles têm um operador de filtro muito caro após a varredura.

Existe alguma explicação para a observação final da minha lista? Mais importante ainda, como posso evitar a introdução do modo em lote, removendo bitmaps excelentes? Esse ponto ousado é o que quero que seja respondido aqui. Se eu pudesse ter os bitmaps e os excelentes benefícios do modo em lote em outro lugar da consulta (por exemplo, nas funções da janela), minhas consultas seriam muito mais rápidas. Aceito que provavelmente poderia indexar melhor as tabelas, mas já estava satisfeito com as junções de hash originais.

Exemplo reproduzível

Erik Darling, com razão, solicitou que eu colasse o plano, mas pensei em fazer melhor e dar um exemplo reproduzível. O seguinte usa o banco de dados StackOverflow2010 . Você pode carregar isso em um contêiner docker, se desejar.

SET STATISTICS XML OFF;

USE StackOverflow2010;

DROP TABLE IF EXISTS #IDs;

SELECT TOP (10000)
  Id
INTO
  #IDs
FROM
  Comments;

ALTER TABLE #IDs ADD CONSTRAINT RowStorePK
PRIMARY KEY CLUSTERED (Id);

SET STATISTICS XML ON;
  
;WITH [NumberedPosts] AS
(
  SELECT
    PostID
    ,ROW_NUMBER() OVER (PARTITION BY PostID ORDER BY Score) RN
  FROM
    Comments
  WHERE
    PostID IN (SELECT Id FROM #IDs)
)
SELECT
  PostID
FROM
  NumberedPosts
WHERE
  RN = 1;

/*
  Hack to get batch mode for these queries despite 
  my real machine being on Standard Edition.
*/
CREATE NONCLUSTERED COLUMNSTORE INDEX ColStoreNonClust ON #IDs (ID)
WHERE ID = 1 AND ID = 2;

-- Same query again.

;WITH [NumberedPosts] AS
(
  SELECT
    PostID
    ,ROW_NUMBER() OVER (PARTITION BY PostID ORDER BY Score) RN
  FROM
    Comments
  WHERE
    PostID IN (SELECT Id FROM #IDs)
)
SELECT
  PostID
FROM
  NumberedPosts
WHERE
  RN = 1;

Este plano é anterior à criação do índice columnstore. Ele usa um bitmap. Este plano é posterior à criação do índice columnstore. Ele não usa um bitmap e é executado muito mais lentamente que a consulta que usa bitmap.

Já vi isso tantas vezes que me convenci de que é um padrão que deve ter alguma explicação geral ou etapas de prevenção.

sql-server
  • 1 respostas
  • 92 Views
Martin Hope
Dave
Asked: 2024-06-27 00:14:11 +0800 CST

Como posso permitir que um usuário altere tabelas que não possui no Postgres?

  • 5

Preciso ser capaz de atribuir uma função aos usuários para permitir que eles façam o que quiserem nas tabelas de um esquema. Preciso fazer isso sem atribuir privilégios de superusuário no Postgres.

Já descobri como atribuir privilégios granulares. Também descobri que posso atribuir ao usuário a mesma função que possui a tabela, e ele pode eliminar a referida tabela.

No entanto, o usuário em questão não pode alterar tabelas que não são de sua propriedade. Acho que é porque quando eu crio uma nova tabela com um usuário diferente, essa nova tabela pertence automaticamente ao usuário que a criou, e não à função de administrador atribuída ao usuário em questão.

Existe uma maneira de contornar isso? As tabelas podem ser criadas por qualquer pessoa. Existe alguma maneira de atribuir uma função privada/especial que não seja de superusuário para permitir que o usuário em questão altere e elimine tabelas que não são de sua propriedade?

postgresql
  • 1 respostas
  • 21 Views
Martin Hope
postgresnewbie
Asked: 2024-06-26 18:50:41 +0800 CST

Como restaurar o backup RMAN em uma data específica

  • 5

Tenho backups diários do meu sistema de teste, que são feitos backups completos diários e também backups de arco de hora em hora. Preciso restaurar um desses backups para outro servidor Linux. Concluí todas as etapas até restaurar o banco de dados (db em modo montado). Aqui está minha lista de backups:

RMAN> list backup of database summary;


List of Backups
===============
Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
------- -- -- - ----------- --------------- ------- ------- ---------- ---
8729   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8731   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8732   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8733   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8734   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8735   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8736   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8737   B  0  A DISK        21-JUN-24       1       1       YES        DATABASE_BKP
8784   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8786   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8787   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8788   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8789   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8790   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8791   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8792   B  0  A DISK        22-JUN-24       1       1       YES        DATABASE_BKP
8840   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8842   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8843   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8844   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8845   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8846   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8847   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP
8848   B  0  A DISK        23-JUN-24       1       1       YES        DATABASE_BKP

Como faço para restaurar para 22 ou 21 de junho? Todos os backups da lista estão na mesma pasta

oracle
  • 2 respostas
  • 24 Views
Prev
Próximo

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