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
SpawnRivera
Asked: 2023-10-01 05:42:51 +0800 CST

Atualizar/mesclar dados de linha da mesma tabela com nome de coluna comum

  • 5

Eu tentei-->

UPDATE tbl AS r
INNER JOIN tbl AS f ON r.columnA = f.columnA 
SET r.columnB = f.columnB, r.columnC = f.columnC
WHERE f.columnA = r.columnA

tbl como nome da tabela

antes

EU IA colunaA colunaB colunaC
1 1 dados1
2 1 dados2
3 2 dados3
4 2 dados4

depois

EU IA colunaA colunaB colunaC
2 1 dados2 dados1
4 2 dados4 dados3
mysql
  • 1 respostas
  • 45 Views
Martin Hope
bFur4list
Asked: 2023-10-01 02:37:17 +0800 CST

melhor design de banco de dados para relações aninhadas (muitos para muitos para muitos?)

  • 6

Sou um estudante que aprendeu sobre banco de dados teoricamente, não na prática.

Mas agora tenho a chance de projetar um banco de dados enquanto faço esse pequeno projeto de brinquedo em equipe.

Aqui está um diagrama (omitido 1:1, 1:n, n:m) conforme abaixo: insira a descrição da imagem aqui

E aqui está a descrição sobre tabelas:

  1. Teatro

Esta tabela contém informações sobre teatro. Um teatro pode ter muitos espetáculos.

  1. Assento

Esta tabela contém informações sobre assento.

O assento pode ser diferenciado pelo par de chaves primárias: (theater_no, seat_no)

  1. Mostrar

Esta tabela contém informações sobre show.

Um teatro pode ter muitos espetáculos. Mas o espetáculo acontecerá em apenas um teatro.

(Portanto, o Teatro depende do Show. Podemos escolher o Teatro adequado automaticamente após selecionar Show.)

  1. assento_show_grade

Esta tabela contém classificações de assento para cada assento. Esta é uma tabela de mapeamento entre 'assento' e 'show' porque um mesmo assento pode ter graus diferentes para shows diferentes.

[Aqui está um exemplo : ]

'Show 1', 'Show 2' acontecem no mesmo Teatro, 'Teatro 1' e 'Teatro 1' têm 'Assento 1'

Então, 'Assento 1' é grau A para 'Show 1' e 'Assento 1' é grau C para 'Show 2'.

  1. Usuários

Esta tabela contém informações sobre o usuário.

  1. avaliações

Esta tabela contém informações sobre avaliações.

  1. revisão_assento

Esta tabela contém informações sobre avaliações de assentos.

  1. mostrar_revisão

Esta tabela contém informações sobre avaliações do show.


Lógica de serviço:

  1. Aplicativo de logins de usuário, uma lista de páginas principal é exibida.

  2. Se o usuário selecionar um show, lista a sede do teatro (onde o show escolhido aconteceu).

  3. Se o usuário selecionar um assento, será exibida uma avaliação sobre o assento (mas a avaliação também depende do show).


O '3' é um problema principal para mim, porque é difícil projetar uma tabela de 'avaliações', pois depende não apenas do show, mas também do assento.

No início, projetei a tabela 'reviews' com 4 chaves primárias: (user_id, show_no, theater_no, seat_no) sem a tabela 'seat_review' e a tabela 'show_review'.

Mas achei que isso era muito confuso, então mudei o design como acima.

Ainda estou confuso sobre esse design, não tenho certeza se isso preservará a integridade dos dados, a velocidade de processamento, etc.


Então, minha principal dúvida é:

  1. Existe alguma boa ideia para criar uma mesa de 'revisão'? (parece (muitos-para-muitos)-para-muitos (?) para mim.)

  2. Para as 4 tabelas da esquerda ('theater', 'seat', 'seat_show_grade', 'show') tem relação cíclica. Esse design é ruim para banco de dados? Se estiver ruim, como posso mudar isso?

Obrigado pela ajuda.


Anexado:

A ideia anterior de usar tabela de mapeamento.

(O que eu disse são 4 chaves primárias, sem 'seat_review' e 'show_review')

insira a descrição da imagem aqui

mysql
  • 2 respostas
  • 58 Views
Martin Hope
Slim
Asked: 2023-09-29 16:40:38 +0800 CST

Coluna pequena separada atualizada muito de colunas jsonb grandes para otimizar o desempenho?

  • 6

