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
Rebecca
Asked: 2022-10-14 01:44:07 +0800 CST

Por que meu ORDER BY em STRING_AGG nem sempre funciona?

  • 24
Esta pergunta foi migrada do Stack Overflow porque pode ser respondida no Database Administrators Stack Exchange. Migrado há 27 dias .

Eu tenho uma tabela que consiste em um ID de registro, um ID de grupo (vinculando 1 ou mais registros em um grupo) e um valor de hash para cada registro.

CREATE TABLE HashTable(
    RecordID VARCHAR(255),
    GroupIdentifier VARCHAR(255),
    Hash VARCHAR (255),
    GroupHashList VARCHAR(4000)
)

(Eu sei que esta não é uma tabela eficiente, mas é apenas uma tabela temporária para os propósitos deste exemplo).

Eu quero gerar um hash para cada grupo, então pensei que a maneira mais simples seria concatenar os hashes de cada registro do grupo. RecordIDs são exclusivos, mas o que esses registros se relacionam não são necessariamente exclusivos, portanto, os hashes podem ser duplicados. O objetivo disso é sinalizar grupos totalmente duplicados, ou seja, um grupo onde todos os registros desse grupo são duplicados de todos os registros de outro grupo. A GUI precisa que todos os membros do grupo tenham o mesmo hash para reconhecê-los como um grupo duplicado.

Estou usando STRING_AGG para concatenar os hashes individuais dos registros no grupo e classificá-los pelo hash para garantir que obtenha a mesma sequência de caracteres para grupos duplicados. Na verdade, não me importo com a ordem dos hashes, desde que seja sempre a mesma. Quando executo como uma consulta SELECT, funciona bem e posso ver strings idênticas para grupos duplicados. Quando eu pego essa mesma consulta SELECT e a coloco em uma consulta UPDATE, a ordenação parece se perder.

SELECT STRING_AGG([Hash],';') WITHIN GROUP (ORDER BY [Hash] ASC) 
FROM HashTable
GROUP BY [GroupIdentifier]

Isso fornece os resultados (para um exemplo de par de grupos duplicados):

73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697
73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697

Quando coloco esse mesmo código na consulta UPDATE, ele não os classifica corretamente:

UPDATE HashTable
SET GroupHashList = c.HashList
FROM HashTable
INNER JOIN (
    SELECT (STRING_AGG([Hash],';') WITHIN GROUP (ORDER BY [Hash] ASC)) AS [HashList],
        [GroupIdentifier]
    FROM HashTable
    GROUP BY [GroupIdentifier]) c
ON c.[GroupIdentifier] = HashTable.[GroupIdentifier]

Resultados para os mesmos dois grupos que são gravados na tabela:

73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697
73F294873462B2BA0E930FD16DCCB7;E44256CE7CFCB971EB679BAC25A697;90E749375DF806CB6E3F5CA48FFA38

o que estou perdendo?

O que estou recebendo pela primeira vez é

Hash1; Hash2; Hash3
Hash1; Hash2; Hash3

Mas quando está na consulta UPDATE, recebo

Hash1; Hash2; Hash3
Hash1; Hash3; Hash2

