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
Yano_of_Queenscastle
Asked: 2025-01-10 08:18:11 +0800 CST

Por que BIT e não BOOLEAN?

  • 20

Existe algum significado para o SQL Server ter BITdatatype em vez de BOOLEAN? É apenas uma maneira estranha de chamar a mesma coisa, ou existe alguma diferença conceitual sutil?

A documentação sobre BITo tipo de dados menciona:

O tipo de dados bit pode ser usado para armazenar valores booleanos.

Isso parece sugerir que, na verdade, elas não são a mesma coisa.

Estou ciente de que [a coisa que a MS chama de boolean] e [a coisa que a MS chama de bit] são diferentes, MAS do ponto de vista do programador, bité a melhor aproximação do booleanconceito platônico que a linguagem T-SQL oferece. E eu luto para acreditar que seja apenas uma casualidade e não uma intenção. O tipo de dado numérico que aceita apenas 0 e 1 parece pouco prático para outros usos.

sql-server
  • 1 respostas
  • 2935 Views
Martin Hope
Brent Ozar
Asked: 2022-11-04 08:38:35 +0800 CST

Por que a configuração do SQL Server recomenda o MAXDOP 8 aqui?

  • 20

Estou executando a configuração do SQL Server 2022 RC1 em um AWS i3.16xlarge com 2 soquetes, 2 nós NUMA, 32 processadores lógicos por nó, 64 processadores lógicos no total.

A configuração está recomendando MAXDOP 8:

Configuração do SQL Server e Gerenciador de Tarefas

Mas se você clicar nesse link para configurar o MAXDOP , as recomendações dizem:

Recomendações MAXDOP

Com base nesse artigo da KB, MAXDOP deve ser 16, não 8. Claro, tecnicamente 8 é menor que 16 - mas também é 2, ou 4, ou 15. De onde vem o 8?

Após a conclusão da instalação do SQL Server e a inicialização do serviço, o log mostra que o SQL Server está implementando automaticamente o Soft-NUMA com 4 nós, cada um com 16 processadores lógicos:

Log de erros do SQL Server

Então, novamente, isso indica que MAXDOP deve ser 16.

Isso é um bug, ou eu perdi algo óbvio? Existe outra regra não escrita em algum lugar que a configuração irá parar no MAXDOP 8?

sql-server
  • 2 respostas
  • 1791 Views
Martin Hope
yegnasew
Asked: 2020-07-10 05:36:58 +0800 CST

Truncar uma tabela com 17 bilhões de linhas em um AG

  • 20

Preciso truncar uma tabela com 17 bilhões de linhas, a tabela está em um banco de dados que faz parte de um AG.

Qual será o efeito dessa operação na latência do AG e no tamanho dos backups de log?

Existe uma maneira recomendada de fazer isso?

sql-server availability-groups
  • 2 respostas
  • 3761 Views
Martin Hope
Pedro Ludovico Bozzini
Asked: 2020-02-05 11:17:29 +0800 CST

SQL Server - Selecione o registro mais recente de cada grupo quando o desempenho for crítico

  • 20

Eu executo um banco de dados SQL Server 2016 onde tenho a seguinte tabela com mais de 100 milhões de linhas:

StationId | ParameterId |       DateTime       | Value
    1     |      2      | 2020-02-04 15:00:000 |  5.20
    1     |      2      | 2020-02-04 14:00:000 |  5.20
    1     |      2      | 2020-02-04 13:00:000 |  5.20
    1     |      3      | 2020-02-04 15:00:000 |  2.81
    1     |      3      | 2020-02-04 14:00:000 |  2.81
    1     |      4      | 2020-02-04 15:00:000 |  5.23
    2     |      2      | 2020-02-04 15:00:000 |  3.70
    2     |      4      | 2020-02-04 15:00:000 |  12.20
    3     |      2      | 2020-02-04 15:00:000 |  1.10

Esta tabela possui um índice clusterizado para StationId, ParameterId e DateTime, nesta ordem, todos crescentes.

O que eu preciso é, para cada par exclusivo StationId - ParameterId, retornar o valor mais recente da coluna DateTime:

StationId | ParameterId |       LastDate       
    1     |      2      | 2020-02-04 15:00:000 
    1     |      3      | 2020-02-04 15:00:000 
    1     |      4      | 2020-02-04 15:00:000 
    2     |      2      | 2020-02-04 15:00:000 
    2     |      4      | 2020-02-04 15:00:000 
    3     |      2      | 2020-02-04 15:00:000 

O que estou fazendo agora é a seguinte consulta, que leva cerca de 90 a 120 segundos para ser executada:

    SELECT StationId, ParameterId, MAX(DateTime) AS LastDate
    FROM  MyTable WITH (NOLOCK)
    GROUP BY StationId, ParameterId