Uma tabela tem a seguinte estrutura:

  • ajuda
  • b: jsonb grande
  • c: jsonb grande
  • d: carimbo de data/hora

Olhando as estatísticas em 2 semanas, veja muitas atualizações:

  • 90 mil solicitações atualizam dapenas o campo (tempo total: 25 minutos medidos no aplicativo)
  • 90 mil solicitações atualizam os campos "jsonb grande" (tempo total: 6h30 medidos no aplicativo)

Como o Postgres segue o padrão MVCC que reescreve as linhas na atualização, é interessante alterar a estrutura da tabela para ter duma tabela separada?

postgresql
  • 2 respostas
  • 26 Views
Martin Hope
Bear Bile Farming is Torture
Asked: 2023-09-29 09:56:15 +0800 CST

Por que usar $group / group_by em vez de múltiplas solicitações?

  • 5

Suponhamos que existam 100 tipos de cães espalhados pelos documentos da minha coleção. Se eu preciso agrupar por tipos de cães e depois calcular algumas estatísticas agregadas sobre cada tipo de cão, por que realizar uma consulta envolvendo , $groupque em princípio processa cada documento sequencialmente, em vez de enviar 100 consultas separadas e simultâneas ao banco de dados onde cada consulta é filtrada com base sobre o tipo de cachorro?

As 100 consultas simultâneas e separadas não seriam mais rápidas?

Se for mais rápido, em escala, qual é a desvantagem de não fazê-lo, se houver?

mongodb
  • 1 respostas
  • 29 Views
Martin Hope
Md. A. Apu
Asked: 2023-09-29 02:38:15 +0800 CST

Como usar a coluna agregada na cláusula where ao usar group by

  • 7

Eu tenho a seguinte tabela

CREATE TABLE `books` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  `author_fname` varchar(100) DEFAULT NULL,
  `author_lname` varchar(100) DEFAULT NULL,
  `released_year` int(11) DEFAULT NULL,
  `stock_quantity` int(11) DEFAULT NULL,
  `pages` int(11) DEFAULT NULL,
  PRIMARY KEY (`book_id`)
)

Tentando descobrir o ano de lançamento do primeiro e último livro do autor apenas para autores que possuem mais de um livro. A seguir está a consulta

SELECT author_lname,
       MIN(released_year) first_release,
       MAX(released_year) last_release,
       COUNT(*) book_count,
       MAX(pages) max_page_count
FROM books
GROUP BY author_lname
ORDER BY book_count DESC;

Mas não posso usar a cláusula book_countin where, então posso fazer. book_count > 1 Estou procurando uma explicação de por que isso não é possível e como obter o resultado esperado.

mysql
  • 1 respostas
  • 40 Views
Martin Hope
SQL_NoExpert
Asked: 2023-09-28 22:54:45 +0800 CST

Banco de dados SQL Server com 100 terabytes de dados

  • 5

Foi-nos atribuído um novo aplicativo em que o fornecedor espera que o banco de dados cresça para cerca de 100 TB. Eles mencionaram que o SQL Server Standard Edition é compatível.

Minha pergunta é se o SQL Server Standard Edition pode lidar adequadamente com um banco de dados desse tamanho?

A Enterprise Edition pode lidar com a reconstrução de índices online, mas no geral o SQL Server pode lidar com um banco de dados tão grande?

O maior banco de dados que gerenciei tem 3 TB e estou preocupado com o desempenho de um banco de dados de 100 TB com o SQL Server 2019.

Quaisquer conselhos de especialistas serão muito apreciados.

performance
  • 2 respostas
  • 104 Views
Martin Hope
Marko Stojakovic
Asked: 2023-09-28 18:44:38 +0800 CST

Atualizações pesadas do Postgres causam crescimento rápido da tabela

  • 6

Tenho uma pergunta relacionada a um incidente que aconteceu em um de nossos bancos de dados Postgres.

Temos um serviço backend que monitora a atividade do usuário em algum tipo de evento online. O serviço utiliza o Postgres 12 como banco de dados, e para esse tipo de evento existe uma tabela (chamarei user_eventno restante da pergunta) onde os dados são mantidos. A tabela tinha cerca de 3.500 transações por segundo, principalmente atualizações (das quais quase todas eram atualizações HOT - isso pode ser uma parte importante). insira a descrição da imagem aqui

Aqui está um gráfico separado para tuplas inseridas e excluídas (as excluídas são 0), pois não é visível na foto acima: insira a descrição da imagem aqui

