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
Hassan Baig
Asked: 2016-04-04 06:15:28 +0800 CST

DELETE linhas que não são referenciadas em outra tabela

  • 31

Eu tenho duas tabelas em um banco de dados PostgreSQL 9.3: Table link_replytem uma chave estrangeira chamada which_groupapontando para table link_group.

Eu quero excluir todas as linhas de link_grouponde não link_replyexiste nenhuma linha relacionada. Parece básico o suficiente, mas eu tenho lutado com isso.

Será algo simples assim (não está funcionando)?

DELETE FROM link_group WHERE link_reply = NULL;
postgresql join
  • 1 respostas
  • 30054 Views
Martin Hope
xeraphim
Asked: 2015-10-07 02:57:53 +0800 CST

Arquivamento de dados antigos

  • 31

No momento, estamos enfrentando alguns problemas de desempenho, pois nosso banco de dados está ficando muito grande. Há dados armazenados dos últimos 10 anos e não vejo motivo para que os dados com mais de 2 anos tenham que ser armazenados nas mesmas tabelas que os novos dados.

Agora, como não tenho experiência muito profunda em administrar bancos de dados, estou procurando as melhores maneiras de arquivar dados antigos.


Informações

  • Existem cerca de 310.000.000 registros no banco de dados no total.

  • O banco de dados precisa de 250 GB no disco rígido.

  • A versão do servidor é o SQL Server 2008 com nível de compatibilidade SQL Server 2005 (90), mas planejamos atualizar para o SQL Server 2012 em breve

Já pensei em duas possibilidades:

Novo banco de dados

Crie um banco de dados semelhante ao do servidor de produção e insira todos os dados antigos no novo banco de dados.

  • Desvantagem: Como os servidores vinculados não são permitidos em nosso ambiente, seria difícil juntar os dados antigos, se necessário

Esquema de histórico

Crie um novo esquema fe [hist] com as mesmas tabelas do banco de dados de produção. Insira todos os dados antigos nessas novas tabelas no novo esquema.

  • Vantagem: Fácil adesão, se dados antigos forem necessários no futuro


  • Você prefere uma das soluções sobre a outra?
    • Por quê?
  • Existem possibilidades melhores?
  • Existem ferramentas existentes com as quais essa tarefa é facilmente possível?
  • Algum outro pensamento?

desde já, obrigado

Editar

Pergunta adicional:

A tabela de arquivos recém-criada também precisaria de chaves primárias/estrangeiras?

Ou eles deveriam ter apenas as colunas, mas sem chaves/restrições?

sql-server migration
  • 5 respostas
  • 50179 Views
Martin Hope
Jānis
Asked: 2015-07-29 23:09:08 +0800 CST

SET STATISTICS IO- worktable/workfile

  • 31

Estou executando a consulta, que produz o plano: insira a descrição da imagem aqui

Estatística IO:

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Workfile'. Scan count 128, logical reads 5952, physical reads 576, read-ahead reads 6080, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Table1'. Scan count 9, logical reads 90450, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Então, algumas perguntas

1. Por que o Statistics IO mostra leituras mais altas do que o Profiler? .

Quanto ao KB314648 , tudo bem se o Profiler relatar números mais altos do que o Statistics IO. Mas o Profiler mostra 92283as leituras na consulta descrita, na mesma execução. Isso significa que o Profiler não conta as leituras do arquivo de trabalho/tabela de trabalho?

2. Qual é a diferença entre "Worktable" e "Workfile"

Eu descobri que:

  • arquivos de trabalho podem ser usados ​​para armazenar resultados temporários para junções de hash e agregações de hash.
  • tabelas de trabalho podem ser usadas para armazenar resultados temporários para spool de consulta, variáveis ​​lob, variáveis ​​XML e cursores.

Existe alguma diferença física entre eles?

3. Por que existe "Worktable" neste caso particular?

Por que eu tenho uma mesa de trabalho, se houver 0 leituras lógicas? Está incluído nas estatísticas IO apenas porque pode ser necessário (no caso de estimativas incorretas)?

A descrição encontrada no technet parece vaga.

4. O que significa "leituras físicas" no arquivo de trabalho?

Isso significa que não havia memória suficiente concedida para a consulta, então os dados tiveram que ser gravados no disco enquanto a consulta é executada (aviso amarelo no Hash Match)? Posso presumir que sempre que vejo a tabela de trabalho/arquivo de trabalho no Statistics IO com leituras físicas, não há memória suficiente concedida para a consulta e alguns resultados intermediários da consulta tiveram que ser gravados no disco tempdb? E sempre que vejo apenas leituras lógicas, a RAM é usada?