Também vi muitos posts sugerindo o seguinte, que leva mais de 10 minutos para ser executado:

    SELECT StationId, ParameterId, DateTime AS LastDate
    FROM
    (
       SELECT StationId, ParameterId, DateTime
       ,ROW_NUMBER() OVER (PARTITION BY StationId,ParameterIdORDER BY DateTime DESC) as row_num
       FROM  MyTable WITH (NOLOCK)
    )
    WHERE row_num = 1

Mesmo no melhor caso (usando a cláusula GROUP BY e a função agregada MAX), o plano de execução não indica uma busca de índice:

Plano de execução da consulta

Detalhe da varredura de índice

Gostaria de saber se existe uma maneira melhor de realizar essa consulta (ou construir o índice) para obter um melhor tempo de execução.

sql-server index
  • 3 respostas
  • 40644 Views
Martin Hope
Brent Ozar
Asked: 2019-03-04 04:43:22 +0800 CST

Como você habilita o cache do conjunto de resultados do SQL Server 2019?

  • 20

O SQL Server 2019 CTP 2.3 adicionou algumas novas colunas a sys.databases, incluindo is_result_set_caching_on:

sys.databases

Ainda não está documentado nas Novidades do SQL Server 2019 , nem na página ALTER DATABASE .

Eu tentei usar a mesma sintaxe do Accelerated Database Recovery apenas para rir:

ALTER DATABASE StackOverflow2013 SET RESULT_SET_CACHING ON;

Mas sem sorte:

Msg 5058, Level 16, State 12, Line 8
Option 'RESULT_SET_CACHING' cannot be set in database 'StackOverflow2013'.
sql-server sql-server-2019
  • 2 respostas
  • 4200 Views
Martin Hope
UnLogicGuys
Asked: 2019-01-12 11:49:33 +0800 CST

Como a recursão SQL realmente funciona?

  • 20

Vindo para SQL de outras linguagens de programação, a estrutura de uma consulta recursiva parece bastante estranha. Ande por ela passo a passo, e ela parece desmoronar.

Considere o seguinte exemplo simples:

CREATE TABLE #NUMS
(N BIGINT);

INSERT INTO #NUMS
VALUES (3), (5), (7);

WITH R AS
(
    SELECT N FROM #NUMS
    UNION ALL
    SELECT N*N AS N FROM R WHERE N*N < 10000000
)
SELECT N FROM R ORDER BY N;

Vamos percorrê-lo.

Primeiro, o membro âncora é executado e o conjunto de resultados é colocado em R. Assim, R é inicializado como {3, 5, 7}.

Então, a execução cai abaixo de UNION ALL e o membro recursivo é executado pela primeira vez. Ele é executado em R (ou seja, no R que temos atualmente em mãos: {3, 5, 7}). Isso resulta em {9, 25, 49}.

O que ele faz com esse novo resultado? Ele anexa {9, 25, 49} ao {3, 5, 7} existente, rotula a união resultante R e então continua com a recursão a partir daí? Ou ele redefine R para ser apenas este novo resultado {9, 25, 49} e faz toda a união depois?

Nenhuma das escolhas faz sentido.

Se R agora for {3, 5, 7, 9, 25, 49} e executarmos a próxima iteração da recursão, terminaremos com {9, 25, 49, 81, 625, 2401} e teremos perdeu {3, 5, 7}.

Se R agora é apenas {9, 25, 49}, então temos um problema de rotulagem incorreta. R é entendido como a união do conjunto de resultados do membro âncora e todos os conjuntos de resultados do membro recursivo subsequentes. Considerando que {9, 25, 49} é apenas um componente de R. Não é o R completo que acumulamos até agora. Portanto, escrever o membro recursivo selecionando de R não faz sentido.


Eu certamente aprecio o que @Max Vernon e @Michael S. detalharam abaixo. Ou seja, que (1) todos os componentes são criados até o limite de recursão ou conjunto nulo, e então (2) todos os componentes são unidos. É assim que entendo a recursão SQL para realmente funcionar.

Se estivéssemos redesenhando o SQL, talvez pudéssemos impor uma sintaxe mais clara e explícita, algo assim:

WITH R AS
(
    SELECT   N
    INTO     R[0]
    FROM     #NUMS
    UNION ALL
    SELECT   N*N AS N
    INTO     R[K+1]
    FROM     R[K]
    WHERE    N*N < 10000000
)
SELECT N FROM R ORDER BY N;

Mais ou menos como uma prova indutiva em matemática.

O problema com a recursão SQL como está atualmente é que ela é escrita de maneira confusa. A forma como está escrito diz que cada componente é formado selecionando de R, mas isso não significa o R completo que foi (ou parece ter sido) construído até agora. Significa apenas o componente anterior.

