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
Basil Titus
Asked: 2023-11-27 10:36:15 +0800 CST

PostgreSQL: max_worker_processes está vinculado à CPU?

  • 5
Esta questão foi migrada do Stack Overflow porque pode ser respondida no Stack Exchange dos Administradores de Banco de Dados. Migraram ontem .

Tenho visto muitos blogs de ajuste de desempenho do PostgreSQL e empresas como a EDB sugerindo colocar a configuração max_worker_processes do PostgreSQL para o número de CPUs na máquina.

Estamos usando uma VM PostgreSQL 13 dedicada na nuvem com 16 vCPUs . Mas a configuração padrão do Postgres max_worker_processes=8 . Baseia-se no valor padrão O que eu estava pensando O Postgres irá apenas até 8 vCPUs no máximo e o uso máximo esperado da CPU está em torno de 50% até alguns dias atrás, tivemos algum pico de conexão que na verdade estava ligado à sobrecarga de E/S, mas a CPU atingiu 95 -99% durante o pico.

Então, como max_worker_processes está relacionado à CPU? Isso terá algum impacto se eu deixar o valor padrão de 8? Ou existem outras maneiras de encontrar um valor ideal?

postgresql
  • 1 respostas
  • 40 Views
Martin Hope
cargt4
Asked: 2023-11-27 05:47:34 +0800 CST

Erro no observador ao executar o gancho de replicação 'before_commit'. Atualização de 200 mil linhas

  • 5

Tenho script para criptografar colunas na tabela. >200 mil linhas. Em 100k está funcionando.

UPDATE table
SET col1 = TO_BASE64(AES_ENCRYPT(col1, @keyBase, @static_iv)), 
col2 = TO_BASE64(AES_ENCRYPT(col2 , @keyBase, @static_iv))

Editar: reproduzi isso em um exemplo mais simples (> 200 mil registros):

UPDATE table
SET col1 = '1'
mysql
  • 1 respostas
  • 42 Views
Martin Hope
Zaki
Asked: 2023-11-25 16:09:58 +0800 CST

Criar VIEW usando EXECUTE ignora o parâmetro da cláusula USING?

  • 8

Estou tentando criar uma UDF que crie um recurso de cláusula VIEWdinamicamente usando o USINGrecurso. O problema é que EXECUTEnão aceitará o parâmetro passado no CREATE VIEWcomando.

CREATE OR replace FUNCTION test(name varchar) RETURNS void LANGUAGE plpgsql AS $$
BEGIN
    EXECUTE format('create or replace view %I as select $1 as id limit 1;',$1) using $1;
    RETURN;
END
$$;

Teste:

select test('tabel_view');

Saída atual:

Erro SQL [42P02]: ERRO: não há parâmetro $1
Onde: teste de função PL/pgSQL (caractere variável) linha 3 em EXECUTE

O mesmo funciona para CREATE TABLE:

CREATE OR REPLACE FUNCTION test(name varchar) RETURNS void LANGUAGE plpgsql AS $$
BEGIN
    EXECUTE format('create table %I as select $1 as id limit 1;',$1) using $1;
    RETURN;
END
$$;

Estou tentando dessa maneira porque a concatenação de strings é propensa à injeção de SQL. Além disso, a UDF em que estou trabalhando terá um array como entrada.

Alguma ideia de como resolver esse problema?

postgresql
  • 1 respostas
  • 51 Views
Martin Hope
commonSense
Asked: 2023-11-25 09:40:26 +0800 CST

Buffers compartilhados, buffers WAL e checkpointers

  • 6

Estou fazendo este curso essencial do EDB PostgreSQL e o instrutor explicou sobre a arquitetura PostgreSQL referindo-se ao diagrama que, sempre que um cliente faz uma solicitação de atualização e supõe que os dados estão presentes no buffer compartilhado (isso significa que não há necessidade de buscá-los no armazenamento de arquivos), então ' farei uma entrada nos buffers WAL e, ao confirmar , o gravador WAL gravará a transação nos logs de transações e a tornará permanente, mas não nos sistemas de arquivos (até onde entendi, essa é a tarefa do checkpointer , abaixo). tão bom. insira a descrição da imagem aqui

imagem cortesia traning.enterprisedb.com

Agora vem o checkpointer, é um processo que é executado após cada determinado intervalo de tempo "geralmente 5 minutos é o tempo ideal" e grava qualquer coisa no buffer compartilhado no armazenamento de arquivos.

Minha pergunta é: suponha que o checkpointer tenha sido executado e depois disso eu iniciei uma transação atômica e transferi 100 dólares para meu amigo, como é que meu amigo pode vê-lo imediatamente, o Postgres está fazendo consulta aos logs de transações? Ou como isso está acontecendo?