A consulta de atualização é classificada por ID de registro, embora eu não saiba se isso é coincidência. ( https://dbfiddle.uk/CPG1-z2l )

sql-server
  • 1 respostas
  • 1074 Views
Martin Hope
Joe Obbish
Asked: 2019-03-22 20:21:55 +0800 CST

Por que um loop simples resulta em esperas ASYNC_NETWORK_IO?

  • 24

O seguinte T-SQL leva cerca de 25 segundos na minha máquina com SSMS v17.9:

DECLARE @outer_loop INT = 0,
@big_string_for_u VARCHAR(8000);

SET NOCOUNT ON;

WHILE @outer_loop < 50000000
BEGIN
    SET @big_string_for_u = 'ZZZZZZZZZZ';
    SET @outer_loop = @outer_loop + 1;
END;

Acumula 532 ms de ASYNC_NETWORK_IOesperas de acordo com sys.dm_exec_session_wait_statse sys.dm_os_wait_stats. O tempo total de espera aumenta à medida que o número de iterações de loop aumenta. Usando o wait_completedevento estendido, posso ver que a espera acontece aproximadamente a cada 43 ms, com algumas exceções:

mesa de espera

Além disso, posso obter as pilhas de chamadas que ocorrem logo antes da ASYNC_NETWORK_IOespera:

sqldk.dll!SOS_DispatcherBase::GetTrack+0x7f6c
sqldk.dll!SOS_Scheduler::PromotePendingTask+0x204
sqldk.dll!SOS_Task::PostWait+0x5f
sqldk.dll!SOS_Scheduler::Suspend+0xb15
sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf6af
sqllang.dll!CSECCNGProvider::GetBCryptHandleFromAlgID+0xf44c
sqllang.dll!SNIPacketRelease+0xd63
sqllang.dll!SNIPacketRelease+0x2097
sqllang.dll!SNIPacketRelease+0x1f99
sqllang.dll!SNIPacketRelease+0x18fe
sqllang.dll!CAutoExecuteAsContext::Restore+0x52d
sqllang.dll!CSQLSource::Execute+0x151b
sqllang.dll!CSQLSource::Execute+0xe13
sqllang.dll!CSQLSource::Execute+0x474
sqllang.dll!SNIPacketRelease+0x165d
sqllang.dll!CValOdsRow::CValOdsRow+0xa92
sqllang.dll!CValOdsRow::CValOdsRow+0x883
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x15d
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x638
sqldk.dll!ClockHand::Statistic::RecordClockHandStats+0x2ad
sqldk.dll!SystemThread::MakeMiniSOSThread+0xdf8
sqldk.dll!SystemThread::MakeMiniSOSThread+0xf00
sqldk.dll!SystemThread::MakeMiniSOSThread+0x667
sqldk.dll!SystemThread::MakeMiniSOSThread+0xbb9

Finalmente, notei que o SSMS usa uma quantidade surpreendente de CPU durante o loop (cerca de meio núcleo em média). Não consigo descobrir o que o SSMS está fazendo durante esse período.

Por que um loop simples causa ASYNC_NETWORK_IOesperas quando executado por meio do SSMS? A única saída que pareço obter do cliente dessa execução de consulta é "Comandos concluídos com êxito". mensagem.

sql-server ssms
  • 1 respostas
  • 2410 Views
Martin Hope
Jay Cummins
Asked: 2018-09-21 07:20:52 +0800 CST

Como você visualiza as mensagens do PostgreSQL (como RAISE NOTICE) no DBeaver?

  • 24

Eu acho que esta é uma pergunta de UI/Configuração do DBeaver, mas não consigo ver onde estão as mensagens ao executar um script (Alt-X).

No PGAdminIII, eu executaria um script e veria a NOTICEsaída: insira a descrição da imagem aqui

No DBeaver, o mesmo script não sai na guia "Estatísticas". Mas não tenho certeza se é aqui que devo procurar as mensagens:
insira a descrição da imagem aqui

postgresql dbeaver
  • 1 respostas
  • 26384 Views
Martin Hope
Lopsided
Asked: 2018-06-14 09:31:09 +0800 CST

Se um banco de dados tiver apenas uma inserção, é ruim indexar todas as combinações de colunas possíveis?

  • 24

Estou trabalhando em um sistema de relatórios que exigirá grandes consultas de seleção, mas é baseado em um banco de dados que é preenchido apenas uma vez. O sistema de gerenciamento de banco de dados é o Microsoft SQL Server 2017. Provavelmente há uma maneira melhor de projetar um sistema como esse, mas vamos abordar isso teoricamente.

Teoricamente falando:

  1. Se tivermos um banco de dados muito grande (mais de 150 milhões de linhas em várias tabelas)
  2. E podemos assumir que o banco de dados será preenchido apenas uma vez.

A indexação de todas as combinações de colunas possíveis pode ter um impacto negativo no desempenho de uma consulta selecionada?

sql-server t-sql
  • 4 respostas
  • 5103 Views
Martin Hope
Maxim Yefremov
Asked: 2018-05-28 10:24:22 +0800 CST

Tirando as aspas de strings JSON; imprimir strings JSON sem aspas

  • 24
SELECT json_array_elements('["one", "two"]'::json)

dá resultado

| json_array_elements |
| :------------------ |
| "um" |
| "dois" |

Eu gostaria de ter o mesmo, mas sem as aspas:

one
two

Parece que não posso usar ->>aqui porque não tenho nomes de campos no JSON. É apenas um array de strings.

Versão do Postgres: PostgreSQL 10.0 em x86_64-apple-darwin, compilado por i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Baseado na Apple Inc. build 5658) (LLVM build 2336.11.00), 64- pedaço

postgresql json
  • 4 respostas
  • 29402 Views
Martin Hope
lumo
Asked: 2017-11-16 02:02:21 +0800 CST

Ignorar acentos na cláusula 'where'

  • 24

Em nosso banco de dados, temos várias entradas com acentos graves, acentos circunflexos ou carons (aka hačeks). Esses acentos são coletivamente também conhecidos como sinais diacríticos .

Agora, nossos usuários desejam encontrar entradas que incluam esses sinais diacríticos quando pesquisam entradas sem. Vou mostrar isso com um exemplo simples:

Em nosso banco de dados temos a entrada (contato com nome)

Millière

...então este nome está correto no país em que a pessoa vive.

Em nosso país não temos caracteres com sinais diacríticos, portanto nosso usuário procura por Milliere. Nenhum resultado aparece, como èobviamente não corresponde e.

Eu não tenho idéia de como isso poderia ser realizado como é, è, êe muitos mais estão disponíveis (e este é apenas um exemplo para carta e...).

(A outra maneira seria muito mais fácil, pois eu poderia simplesmente substituir todas as letras por caron/haček pela básica. Obviamente, nossos usuários querem a versão correta do nome no banco de dados, não a aleijada.)

sql-server sql-server-2008
  • 1 respostas
  • 27131 Views
Martin Hope
Brian
Asked: 2017-01-31 10:57:43 +0800 CST

(NOLOCK) vs NOLOCK

  • 24

Eu estava investigando alguns bloqueios quando vi uma consulta parecida com esta:

SELECT SomeField FROM SomeTable NOLOCK

Eu vi o NOLOCKe fiquei curioso como ele poderia estar bloqueando outras consultas, neste caso DELETEdeclarações. Dei uma olhada rápida nas fechaduras usando sp_locke aqui está o que vi:

DB      S   GRANT

TAB     IS  GRANT

PAG    S    GRANT

Agora, meu entendimento é que NOLOCKdeveria ter apenas um bloqueio de estabilidade de esquema, por que foi então pegando um bloqueio IS?

Minha curiosidade foi aguçada. Eu olhei no BOL e vi que havia duas maneiras de usá-lo, WITH (NOLOCK)e o obsoleto (NOLOCK), então decidi experimentá-los. Eu executei as seguintes consultas seguidas pela execução sp_lock:

SELECT SomeField FROM SomeTable WITH (NOLOCK)
CONCESSÃO DB S

CONCESSÃO TAB Sch-S
SELECT SomeField FROM SomeTable (NOLOCK)
CONCESSÃO DB S

CONCESSÃO TAB Sch-S

Com certeza, existem meus bloqueios de estabilidade de esquema. Então, minha pergunta é esta: o que está acontecendo aqui? Se a sintaxe aceita para usar NOLOCK for WITH (NOLOCK)ou (NOLOCK), por que a consulta não apresenta um erro quando é executada simplesmente NOLOCK(sem os parênteses)? Se for suportado, por que está agarrando um bloqueio IS? O que estou perdendo aqui? Estive pesquisando online por uma resposta, mas até agora não consegui.

Eu testei isso em 2008R2 e 2012.

sql-server syntax
  • 1 respostas
  • 4189 Views
Martin Hope
Paul White
Asked: 2016-12-29 05:20:49 +0800 CST

O SQL Server armazena em cache o resultado de uma função com valor de tabela de várias instruções?

  • 24

Uma função com valor de tabela com várias instruções retorna seu resultado em uma variável de tabela.

Esses resultados são reutilizados ou a função é sempre totalmente avaliada toda vez que é chamada?

sql-server execution-plan
  • 1 respostas
  • 3195 Views
Martin Hope
Derek Downey
Asked: 2011-01-08 06:38:03 +0800 CST

É prática comum misturar tabelas InnoDB e MyISAM no mesmo servidor?

  • 25

Eu tenho um único banco de dados de cerca de 4,5 GB em execução em um servidor com 8 GB de RAM. A grande maioria das tabelas são MyIsam (cerca de 4,3 GB), mas em breve estarei convertendo algumas delas para InnoDB. (Será um processo lento, concentrando-se inicialmente nas tabelas de gravação mais intensiva).

Há algo de errado em executar um servidor dedicado onde existem os dois tipos de mecanismos de armazenamento?

mysql innodb
  • 3 respostas
  • 17941 Views
Martin Hope
BrunoLM
Asked: 2011-01-05 22:31:44 +0800 CST

Qual agrupamento devo escolher para um site multilíngue?

  • 25

Um agrupamento tem alguma influência sobre a velocidade de uma consulta? O tamanho de uma tabela muda dependendo do agrupamento?

Se eu quiser criar um site que suporte todos os idiomas possíveis (vamos, por exemplo, Google), qual seria o agrupamento recomendado?

Vou precisar armazenar caracteres como 日本語, minhas pesquisas no site terão que retornar somethingpara a sóméthíngentrada, deve ser insensível a maiúsculas e minúsculas também.

Como sei qual é a melhor escolha a fazer? Qual agrupamento se adapta melhor a este caso?

sql-server performance
  • 3 respostas
  • 5177 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