sql-server cte
  • 4 respostas
  • 4692 Views
Martin Hope
Arthur Putnam
Asked: 2018-09-14 08:21:12 +0800 CST

Qual é o tipo de dados 'nome' no PostgreSQL

  • 20

Não consigo encontrar nenhuma referência ao tipo de dados 'name' na documentação do postgres, mas estou vendo-o como um tipo de dados na tabela pgagent.pga_jobstep para a coluna 'jstdbname'. O udt_name também é 'nome'. Selecionar as linhas dessa tabela faz com que elas apareçam como se fossem strings.

Não está listado aqui: Tipos de dados Postgres

postgresql datatypes
  • 2 respostas
  • 10779 Views
Martin Hope
jyao
Asked: 2018-07-31 12:27:28 +0800 CST

Habilitar TLS 1.2 para email de banco de dados do SQL Server 2016

  • 20

Estou intrigado com esse problema há quase 1 semana. Espero que alguém em nossa comunidade tenha experimentado o mesmo problema e já tenha encontrado uma solução.

Então aqui está meu problema:

De acordo com a política da nossa empresa, queremos que o correio do banco de dados possa enviar e-mails pela porta 25 com TLS 1.2 ativado e com TLS 1.0 e TLS 1.1 desativados.

Nosso servidor de email é o Exchange Server 2010, nossas caixas SQL Server 2016 (edições Developer e Enterprise) possuem SO das edições Windows Server 2016 Standard.

Nossa versão do SQL Server é:

select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64) 
    Dec 22 2017 11:25:00 
    Copyright (c) Microsoft Corporation
    Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

Temos a configuração de correio do banco de dados conforme mostrado aqui.

insira a descrição da imagem aqui

O problema é sempre que ativamos o SSL

use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;

NÃO PODEMOS enviar email db (não importa se nossa autenticação SMTP é Autenticação do Windows, Autenticação básica ou Autenticação anônima). A mensagem de erro no log de email do db é a seguinte:

Mensagem

O correio não pôde ser enviado aos destinatários devido a uma falha no servidor de correio. (Enviando e-mail usando a conta 2 (2018-07-30T10:52:41). Mensagem de exceção: não é possível enviar e-mails para o servidor de e-mail. (Falha ao enviar e-mail.). )

Mas se desligarmos este SSL, não há problema para o envio de e-mail db.

Então, como podemos habilitar o SSL e usar o TLS 1.2 para db mail?

Eu habilitei o TLS 1.2 adicionando o registro conforme mostrado abaixo

insira a descrição da imagem aqui

Os detalhes estão neste link (consulte a seção de perguntas frequentes)

sql-server sql-server-2016
  • 4 respostas
  • 34229 Views
Martin Hope
user606521
Asked: 2018-05-09 10:55:28 +0800 CST

Vários alvos de conflito

  • 20

Eu tenho dois índices exclusivos em colunas ae b. Eu preciso de algo assim:

insert into my_table (a, b) values (1, 2), (1, 2)
on conflict (a) do update set c = 'a_violation'
on conflict (b) do update set c = 'b_violation'

Então, geralmente, eu quero fazer uma atualização diferente com base no alvo do conflito - a sintaxe acima não é suportada (apenas uma on conflictinstrução é suportada). Existe alguma outra maneira de fazer isso?

postgresql postgresql-10
  • 1 respostas
  • 19830 Views
Martin Hope
brett rogers
Asked: 2011-01-20 10:14:03 +0800 CST

Qual é a melhor consulta a ser usada para monitorar o status de um banco de dados SQL Server?

  • 21

Eu quero ser capaz de executar uma consulta para obter as informações cruciais sobre o status de um banco de dados. Ou seja, eu quero que a consulta seja capaz de dizer se o banco de dados está ou não em bom estado.

Esta é a consulta que herdei para esta verificação:

SELECT name AS [SuspectDB],
  DATABASEPROPERTY(name, N'IsSuspect') AS [Suspect],
  DATABASEPROPERTY(name, N'IsOffline') AS [Offline],
  DATABASEPROPERTY(name, N'IsEmergencyMode') AS [Emergency],
  has_dbaccess(name) AS [HasDBAccess]
FROM sysdatabases
WHERE (DATABASEPROPERTY(name, N'IsSuspect') = 1)
   OR (DATABASEPROPERTY(name, N'IsOffline') = 1)
   OR (DATABASEPROPERTY(name, N'IsEmergencyMode') = 1)
   OR (has_dbaccess(name) = 0)

Se essa consulta retornar algum resultado, a suposição feita é que o banco de dados está em um estado suspeito ou potencialmente ruim.

Existe uma maneira melhor de fazer isso?

sql-server sql-server-2008
  • 5 respostas
  • 56775 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