5. Um "arquivo de trabalho" significa exatamente uma tabela que é usada para um propósito?

Se houver mais de um arquivo/mesa de trabalho, não posso saber para qual operação ele é usado.

sql-server sql-server-2012
  • 1 respostas
  • 13520 Views
Martin Hope
Mark Goldfain
Asked: 2015-07-23 12:49:36 +0800 CST

Compatibilidade do SQL Server com os novos padrões TLS

  • 31
  • Os principais navegadores estão indo além do SSL3.0 e TLS1.0.
  • O Conselho de Segurança do PCI declarou uma data de fim de vida para que esses protocolos sejam considerados criptografia suficientemente forte.

Precisamos nos afastar desses protocolos, para usar outros mais novos e mais fortes. Em servidores Windows, você pode facilmente desabilitar esses protocolos antigos e, em vez disso, oferecer apenas TLS1.1 ou superior. No entanto, conforme observado em outro lugar , o Microsoft SQL Server 2008 R2 e o SQL Server 2012 (padrão, pelo menos) não serão iniciados se esses protocolos inferiores estiverem desabilitados. No entanto, há um número crescente de versões do MS SQL Server. Existem as edições SQL Server Standard, Business Intelligence, Enterprise, Express, Web e Compact. E, claro, há o SQL Server 2008, 2012, 2014 e (em pré-lançamento) 2016.

Qual dessas edições oferece suporte ou oferecerá suporte ao uso apenas de protocolos TLS1.1 ou superior?

sql-server security
  • 6 respostas
  • 37548 Views
Martin Hope
Geoff Patterson
Asked: 2015-07-23 11:48:14 +0800 CST

Diretrizes para manutenção do índice de texto completo

  • 31

Quais diretrizes devem ser consideradas para manter índices de texto completo?

Devo RECONSTRUIR ou REORGANIZAR o catálogo de texto completo (ver BOL )? O que é uma cadência de manutenção razoável? Que heurística (semelhante aos limites de fragmentação de 10% e 30%) poderia ser usada para determinar quando a manutenção é necessária?

(Tudo abaixo é simplesmente informação extra elaborando a questão e mostrando o que eu pensei até agora.)



Informações extras: minha pesquisa inicial

Existem muitos recursos sobre a manutenção do índice b-tree (por exemplo, esta questão , os scripts de Ola Hallengren e várias postagens de blog sobre o assunto em outros sites). No entanto, descobri que nenhum desses recursos fornece recomendações ou scripts para manter índices de texto completo.

Há documentação da Microsoft que menciona que desfragmentar o índice b-tree da tabela base e, em seguida, executar REORGANIZE no catálogo de texto completo pode melhorar o desempenho, mas não aborda nenhuma recomendação mais específica.

Também encontrei esta pergunta , mas ela é focada principalmente no rastreamento de alterações (como as atualizações de dados na tabela subjacente são propagadas no índice de texto completo) e não no tipo de manutenção agendada regularmente que pode maximizar a eficiência do índice.

Informações extras: testes básicos de desempenho

Este SQL Fiddle contém código que pode ser usado para criar um índice de texto completo com controle de AUTOalterações e examinar o tamanho e o desempenho da consulta do índice à medida que os dados na tabela são modificados. Quando executo a lógica do script em uma cópia dos meus dados de produção (em oposição aos dados fabricados artificialmente no violino), aqui está um resumo dos resultados que estou vendo após cada etapa de modificação de dados:

insira a descrição da imagem aqui

Mesmo que as declarações de atualização neste script tenham sido bastante planejadas, esses dados parecem mostrar que há muito a ganhar com a manutenção regular.

Informações extras: Ideias iniciais

Estou pensando em criar uma tarefa noturna ou semanal. Parece que esta tarefa pode executar uma RECONSTRUÇÃO ou REORGANIZAÇÃO.

Como os índices de texto completo podem ser muito grandes (dezenas ou centenas de milhões de linhas), gostaria de poder detectar quando os índices no catálogo estão fragmentados o suficiente para justificar uma RECONSTRUÇÃO/REORGANIZAÇÃO. Estou um pouco incerto sobre o que a heurística pode fazer sentido para isso.

sql-server full-text-search
  • 1 respostas
  • 9892 Views
Martin Hope
Sean the Bean
Asked: 2015-05-28 13:35:12 +0800 CST

Consultar a definição de uma visão materializada no Postgres

  • 31

Eu estou querendo saber como consultar a definição de uma visão materializada no Postgres. Para referência, o que eu esperava fazer é muito semelhante ao que você pode fazer para uma visualização regular:

SELECT * FROM information_schema.views WHERE table_name = 'some_view';