O número de tuplas ativas aumentou assim: insira a descrição da imagem aqui

O uso da tabela começou em aproximadamente 11 e estava indo bem durante o dia, mas por volta das 18h o tamanho da tabela passou de aproximadamente 3 GB para> 80 GB em 2 horas. Isso fez com que o disco quase atingisse sua capacidade total, então tivemos que desabilitar o evento em andamento e fazer um vácuo completo, o que reduziu o tamanho da tabela de >80GB para ~3GB.

Aqui está o tamanho da tabela com estimativas de inchaço: insira a descrição da imagem aqui

* calculamos o inchaço exibido no segundo gráfico com esta consulta

Os índices das tabelas não cresceram tanto: insira a descrição da imagem aqui

Naquele momento (por volta das 20h30 - 21h), suspeitamos que o problema era o autovacuum e que precisava ser mais agressivo, então configuramos o tempo de soneca de 30s (o padrão é 1 min) e definimos para 0,005 e para 0 (os últimos autovacuum_vacuum_scale_factor2 autovacuum_vacuum_cost_delayparâmetros definimos apenas para a tabela crítica). Antes dessas mudanças, o autovacuum era executado uma vez a cada 60s antes das 18h e depois das 18h uma vez a cada 2min (devido ao crescimento da tabela).

Talvez uma informação importante seja que durante todo o evento, a grande maioria dos checkpoints foram solicitados (não cronometrados) com frequência de uma vez a cada 3-4 minutos: insira a descrição da imagem aqui

Depois disso, o problema não se repetiu, mas ainda não conseguimos explicar por que e como aconteceu esse grande aumento no tamanho da tabela. Após uma inspeção detalhada, o autovacuum (e a autoanalyse) funcionou o tempo todo na mesa (confirmamos isso em métricas e logs).

Para lhe dar mais contexto, notamos uma mudança na dinâmica dos buffers quando a tabela começou a aumentar rapidamente (por volta das 18h): insira a descrição da imagem aqui

Alguém tem uma ideia do que/onde procurar para explicar isso? Se precisar de mais informações, posso fornecê-las.

Dados adicionais: o esquema da tabela user_event é este:

# \d user_event;
                          Table "public.user_event"
              Column              |           Type           | Collation | Nullable | Default 
----------------------------------+--------------------------+-----------+----------+---------
 id                               | uuid                     |           | not null | 
 event_id                         | text                     |           | not null | 
 user_id                          | bigint                   |           | not null | 
 server_id                        | integer                  |           | not null | 
 state                            | text                     |           | not null | 
 generator_type                   | text                     |           |          | 
 timestamp_when_claimable         | timestamp with time zone |           | not null | 
 claimeditems                     | jsonb                    |           | not null | 
 timestamp_when_energy_full       | timestamp with time zone |           | not null | 
 overflow_energy                  | integer                  |           | not null | 
 timestamp_when_energy_cost_reset | timestamp with time zone |           | not null | 
 grid                             | jsonb                    |           | not null | 
 refill_count                     | integer                  |           | not null | 
Indexes:
    "user_event_pkey" PRIMARY KEY, btree (id)
    "idx_event_id" btree (event_id)
    "idx_event_id_state" btree (event_id, state)
    "idx_login_id" btree (login_id)
    "idx_login_id_event_id" btree (login_id, event_id)

A versão do Postgres é 12, com os parâmetros mais importantes:

  • buffers_compartilhados: '6GB'
  • manutenção_work_mem: 1 GB
  • max_wal_size: 10 GB
  • min_wal_size: 1 GB
  • checkpoint_timeout: '10min'
  • efetivo_cache_size: "58 GB"
  • log_autovacuum_min_duration: 0
  • autovacuum_vacuum_scale_factor: 0,02
  • autovacuum_analyze_scale_factor: 0,01

Os recursos da VM são:

  • 16 CPUs
  • 64 GB de RAM
  • Disco SSD de 250 GB
postgresql
  • 1 respostas
  • 43 Views
Martin Hope
markzzz
Asked: 2023-09-28 15:16:06 +0800 CST

Como ordenar por COALESCE por alguns campos?

  • 6

Digamos que tenho esta consulta:

DECLARE @QueryString NVARCHAR(MAX) ;
SELECT @QueryString = COALESCE(@QueryString + ' UNION ALL ','')
                      + 'SELECT '
                      + '''' + QUOTENAME(SCHEMA_NAME(sOBJ.schema_id))
                      + '.' + QUOTENAME(sOBJ.name) + '''' + ' AS [TableName]
                      , COUNT(*) AS [RowCount] FROM '
                      + QUOTENAME(SCHEMA_NAME(sOBJ.schema_id))
                      + '.' + QUOTENAME(sOBJ.name) + ' WITH (NOLOCK) '
FROM sys.objects AS sOBJ
WHERE
      sOBJ.type = 'U'
      AND sOBJ.is_ms_shipped = 0x0
ORDER BY SCHEMA_NAME(sOBJ.schema_id), sOBJ.name ;
EXEC sp_executesql @QueryString
GO

que extraem todas as tabelas de um banco de dados e o número de registros em cada tabela.

A pergunta é bem fácil, mas não consigo descobrir como fazer :) Como posso fazer o pedido por TableName? Ou RowCount?

Colocá-lo em ordem por cláusula me dá um erro (ou seja, sintaxe incorreta perto de 'SCHEMA_NAME'. ).

Obrigado por qualquer dica sofisticada.

sql-server
  • 2 respostas
  • 53 Views
Martin Hope
WannabeCoder
Asked: 2023-09-28 00:20:33 +0800 CST

Por que o valor de retorno de JSON_EXTRACT é tratado de forma diferente dependendo do operador?

  • 7

Estou usando o MySQL 8.0 (dentro do Banco de Dados do Azure para MySQL Server).

Notei um comportamento estranho ao consultar a funcionalidade "json_extract". No exemplo abaixo, estou consultando um campo VARCHAR que contém o texto JSON válido: {"myfield":"123456"}.

SELECT json_extract(jsontext, '$.myfield') raw_extract,
       LENGTH(json_extract(jsontext, '$.myfield')) raw_extract_length,
       CASE WHEN json_extract(jsontext, '$.myfield') = '123456' THEN 'true' ELSE 'false' END matches_no_quotes,
       CASE WHEN json_extract(jsontext, '$.myfield') = '"123456"' THEN 'true' ELSE 'false' END matches_with_quotes,
       CASE WHEN json_extract(jsontext, '$.myfield') LIKE '"%"' THEN 'true' ELSE 'false' END matches_wildcard_dbl_quotes

O que é estranho é que o valor retornado por json_extract parece se comportar de maneira diferente dependendo de qual comparação está interagindo com ele:

  • extração_prima -> "123456"
  • raw_extract_length -> 8
  • corresponde_no_quotes -> verdadeiro
  • corresponde_com_quotes -> falso
  • matches_wildcard_dbl_quotes -> verdadeiro

Como você pode ver, há basicamente dois valores de retorno: um com aspas duplas incluídas e outro sem. LENGTH(), o valor de retorno imediato e os operadores LIKE agem como se existissem aspas duplas. A igualdade (=) não funciona como se as aspas existissem.

Minha melhor teoria é que o tipo de retorno direto não é VARCHAR e, em vez disso, é algum tipo de tipo de dados JSON, mas a documentação do MySQL não confirmou ou negou isso. Como alguém que se depara com isso pela primeira vez, esse comportamento contraditório é muito confuso. Alguém pode lançar alguma luz sobre isso?

mysql
  • 1 respostas
  • 88 Views
Martin Hope
eathan
Asked: 2023-09-27 19:49:24 +0800 CST

A senha SYS expirou e não pode ser alterada devido a ORA-00257: Erro do Archiver

  • 5

No passado : quando tive o erro ORA-00257: Archiver error, resolvi-o usando o comando RMAN:

rman target sys/1234

delete archivelog all;

Desta vez , quando tento me conectar ao destino rman :

rman target sys/1234

Eu recebo o erro:

RMAN-00554: initialization of internal recovery manager packagefailed.  
RMAN-04005: error from target database.  
ORA-28001:the password has expired.

Quando tento me conectar com o sqlplus como sys SYSDBA , gera o seguinte erro: ERRO:

ORA-28001: the password has expired
Changing password for SYS
New password:

Quando digito a nova senha , o erro que aparece é:

ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

Então o problema é que..

  • Quando me conecto através do sqlplus como sys SYSDBA, não consigo alterar a senha expirada do sys por causa do archivelog RMAN.
  • Quando tento corrigir o erro do RMAN, não consigo me conectar ao RMAN devido à senha sys expirada.

Como posso resolver isso?

oracle
  • 2 respostas
  • 83 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