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
sebeid
Asked: 2024-12-20 07:32:40 +0800 CST

Estimativas do plano de execução vs. reais com filtros de desigualdade

  • 5

Tenho a seguinte consulta SQL:

declare @p1 INT = 20240703;
declare @p2 INT = 20240703;
declare @p3 NVARCHAR(50) = N'USA';

SELECT R.taxareaid, R.filtertypes
FROM region R
JOIN country C ON R.countryid = C.countryid 
where C.name = @p3
and  R.effdate <= @p1 AND R.expdate >= @p2
ORDER BY R.taxareaid 
OPTION (RECOMPILE);

https://www.brentozar.com/pastetheplan/?id=B1FTNkXHkx

CREATE TABLE [dbo].[Region](
    [regionId] [numeric](18, 0) NOT NULL,
    [taxAreaId] [numeric](18, 0) NOT NULL,
    [effDate] [numeric](8, 0) NOT NULL,
    [expDate] [numeric](8, 0) NOT NULL,
    [countryId] [numeric](18, 0) NOT NULL,
    [mainDivisionId] [numeric](18, 0) NOT NULL,
    [subDivisionId] [numeric](18, 0) NOT NULL,
    [cityId] [numeric](18, 0) NOT NULL,
    [postalCodeId] [numeric](18, 0) NOT NULL,
    [cityCompressedId] [numeric](18, 0) NOT NULL,
    [subDivCompressedId] [numeric](18, 0) NOT NULL,
    [filterTypes] [numeric](32, 0) NOT NULL,
    [updateId] [numeric](18, 0) NOT NULL,
 CONSTRAINT pk_region PRIMARY KEY CLUSTERED 
(
    [regionId] ASC
)

Problema:

  • Estimativas do Plano de Execução : Quando olho para o plano de execução, percebo que as estimativas são muito menores do que as linhas realmente processadas. Embora eu esteja usando OPTION (RECOMPILE)para evitar a detecção de parâmetros, ainda não estou obtendo estimativas precisas. Também atualizei as estatísticas na regiontabela usando uma varredura completa, mas as estimativas ainda estão incorretas.

  • Vazamento no TempDB : a consulta está causando um vazamento no TempDB durante a classificação.

O que eu tentei:

  1. Estatísticas atualizadas : executei uma verificação completa para atualizar as estatísticas na regiontabela.
  2. Índices : criei um índice em region(taxareaid)e um índice composto em (countryid, effdate, expdate, taxareaid), mas ainda estou vendo classificação no plano de execução.

Minhas perguntas:

  1. Como posso obter estimativas mais precisas do plano de execução para evitar o vazamento do TempDB durante a classificação?
  2. Como posso evitar a operação de classificação completamente? Existem outras estratégias que eu possa tentar, já que a indexação não parece resolver o problema?
sql-server
  • 2 respostas
  • 97 Views
Martin Hope
Aleksey Vitsko
Asked: 2024-12-20 06:00:37 +0800 CST

A consulta ignora a dica de índice

  • 5

Estou executando a consulta abaixo no Azure SQL DB:

SELECT 
    [TransactionID],
    [TrackingNumber],
    TRY_CAST([EventCode] as int) as EventCode,      
    [EventDesc] ,
    [EventTime],
    [EventCountry],  
    [EventState],
    [EventCity],
    [EventPostCode],
    [SpecialOperDesc],   
    [Reference]  
FROM [dbo].[MyTable]  
with (index = IX_EventTime_TrackNum_Reference)
WHERE   EventTime>= dateadd(d,-15,getdate()) 
        AND LEN(TrackingNumber) >= 22          
        AND Reference IS NOT NULL

Forçando-o a usar o índice não clusterizado IX_EventTime_TrackNum_Referencecom Index Hint, e funcionou até recentemente. O plano exec era busca de índice não clusterizado mais pesquisas em índice clusterizado.

Agora ele tenta usar o ColumnStore Index Scan em um índice columnstore não clusterizado existente . Posso vê-lo ao vivo usando abaixo:

 exec sp_WhoIsActive @get_plans = 2

O desempenho piorou, pois o ColumnStore Index não clusterizado é consideravelmente maior em tamanho do que IX_EventTime_TrackNum_Reference e tem alguns dados no delta store. O SQL DB é relativamente pequeno e o armazenamento é lento.

O que faz a consulta ignorar Index hint? E como forçá-la a usar IX_EventTime_TrackNum_Referencenovamente?

sql-server
  • 1 respostas
  • 76 Views
Martin Hope
Joyce Ferreira
Asked: 2024-12-20 00:42:25 +0800 CST

Importar CSV para Oracle Script DB

  • 5

Consegui exportar dados de uma tabela em um banco de dados Oracle no formato .csv usando o SQL Plus.

Tenho esse arquivo localmente.

Agora preciso importar esse mesmo arquivo .csv para outra tabela em outro banco de dados Oracle.

A versão do Oracle aqui no trabalho é 11.2 e não tem o utilitário SQL Loader.

O que posso usar para realizar esta importação?

Pensei em criar um script que tenha um truncate e um código para pegar linha por linha do arquivo CSV e inserir no banco de dados. Como faço isso?

Obrigado

sql-server
  • 1 respostas
  • 33 Views
Martin Hope
Daylon Hunt
Asked: 2024-12-19 06:04:19 +0800 CST

Campo Máximo da Tabela Agrupada

  • 2

Tenho uma tabela agrupada que se parece com esta:

Data_final_do_mês VersãoId
2024-06-30 1
2024-06-30 2
2024-07-31 1
2024-07-31 2
2024-07-31 3
2024-07-31 5

Para cada fim de mês, quero puxar o Max Version Id para que no final eu tenha datas de Fim de mês exclusivas e max(VersionId)'s . Tentei escrever o código, mas não está funcionando corretamente.

select distinct c.END_OF_MONTH_DATE, c.VERSION_ID, 'Assets'
    from dbo.Contracts_Version_Details c
        inner join(
            select distinct max(c1.Version_Id) as MaxVersionId, c1.END_OF_MONTH_DATE
            from dbo.Contracts_Version_Details c1
            group by c1.End_of_month_date) mv
            on c.VERSION_ID = mv.MaxVersionId
        inner join(
                    select distinct max(c2.END_OF_MONTH_DATE) as MaxDate, c2.VERSION_ID
                    from dbo.Contracts_Version_Details c2
                    group by c2.VERSION_ID
                ) as md
                on c.END_OF_MONTH_DATE = md.MaxDate
sql-server
  • 3 respostas
  • 50 Views
Martin Hope
Rawheiser
Asked: 2024-12-19 01:16:39 +0800 CST

Melhores práticas para rotação de senha de replicação de SQL

  • 5

Usamos a replicação do MSSQL Server e temos uma conta do AD dedicada para anexar a tudo e em qualquer lugar.

Precisamos rotacionar a senha, mas ainda não fizemos isso de forma limpa e sem problemas. Por exemplo, haverá uma assinatura que não recebeu a mensagem de alguma forma e deixará de funcionar.

Podemos fazer coisas antes e depois da ligação para sp_changereplicationserverpasswordsaliviar a dor (ou reduzir o incômodo)?

Precisamos: alterar os agentes distribuidores ou leitores ao mesmo tempo? Reiniciar um serviço ou trabalho, etc...

Alguma dica ou seria bem-vinda

sql-server
  • 1 respostas
  • 45 Views
Martin Hope
t316
Asked: 2024-12-18 22:12:35 +0800 CST

Uma função escalar simples se recusa a ser incorporada no postgresql 15.6, não importa o que eu tente

  • 8

Tenho a seguinte função escalar de retorno booleano que não está sendo incorporada, não importa o que eu tenha tentado (IMMUTABLE PARALLEL SAFE COST 1 é apenas a mais recente permutação de muitas tentativas malsucedidas):

CREATE OR REPLACE FUNCTION has_artificial_colors_in_food(fid uuid) RETURNS boolean
    LANGUAGE sql
    IMMUTABLE PARALLEL SAFE COST 1 AS
$$
SELECT EXISTS (SELECT 1
                 FROM food_ingredient fi
                          INNER JOIN canon_ingredient ci
                          ON fi.canon_ingredient_id = ci.id
                WHERE fi.food_id = fid
                  AND ci.artificial_color = TRUE);
$$;

O seguinte faz uma varredura de função (n chamadas da função por linha na tabela de alimentos):

select count(1) from food f
where has_artificial_colors_in_food(f.id);

Então faça:

select has_artificial_colors_in_food(f.id)
from food f;

SELECT count(1)
FROM food f
JOIN LATERAL has_artificial_colors_in_food(f.id) AS has_artificial_color ON true
WHERE has_artificial_color;

Eu tentei todos os conselhos que pude encontrar sobre como fazer a função ser inline. A versão a seguir da consulta leva 3s vs 15+ min versão com a função:

select count(1) from food f
where exists(
 SELECT 1
    FROM food_ingredient fi inner join canon_ingredient ci on fi.canon_ingredient_id = ci.id
    WHERE fi.food_id = f.id
      AND ci.artificial_color = true)

Sei que posso simplesmente reescrever minha consulta sem a função, mas é uma meta de design importante ter esses tipos de abstrações disponíveis como blocos de construção. Estou disposto a aceitar um pequeno golpe de desempenho por isso, mas não um golpe gigante porque a função não pode ser embutida.

Alguém pode me dar algumas dicas sobre o que posso estar perdendo?

Estamos usando o postgresql 15.6. A tabela food tem aprox. 750K registros. Há índices individuais em todas as colunas de junção referenciadas na função.

ATUALIZAÇÃO: Tentando evitar uma subconsulta no corpo da função, também reescrevi a função como:

CREATE OR REPLACE FUNCTION has_artificial_colors_in_food(fid uuid) RETURNS boolean
    LANGUAGE sql
    IMMUTABLE PARALLEL SAFE COST 1 AS
$$
SELECT (count(1) > 0)
  FROM food_ingredient fi
           INNER JOIN canon_ingredient ci
           ON fi.canon_ingredient_id = ci.id
 WHERE fi.food_id = fid
   AND ci.artificial_color = TRUE;
$$;

Ainda não está sendo alinhado...

postgresql
  • 2 respostas
  • 304 Views
Martin Hope
christerk
Asked: 2024-12-18 20:34:16 +0800 CST

Este código SQL é suscetível à injeção de SQL?

  • 5

Tenho um aplicativo MariaDb/PHP usado para pesquisar nomes biológicos (latino/sueco) de um grande banco de dados científico. A única entrada textual do usuário é fornecer um nome (parcial) em um textfield, lido pelo PHP e inserido em uma consulta SQL (abreviada):

    Select ... from Database.table x WHERE Condition AND MATCH 
    (x.scientific_name) AGAINST ('"full name"' IN BOOLEAN 
    MODE) ;

ou

    Select ... from Database.table x WHERE Condition
    AND x.scientific_name LIKE '%partial_name%' AND 
    !isnull(x.scientific_name ;

Essas consultas retornam 0 ou mais resultados do database.table, definidos por:

scientific_namevarchar(255)

Atualmente não estou usando consultas parametrizadas (preciso fazer isso?)

(MariaDb ver. 11.6.2, PHP ver. 8.2, servidor Debian 12 com Apache2)

EDIT: Código PHP:

//User input:
<input type='search' name='srcfield' id='srcfield' value='' size='45' maxlength='55' autofocus placeholder="Sök efter organism/taxon... (fågelnamn)" style='font-size:14px;background-color: #DCF7E7;'
oninput='fonblur1(srcfield)'>

//returns srcfield to a PHP var => $safein1 via js:
function fonblur1() {
var x = document.getElementById("srcfield");
...
}

//A large amount of various non-text input is used to build the dynamic SQL, e.g:

         <input type="checkbox"  id="cb02" name ="exakt2" onclick="" >
        <label for="cb02">search exact/whole name</label></span>


//Dynamic SQL (untranslated code):
$sqlsrc = "SELECT f.`TaxonId`,f.`Taxonkategori`,f.`Vetenskapligt_namn0`, 
f.`URL_till_taxoninformation` AS `URL_till_taxoninformation`, 
d.Familj AS Familj, d.Slakte AS Slakte, 
d.TaxonId AS TaxonId2, t.taxid, 1 AS accept , 'nosyn' AS syn
concat(d.Rike,' -› ', d.Fylum,' -› ',IFNULL(d.Klass, '~')) AS grupp, 
FROM namndata.ftextsrc f 
JOIN namndata.taxonid0 t using (Taxonkategori)
JOIN namndata.taxon0_T d USING (TaxonId) 
WHERE f.`Vetenskapligt_namn0` LIKE '%" . $safein1 . "%'  " .
 " AND d.TaxonStatus='Accepterat' AND d.".$roww2['Taxonkategori'] ." = '".$roww2['Vetenskapligt_namn']."' 
 " . $TxIdf . "    
order by grupp, d.radnr, f.`Vetenskapligt_namn0` LIMIT 0,2500;";  



// Actual code, sent to MariaDb:
SELECT f.`TaxonId`,f.`Taxonkategori`,f.`Vetenskapligt_namn0`, 
f.`URL_till_taxoninformation` AS `URL_till_taxoninformation`, 
d.Familj AS Familj, d.Slakte AS Slakte, 'nosyn' AS syn, 
d.TaxonId AS TaxonId2, t.taxid, 1 AS accept, concat(d.Rike,' -› ', d.Fylum,' -› ',IFNULL(d.Klass, '~')) AS grupp 
FROM namndata.ftextsrc f JOIN namndata.taxonid0 t using (Taxonkategori) 
JOIN namndata.taxon0_T d USING (TaxonId) 
WHERE MATCH (f.`Vetenskapligt_namn0`) AGAINST ('"carnivora"' IN BOOLEAN MODE) 
AND d.TaxonStatus='Accepterat' AND d.Fylum = 'Chordata' order by grupp, d.radnr, f.`Vetenskapligt_namn0` LIMIT 0,2500;

mysql
  • 1 respostas
  • 71 Views
Martin Hope
Baalback
Asked: 2024-12-18 06:23:46 +0800 CST

Exportando uma tabela com long raw, mas os dados em long raw não estão se movendo

  • 5

Estou tentando exportar uma tabela com long raw. O tamanho da tabela é 800 GB. O datapump não está exportando o long raw. Fiz algumas pesquisas e parece que a única maneira é transferi-los para LOB e depois exportar/importar. Então tenho que transferi-los novamente para long raw em outro banco de dados. Existe outra maneira simples?

Fiz o abaixo. Observe que o tamanho é pequeno. Fazer uma soma da tabela dba_tableestá dando cerca de 800 GB. Sei que esse tipo de dado está obsoleto, mas não posso mudar isso por enquanto.

Export: Release 19.0.0.0.0 - Production on Tue Dec 17 23:53:38 2024
Version 19.11.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "db1"."SYS_EXPORT_TABLE_01":  db1/********@sv1 directory=backup dumpfile=tablle1_d.dmp LOGFILE=log_tablle1_d.log TABLES=tablle1
 EXCLUDE=STATISTICS,INDEX parallel=10
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "db1"."tablle1"              12.54 MB      77 rows
Master table "db1"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for db1.SYS_EXPORT_TABLE_01 is:
  /backup/tablle1_d.dmp
Job "db1"."SYS_EXPORT_TABLE_01" successfully completed at Tue Dec 17 23:55:21 2024 elapsed 0 00:01:26
oracle
  • 1 respostas
  • 30 Views
Martin Hope
Cade Roux
Asked: 2024-12-18 02:06:52 +0800 CST

Verificando a validade dos sinônimos entre bancos de dados

  • 9

Fundo:

Tenho vários produtos de sistema de origem, cada um em seu próprio banco de dados, que têm dependências muito limitadas entre si, e que são bastante modulares e também meio opcionais. Eles estão potencialmente em diferentes níveis de versão em sua própria manutenção.

Tenho um banco de dados de sistema de coleta de dados separado que reúne informações de uso de outros sistemas, e gostaria que ele continuasse a ser geralmente compatível com versões anteriores e posteriores dos outros sistemas. Este sistema é todo interno ao banco de dados - trabalhos agendados, procs etc. Nenhum programa externo do Windows, serviços etc.

Idealmente, os sistemas de origem exporiam interfaces consistentes e gerenciariam o que eles próprios expõem de uma forma à prova do futuro, e eu tento utilizar isso sempre que possível. Mas sempre há exceções ao que os roteiros dos outros produtos são capazes de acomodar. Eu gostaria que versões mais recentes do sistema de coleta de dados funcionassem, independentemente de uma tabela (ou tabelas) existir ou não no sistema de origem, e simplesmente anotar isso ou ignorá-lo ou registrá-lo conforme apropriado se não for apropriado para ser usado. Se esse sistema for atualizado mais tarde, não quero necessariamente ter que tocar no sistema de coleta de dados. Portanto, nenhum procs deve ter que ser alterado ou recriado.

Geralmente usamos sinônimos para cada sistema de origem para que a renomeação do banco de dados seja realizada no menor número possível de lugares (de preferência apenas nos sinônimos).

Eu experimentei um pouco e parece que você pode CREATE SYNONYMpara uma tabela/visão que ainda não existe sem uma falha. E você pode CREATE PROCusar esses sinônimos sem falha também. Então seria possível ter o sistema instalado identicamente no sistema com e sem um dos bancos de dados de origem e deveria ser capaz de rodar sem modificações quando o banco de dados para aquele módulo for instalado (ou removido).

No momento, estou apenas procurando uma maneira de fazer as duas coisas a seguir: saber se os sinônimos apontam para algo e verificar essa coisa e garantir que ela atenda a todos os requisitos:

  1. Para saber com segurança se um sinônimo é válido. Quando a primeira coluna aqui é NULL, isso é suficiente para saber que é inválido?

SELECT object_id(base_object_name), * FROM sys.synonyms

  1. Se um sinônimo for válido, há uma maneira de obter os metadados para verificá-lo? As colunas, os tipos de dados podem ser obtidos de sys.columns(ou INFORMATION_SCHEMA), mas isso precisa ser qualificado com um nome de banco de dados conhecido - a resposta abaixo seleciona em uma tabela temporária primeiro e, em seguida, analisa o esquema da tabela temporária. Existe alguma alternativa melhor?

https://stackoverflow.com/a/27126581/18255

sql-server
  • 1 respostas
  • 44 Views
Martin Hope
adinas
Asked: 2024-12-17 17:58:10 +0800 CST

Lápides não estão sendo removidas em um banco de dados Cassandra

  • 6

Acho que as lápides não estão sendo excluídas em uma tabela do Cassandra 4.1.7.

gc_grace_seconds da tabela = 345600

Mesmo depois de executar nodetool garbagecollect(muito mais de 4 dias após a exclusão), se eu executar, nodetool tablestatsrecebo o seguinte:

insira a descrição da imagem aqui

O tamanho no disco também não diminui após executar o garbage collect.

Não tenho certeza se já corri no passado nodetool compact(o que acho que significa que preciso continuar usando?)

Pergunta paralela: como posso fazer com que o tablestats retorne informações mais recentes (em vez de 2024-12-12)

Obrigado

cassandra
  • 2 respostas
  • 60 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