que lhe dá as seguintes colunas:

table_catalog
table_schema
table_name
view_definition
check_option
is_updatable
is_insertable_into
is_trigger_updatable
is_trigger_deletable
is_trigger_insertable_into

Isso é possível para visualizações materializadas?

Da minha pesquisa até agora, parece que as visões materializadas são deliberadamente excluídas do information_schema, porque

O information_schema só pode mostrar objetos que existem no padrão SQL.

( http://www.postgresql.org/message-id/[email protected] )

Como eles parecem estar totalmente excluídos do information_schema, não tenho certeza de como fazer isso, mas o que eu gostaria de fazer é duplo:

  1. Consultar se existe uma visão materializada específica. (Até agora, a única maneira que encontrei de fazer isso é tentar criar uma visualização de esteira com o mesmo nome e ver se ela explode.)
  2. E, em seguida, consulte a definição da visualização materializada (semelhante à view_definitioncoluna em information_schema.views).
postgresql materialized-view
  • 4 respostas
  • 36646 Views
Martin Hope
Rob Bednark
Asked: 2014-10-30 10:24:38 +0800 CST

Uma consulta de longa duração do Postgres é abortada se a conexão for perdida/interrompida?

  • 31

Se eu abrir uma conexão com o Postgres e emitir uma consulta de longa duração e, em seguida, interrompê-la (por exemplo, encerrar o processo do cliente que abriu a conexão), a consulta de longa duração continuará a ser executada ou será interrompida automaticamente? Isso é configurável?

(estou usando o Postgresql 9.2.9)

postgresql connections
  • 3 respostas
  • 22550 Views
Martin Hope
user2732180
Asked: 2014-06-12 17:28:44 +0800 CST

Como usar COALESCE com várias linhas e sem vírgula precedente?

  • 31

Estou tentando alcançar o seguinte:

California | Los Angeles, San Francisco, Sacramento
Florida    | Jacksonville, Miami

Infelizmente, estou recebendo ", Los Angeles, San Francisco, Sacramento, Jacksonville, Miami"

Eu posso alcançar meus resultados desejados usando a função STUFF, mas queria saber se existe uma maneira mais limpa de fazer isso usando COALESCE?

STATE       | CITY
California  | San Francisco
California  | Los Angeles
California  | Sacramento
Florida     | Miami
Florida     | Jacksonville 


DECLARE @col NVARCHAR(MAX);
SELECT @col= COALESCE(@col, '') + ',' + city
FROM tbl where city = 'California';
SELECT @col;

Obrigado

sql-server t-sql
  • 2 respostas
  • 198142 Views
Martin Hope
Mikael Eriksson
Asked: 2014-05-21 23:35:15 +0800 CST

Por que a velocidade de execução de instruções depende da conexão de rede?

  • 31

Parece que a velocidade de execução do T-SQL depende da latência da conexão de rede com o servidor. Presumi que, se o SQL Server não tiver nada para relatar ao cliente, ele será executado até que seja concluído, mas o teste mostra outra história.

create procedure UselessLoop
  @I int
as
declare @D datetime = getdate()
while @I > 0 set @I -= 1
print datediff(millisecond, @D, getdate())

exec UselessLoop 100000

Server    Milliseconds
local     53
nearby    63
faraway   660

exec UselessLoop 1000000

Server    Milliseconds
local     546
nearby    640
faraway   6183

Os testes são executados no mesmo servidor de diferentes computadores usando o SSMS. O local é executado a partir do servidor, o local é executado na mesma rede local e o distante é executado a partir de outro escritório a 500 km de distância conectado com fibra de 1 gigabit.

Obviamente, há alguma comunicação acontecendo entre o SQL Server e o cliente que depende diretamente do número de instruções executadas.

Usei o Wireshark para ver o que é transportado e não posso dizer que entendo muito, mas era um tcp.stream trocando um total de 26 MB em 22740 pacotes.

Que tal uma função inútil?

create function dbo.UDFUselessLoop(@I int)
returns int
as
begin
  declare @D datetime = getdate()
  while @I > 0 set @I -= 1
  return datediff(millisecond, @D, getdate())
end

print dbo.UDFUselessLoop(1000000)

Ele é executado em 406 milissegundos, independentemente de onde é executado. Parece que não há comunicação com o cliente no loop.

sql-server t-sql
  • 1 respostas
  • 1053 Views
Martin Hope
tomka
Asked: 2014-04-04 12:56:16 +0800 CST

Melhorar o desempenho de COUNT/GROUP-BY em uma grande tabela PostgresSQL?

  • 31

Estou executando o PostgresSQL 9.2 e tenho uma relação de 12 colunas com cerca de 6.700.000 linhas. Ele contém nós em um espaço 3D, cada um referenciando um usuário (que o criou). Para consultar qual usuário criou quantos nós, faço o seguinte (adicionado explain analyzepara obter mais informações):

EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id;
                                                    QUERY PLAN                                                         
---------------------------------------------------------------------------------------------------------------------------
 HashAggregate  (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1)
   ->  Seq Scan on treenode  (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1)
         Filter: (project_id = 1)
 Total runtime: 1747.653 ms

Como você pode ver, isso leva cerca de 1,7 segundos. Isso não é tão ruim considerando a quantidade de dados, mas eu me pergunto se isso pode ser melhorado. Tentei adicionar um índice BTree na coluna do usuário, mas isso não ajudou em nada.

Você tem sugestões alternativas?


Por uma questão de completude, esta é a definição completa da tabela com todos os seus índices (sem restrições de chave estrangeira, referências e gatilhos):

    Column     |           Type           |                      Modifiers                    
---------------+--------------------------+------------------------------------------------------
 id            | bigint                   | not null default nextval('concept_id_seq'::regclass)
 user_id       | bigint                   | not null
 creation_time | timestamp with time zone | not null default now()
 edition_time  | timestamp with time zone | not null default now()
 project_id    | bigint                   | not null
 location      | double3d                 | not null
 reviewer_id   | integer                  | not null default (-1)
 review_time   | timestamp with time zone |
 editor_id     | integer                  |
 parent_id     | bigint                   |
 radius        | double precision         | not null default 0
 confidence    | integer                  | not null default 5
 skeleton_id   | bigint                   |
Indexes:
    "treenode_pkey" PRIMARY KEY, btree (id)
    "treenode_id_key" UNIQUE CONSTRAINT, btree (id)
    "skeleton_id_treenode_index" btree (skeleton_id)
    "treenode_editor_index" btree (editor_id)
    "treenode_location_x_index" btree (((location).x))
    "treenode_location_y_index" btree (((location).y))
    "treenode_location_z_index" btree (((location).z))
    "treenode_parent_id" btree (parent_id)
    "treenode_user_index" btree (user_id)

Edit: Este é o resultado, quando uso a consulta (e índice) proposta por @ypercube (a consulta leva cerca de 5,3 segundos sem EXPLAIN ANALYZE):

EXPLAIN ANALYZE SELECT u.id, ( SELECT COUNT(*) FROM treenode AS t WHERE t.project_id=1 AND t.user_id = u.id ) AS number_of_nodes FROM auth_user As u;
                                                                        QUERY PLAN                                                                     
----------------------------------------------------------------------------------------------------------------------------------------------------------
 Seq Scan on auth_user u  (cost=0.00..6987937.85 rows=46 width=4) (actual time=29.934..5556.147 rows=46 loops=1)
   SubPlan 1
     ->  Aggregate  (cost=151911.65..151911.66 rows=1 width=0) (actual time=120.780..120.780 rows=1 loops=46)
           ->  Bitmap Heap Scan on treenode t  (cost=4634.41..151460.44 rows=180486 width=0) (actual time=13.785..114.021 rows=145174 loops=46)
                 Recheck Cond: ((project_id = 1) AND (user_id = u.id))
                 Rows Removed by Index Recheck: 461076
                 ->  Bitmap Index Scan on treenode_user_index  (cost=0.00..4589.29 rows=180486 width=0) (actual time=13.082..13.082 rows=145174 loops=46)
                       Index Cond: ((project_id = 1) AND (user_id = u.id))
 Total runtime: 5556.190 ms
(9 rows)

Time: 5556.804 ms

Edit 2: Este é o resultado, quando eu uso um indexon project_id, user_id(mas sem otimização de esquema, ainda) como sugerido por @erwin-brandstetter (a consulta é executada com 1,5 segundos na mesma velocidade que minha consulta original):

EXPLAIN ANALYZE SELECT user_id, count(user_id) as ct FROM treenode WHERE project_id=1 GROUP BY user_id;
                                                        QUERY PLAN                                                      
---------------------------------------------------------------------------------------------------------------------------
 HashAggregate  (cost=253670.88..253671.24 rows=37 width=8) (actual time=1807.334..1807.339 rows=38 loops=1)
   ->  Seq Scan on treenode  (cost=0.00..220280.62 rows=6678050 width=8) (actual time=0.183..893.491 rows=6678050 loops=1)
         Filter: (project_id = 1)
 Total runtime: 1807.368 ms
(4 rows)
postgresql performance
  • 2 respostas
  • 66737 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