Mas depois de pensar um pouco, percebo que quando é feita a solicitação para atualizar os dados e para atualizá-los, o Postgres os traz para a memória principal e uma maneira viável de fazer isso é acompanhar os dados sujos no buffer compartilhado e atualizar os dados no próprio buffer compartilhado e nos logs de transações que podemos ter 0/1com cada entrada de transação DML para identificar se os dados estão presentes no buffer compartilhado ou não. Isso também pode ser útil ao fazer análises.

Alguém pode me ajudar a entender? Desde já, obrigado!

postgresql
  • 1 respostas
  • 46 Views
Martin Hope
lian
Asked: 2023-11-25 03:29:26 +0800 CST

potgresql usa apenas um trabalhador para criação de índice

  • 6

Para agilizar a CREATE INDEXoperação aumentei work_meme configurei max_parallel_maintenance_workerspara 8 e funcionou conforme o esperado quando estava criando um B-treeíndice na tabela. Vi 7 trabalhadores paralelos além do principal. Mas quando comecei a criar um Hashíndice na mesma tabela vi que havia apenas 1 núcleo de CPU usado pelo único trabalhador.

Existem algumas opções especiais que devo alterar para obter o mesmo resultado de quando estava criando um índice de árvore b?

postgresql
  • 1 respostas
  • 51 Views
Martin Hope
J. Mini
Asked: 2023-11-24 20:52:28 +0800 CST

Eu TABLOCKei uma mesa. Como posso ler isso?

  • 3

Eu TABLOCKeditei uma tabela para poder executar inserções em massa. Como posso lê-lo enquanto ainda está bloqueado?

Em circunstâncias normais, eu consideraria isso obviamente impossível. Felizmente, há um fator-chave que torna as circunstâncias anormais. Nesse caso, não me importo nem um pouco com ACID . A única coisa que me importa é não cancelar a consulta que editou TABLOCKa tabela.

Eu tentei WITH (NOLOCK), mas os sinais sugerem que não funciona. Estou pedindo o impossível?

Só para esclarecer, suponha que eu esteja correndo

INSERT [dbo].[Table1] WITH (TABLOCK)
SELECT * FROM [A_Lot_Of_Rows]

Meu objetivo é consultar Table1enquanto isso é executado.

Estou fazendo inserções em massa e, enquanto elas estão rodando, decidi que quero verificar alguns detalhes. Eu não me importo de qual linha eu recebo esses detalhes.

Cada linha A_Lot_Of_Rowscontém uma data. A_Lot_Of_Rowsé truncado pelo meu procedimento armazenado e é preenchido novamente em lotes baseados em data antes de ser truncado novamente. Ao ler uma linha arbitrária da tabela, posso saber em que lote estou.

sql-server
  • 2 respostas
  • 83 Views
Martin Hope
datascinalyst
Asked: 2023-11-24 15:32:33 +0800 CST

Redefinir a senha root no MySQL

  • 5

Estou fazendo login com usuário root no MySQL e o servidor foi protegido, então este parâmetro está definido default-authentication-plugin=caching_sha2_passworde este é atualmente o único usuário que tenho.

recebendo o seguinte erro: ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql
  • 1 respostas
  • 23 Views
Martin Hope
J. Mini
Asked: 2023-11-24 03:00:17 +0800 CST

Quais são as abordagens idiomáticas para copiar uma tabela (e todos os seus dados) de um servidor para outro?

  • 9

Eu tenho uma tabela enorme, digamos 500.000 linhas. Quero copiá-lo (esquema e dados) de um servidor para outro. Este não é um upsert ou qualquer tipo de atualização; É uma cópia e colagem direta e única. Quais são as abordagens idiomáticas para isso?

Eu tentei:

  • Restaurar um backup de um servidor para outro. Isso é impraticável porque o SQL Server notoriamente não pode restaurar tabelas de um backup; Ele só pode restaurar bancos de dados. E meu banco de dados é enorme!
  • Usando SSMS para criar scripts dos dados da tabela como uma sequência de instruções INSERT. Isto é impraticável, pois as inserções devem ser feitas linha por linha agonizante. Eu suspeito que isso também faz coisas horríveis no log de transações, mas ninguém me atacou por isso ainda (estou executando esse script agora, vai levar horas).
sql-server
  • 5 respostas
  • 1107 Views
Martin Hope
pva
Asked: 2023-11-23 22:39:16 +0800 CST

postgresql: por que o proprietário da tabela não consegue selecionar a partir dela?

  • 6

Na documentação do postgresql na opção GRANT está escrito:

Não há necessidade de conceder privilégios ao proprietário de um objeto (geralmente o usuário que o criou), pois o proprietário possui todos os privilégios por padrão. (O proprietário pode, no entanto, optar por revogar alguns dos seus próprios privilégios por segurança.)

Agora tenho uma tabela de banco de dados com um usuário proprietário, mas recebo ERROR: permission denied for table alertsempre que tento selecionar nesta tabela:

database=# SET ROLE user;
SET
database=> select * from pg_tables where tablename = 'alert';
 schemaname | tablename |     tableowner     | tablespace | hasindexes | hasrules | hastriggers | rowsecurity 
------------+-----------+--------------------+------------+------------+----------+-------------+-------------
 public     | alert     | user |            | t          | f        | f           | f
(1 строка)
database=> select * from alert limit 1;
ERROR:  permission denied for table alert

Por que é isso?

Não há privilégios de tabela adicionais:

database=> \z                                             Access privileges
 Schema |                Name                |   Type   | Access privileges | Column privileges | Policies 
--------+------------------------------------+----------+-------------------+-------------------+----------
 public | alert                              | table    |                   |                   | 

Além disso, o esquema e o proprietário do banco de dados foram alterados para usuário.

Para solucionar esse problema, preciso GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user;e tudo funciona bem.

Então, reiterando a pergunta: como é possível que o proprietário não consiga selecionar na mesa? Sim, eu executei REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM user;, mas espero que isso redefina os privilégios para os valores padrão e, provavelmente, esta minha suposição está errada. Mas então, como posso descobrir que minhas permissões não são mais padrão? Se eu olhar para \za saída, tudo parecerá como era antes GRANT/ REVOKE. Além disso, olhando para outros bancos de dados, onde não tenho problemas com o select, não vejo nenhuma diferença na saída do \z. Depois de pesquisar muito no Google, descobri que \la saída (e suponho \z) não é exibida para valores padrão . Mas então como posso encontrar esses padrões? \ddpa saída está vazia e estou perdido aqui :(

Agradecemos antecipadamente por qualquer ajuda.

postgresql
  • 1 respostas
  • 29 Views
Martin Hope
P5_
Asked: 2023-11-23 19:16:18 +0800 CST

Plano de jogo para atualização do SQL Server de 2014 para 2017 e 2022

  • 6

Primeiro, gostaria de pedir desculpas se meu conhecimento na área de DBA é muito limitado, já que eu e vários outros membros da equipe acabamos de receber este projeto porque temos recursos significativamente limitados.

A tarefa dada foi atualizar várias instâncias do SQL Server de 2014 para 2017 e algumas para 2022, uma vez que o EOS está iminente no próximo ano. O escopo também combinará vários bancos de dados em uma instância. Elaboramos um plano sobre como executá-lo, mas precisamos de alguma validação de que esta etapa está correta e de alguns conselhos e sugestões para a implantação.

Pré-atualização

  1. Backups Primeiro faríamos backup de todos os bancos de dados que iremos atualizar para o formato .bak. Também salvaremos instantâneos caso o .bak falhe.
  2. Testando os referidos backups Após a conclusão do backup, criaremos uma VM para restaurar os backups para garantir que o .bak ou os snapshots possam ser usados ​​​​em caso de problema durante a atualização (esta etapa é obrigatória, pois o cliente está cauteloso porque instantâneos anteriores falharam)
  3. Geraremos um relatório do Data Migration Assistant (DMA) para descobrir quais SP e funções não são compatíveis após a atualização.
  4. Tudo isso será feito primeiro em um estágio de desenvolvimento; se tudo tiver sucesso, prosseguiremos na produção.

Atualizar

  1. Corrigiremos os referidos SP e funções do relatório DMA que terão problemas após a atualização
  2. Crie um período de inatividade que também coordenaremos com a equipe de operações para interromper todos os trabalhos de e para os bancos de dados (como Talend e Microstrategy e assim por diante).

Pós-atualização

  1. Certifique-se de que nenhum SP e Funções estejam obsoletos
  2. Verifique os dados e a acessibilidade
  3. Verifique todos os aplicativos que estão usando o banco de dados.
  4. Documente todas as alterações feitas em SP e Funções

Possível método alternativo a ser usado

  1. No produto, crie outra instância e atualize-a. Se for bem-sucedido, todos os aplicativos serão redirecionados para a nova instância e desabilitarão a instância antiga.

Limitações

  1. Os dados no desenvolvimento são significativamente menores, não há recurso para replicar
  2. Criar uma VM/servidor com as mesmas especificações do prod para testar ou tentar fazer isso pode ser difícil devido à restrição de recursos

Então este é o plano de jogo atual, há alguma sugestão ou conselho? Há algo que perdemos? Há algo que devemos observar? Existe uma maneira melhor de fazer isso?

Temos uma experiência muito limitada em lidar com este tipo de tarefa, por isso estamos realmente preocupados com a possibilidade de as coisas correrem mal. É claro que testaremos isso de antemão, mesmo antes de atualizar o desenvolvedor, para garantir que tudo esteja tão tranquilo quanto possível.

Muito obrigado.

sql-server
  • 1 respostas
  • 46 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