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
Brent Ozar
Asked: 2020-07-07 06:31:59 +0800 CST

Como negar gravações em todos os bancos de dados do SQL Server (incluindo os novos e os restaurados)

  • 15

Eu quero criar um logon que não tenha a capacidade de gravar em qualquer banco de dados - não apenas bancos de dados que existem hoje, mas qualquer banco de dados recém-criado ou banco de dados restaurado de outros servidores.

Não posso usar funções somente de banco de dados (nem mesmo no modelo), porque elas não terão efeito em bancos de dados recém-restaurados.

(Propósito comercial: estou escrevendo uma postagem no blog sobre como as pessoas podem configurar um novo login para si mesmas com baixo privilégio e podem garantir que não tenham acidentalmente um momento "oops" ao copiar/colar código ou execute-o sem uma cláusula where.)

sql-server security
  • 7 respostas
  • 1922 Views
Martin Hope
PirateApp
Asked: 2019-12-03 00:10:54 +0800 CST

Qual é o tipo de dados certo para armazenar apenas -1 0 e 1 na coluna postgres?

  • 15
  • Eu quero armazenar apenas 3 estados em uma coluna (se fosse 2, eu usaria um booleano)
  • Eu considerei usar um ENUM('up', 'down', 'none') mas parece que os ENUMs ocupam um espaço significativo
  • Existe uma maneira melhor de armazenar apenas -1 0 e 1 em uma coluna PostgresQL?
database-design postgresql
  • 4 respostas
  • 4945 Views
Martin Hope
Erik Darling
Asked: 2019-09-05 10:40:19 +0800 CST

Quais fatores de custo entram no otimizador escolhendo diferentes tipos de carretéis?

  • 15

Spoolum

No SQL Server existem vários tipos de spools. Os dois que me interessam são Table Spool s e Index spools , fora das consultas de modificação .

Consultas somente leitura, principalmente no lado interno de uma junção de loops aninhados, podem usar um spool de tabela ou índice para reduzir potencialmente a E/S e melhorar o desempenho da consulta. Esses carretéis podem ser Ansiosos ou Preguiçosos . Assim como você e eu.

Minhas perguntas são:

  • Quais fatores entram na escolha de Tabela vs. Carretel de Índice
  • Quais fatores influenciam na escolha entre Carretéis Ansiosos e Preguiçosos
sql-server execution-plan
  • 1 respostas
  • 473 Views
Martin Hope
Josh Darnell
Asked: 2019-08-14 08:33:46 +0800 CST

Estimativa de cardinalidade fora do histograma

  • 15

Configurar

Estou tendo problemas para entender uma estimativa de cardinalidade. Aqui está minha configuração de teste:

  • a versão 2010 do banco de dados Stack Overflow
  • SQL Server 2017 CU15+GDR (KB4505225) - 14.0.3192.2
  • o novo CE (nível de compatibilidade 140)

Eu tenho este proc:

USE StackOverflow2010;
GO

CREATE OR ALTER PROCEDURE #sp_PostsByCommentCount
    @CommentCount int
AS
BEGIN
    SELECT * 
    FROM dbo.Posts p
    WHERE 
        p.CommentCount = @CommentCount
    OPTION (RECOMPILE); 
END;
GO

Não há índices ou estatísticas não clusterizadas na dbo.Poststabela (há um índice clusterizado em Id).

Ao solicitar um plano estimado para isso, as "linhas estimadas" que saem dbo.Postssão 1.934,99:

EXEC #sp_PostsByCommentCount @CommentCount = 51;

O seguinte objeto de estatísticas foi criado automaticamente quando solicitei o plano estimado:

DBCC SHOW_STATISTICS('dbo.Posts', [_WA_Sys_00000006_0519C6AF]);

captura de tela da saída de estatísticas no SSMS

Os destaques disso são:

  • As estatísticas têm uma taxa de amostragem bastante baixa de 1,81% (67.796 / 3.744.192)
  • Apenas 31 passos do histograma foram usados
  • O valor "Toda densidade" é 0.03030303(33 valores distintos foram amostrados)
  • O último RANGE_HI_KEYno histograma é 50, com EQ_ROWSde 1

Pergunta

A passagem de qualquer valor superior a 50 (até e incluindo 2.147.483.647) resulta na estimativa de 1.934,99 linhas. Que cálculo ou valor é usado para produzir essa estimativa? O estimador de cardinalidade legado produz uma estimativa de 1 linha, a propósito.

O que eu tentei

Aqui estão algumas teorias que tive, coisas que tentei ou informações adicionais que consegui desenterrar enquanto investigava isso.

Vetor de densidade

Inicialmente pensei que seria o vetor de densidade, o mesmo que se eu tivesse usado OPTION (OPTIMIZE FOR UNKNOWN). Mas o vetor de densidade para este objeto de estatísticas é 3.744.192 * 0,03030303 = 113.460, então não é isso.

Eventos estendidos

Eu tentei executar uma sessão de Evento Estendido que coletou o query_optimizer_estimate_cardinalityevento (que eu aprendi na postagem do blog de Paul White Cardinality Estimation: Combining Density Statistics ), e obtive esses tipos de informações interessantes:

<CalculatorList>
  <FilterCalculator CalculatorName="CSelCalcColumnInInterval" Selectivity="-1.000" 
                    CalculatorFailed="true" TableName="[p]" ColumnName="CommentCount" />

  <FilterCalculator CalculatorName="CSelCalcAscendingKeyFilter" Selectivity="0.001" 
                    TableName="[p]" ColumnName="CommentCount" UseAverageFrequency="true" 
                    StatId="4" />
</CalculatorList>

Então parece que a CSelCalcAscendingKeyFiltercalculadora foi usada (a outra diz que falhou, o que quer que isso signifique). Esta coluna não é uma chave, ou única, ou necessariamente ascendente, mas tanto faz.

Fazer uma pesquisa no Google sobre esse termo me levou a alguns posts no blog:

  • Joe Sack - A calculadora CSelCalcAscendingKeyFilter ,
  • Itzik Ben-Gan - Procure e você deve escanear Parte II: Chaves Ascendentes

Essas postagens indicam que o novo CE baseia essas estimativas fora do histograma em uma combinação do vetor de densidade e do contador de modificação da estatística. Infelizmente, já descartei o vetor de densidade (acho?!), e o contador de modificação é zero (de sys.dm_db_stats_propertiesqualquer maneira).

Sinalizadores de rastreamento

Forrest sugeriu que eu ativasse o TF 2363 para obter mais informações sobre o processo de estimativa. Eu acho que a coisa mais relevante dessa saída é esta:

Plan for computation:

  CSelCalcAscendingKeyFilter(avg. freq., QCOL: [p].CommentCount)

Selectivity: 0.000516798

Este é um avanço (obrigado, Forrest!): esse 0.000516798número (que parece ter sido arredondado de forma inútil no Selectivity="0.001"atributo XE acima) multiplicado pelo número de linhas na tabela é a estimativa que eu estava procurando (1.934,99).

Provavelmente estou perdendo algo óbvio, mas não consegui fazer engenharia reversa de como esse valor de seletividade é produzido dentro da CSelCalcAscendingKeyFiltercalculadora.

sql-server sql-server-2017
  • 1 respostas
  • 515 Views
Martin Hope
mustaccio
Asked: 2019-04-18 14:51:37 +0800 CST

Se uma coluna VARCHAR(MAX) for incluída em um índice, o valor inteiro será sempre armazenado na(s) página(s) de índice?

  • 15

Estou perguntando isso por curiosidade, sendo inspirado por essa pergunta .

Sabemos que VARCHAR(MAX)valores maiores que 8000 bytes não são armazenados em linhas, mas em páginas LOB separadas. A recuperação subsequente de uma linha com esse valor requer duas ou mais operações lógicas de E/S (essencialmente, uma a mais do que seria teoricamente necessária).

Podemos adicionar uma VARCHAR(MAX)coluna, como INCLUDEd, a um índice único, conforme demonstrado na pergunta vinculada. Se essa coluna tiver valores que excedam 8.000 bytes de comprimento, esses valores ainda serão armazenados "inline" nas páginas de folha de índice ou também serão movidos para páginas LOB?

sql-server varchar
  • 1 respostas
  • 5219 Views
Martin Hope
Yaroslav
Asked: 2019-03-15 06:22:48 +0800 CST

É possível desabilitar a verificação de nova versão no pgAdmin 4?

  • 15

Novas versões do pgAdmin 4 estão sendo lançadas todo mês, e é muito chato ver um pop-up com notificação sobre outra atualização. Não há opção nas preferências para desativá-lo. Existe um truque para desativar esse pop-up específico, exceto instalar a nova versão?

insira a descrição da imagem aqui

pgadmin-4
  • 3 respostas
  • 2646 Views
Martin Hope
Frederik Vanderhaegen
Asked: 2019-01-26 05:41:55 +0800 CST

Classifique os spills para tempdb, mas as linhas estimadas são iguais às linhas reais

  • 15

Em um SQL Server 2016 SP2 com memória máxima definida como 25 GB, temos uma consulta que é executada cerca de 80 vezes em um minuto. A consulta derrama cerca de 4.000 páginas para tempdb. Isso causa muito IO no disco do tempdb.

Ao examinar o plano de consulta (consulta simplificada), você verá que o número de linhas estimadas é igual ao número de linhas reais, mas ainda ocorrem derramamentos. Portanto, estatísticas desatualizadas não podem ser a causa do problema.

Fiz alguns testes e os seguintes vazamentos de consulta para o Tempdb:

select id --uniqueidentifier
from SortProblem
where [status] ='A'
order by SequenceNumber asc
option (maxdop 1)

Mas se eu selecionar uma coluna diferente, não ocorrerão derramamentos:

select startdate --datetime
from SortProblem
where [status] ='A'
order by SequenceNumber asc 
option (maxdop 1)

Então eu tentei 'ampliar' o tamanho da coluna id:

select CONVERT(nvarchar(512),id)
from SortProblem
where [status] ='A'
order by SequenceNumber asc 
option (maxdop 1)

Então também não ocorre nenhum derramamento.

Por que o uniqueidentifier está se espalhando para tempdb e uma coluna de datatime não? Quando excluo cerca de 20.000 registros, também não ocorre derramamento quando seleciono a coluna id.

Com o seguinte script, você pode reproduzir o problema:

CREATE TABLE SortProblem
  (
     id             UNIQUEIDENTIFIER,
     startdate      DATETIME,
     sequencenumber BIGINT,
     status         VARCHAR(50),
     PRIMARY KEY CLUSTERED(id)
  )

SET nocount ON;

WITH nums(num)
     AS (SELECT TOP 103000 ROW_NUMBER()
                             OVER (
                               ORDER BY 1/0)
         FROM   sys.all_objects o1,
                sys.all_objects o2)
INSERT INTO SortProblem
SELECT newid(),
       DATEADD(millisecond, num, GETDATE()),
       num,
       CASE
         WHEN num <= 100000 THEN 'A'
         WHEN num <= 101000 THEN 'B'
         WHEN num <= 102000 THEN 'C'
         WHEN num <= 103000 THEN 'D'
       END
FROM   nums

CREATE NONCLUSTERED INDEX [IX_Status]
  ON [dbo].[SortProblem]([status] ASC)
  INCLUDE ([sequencenumber]) 
sql-server sql-server-2016
  • 1 respostas
  • 623 Views
Martin Hope
ChrisJ
Asked: 2019-01-25 19:39:38 +0800 CST

Por que preciso converter NULL para o tipo de coluna?

  • 15

Eu tenho um auxiliar que está gerando algum código para fazer atualizações em massa para mim e gera SQL que se parece com isso:

(Ambos os campos ativo e principal são do tipo boolean)

UPDATE fields as t set "active" = new_values."active","core" = new_values."core"
FROM (values 
(true,NULL,3419),
(false,NULL,3420)
) as new_values("active","core","id") WHERE new_values.id = t.id;

No entanto, ele falha com:

ERROR: column "core" is of type boolean but expression is of type text

Eu posso fazê-lo funcionar adicionando ::booleanaos nulos, mas isso parece estranho, por que NULL é considerado do tipo TEXT?

Além disso, é um pouco complicado de converter porque exigiria um pouco de retrabalho do código para saber para que tipo deve converter NULLs (a lista de colunas e valores está sendo gerada automaticamente a partir de uma matriz simples de objetos JSON) .

Por que isso é necessário e existe uma solução mais elegante que não exija que o código gerador saiba o tipo de NULLs?

Se for relevante, estou usando sequelize sobre Node.JS para fazer isso, mas também estou obtendo o mesmo resultado no cliente de linha de comando Postgres.

postgresql null
  • 1 respostas
  • 10652 Views
Martin Hope
Jacob H
Asked: 2019-01-23 05:20:09 +0800 CST

Como "auto auditar" todas as licenças do SQL Server em uma organização?

  • 15

Então, comecei um novo emprego em uma boa organização sem fins lucrativos, que existe há algumas décadas. Eles têm uma ampla variedade de edições e versões do SQL Server (por exemplo: 2005 Express a 2016 SP2 Enterprise) e em muitas VMs do Windows (versões de 2003 a 2016).

Os DBAs anteriores não completavam nenhuma documentação sobre o número de licenças que a empresa possui, nem edições, versões. Efetivamente não há registros úteis.

Eu executei o kit de ferramentas MAP para coletar detalhes sobre os SQL Servers. Então, pelo menos eu tenho um ponto de partida para quais servidores existem e pesquisei quais ainda estão fornecendo dados de produção.

Eu também usei a nova ferramenta ApexSQL Discover com resultados mistos (desculpe pessoal, eu amo suas coisas, mas não posso esperar 3 dias para que essa ferramenta seja executada quando eu precisar adicionar 1 servidor). E também dbatools find-dbainstance (não é um grande fã de usar PS para exportar grandes quantidades de dados). Então, juntando tudo isso, tenho quase certeza de que descobri a maioria ou todas as instâncias que já existiram neste domínio.

Claro, eu consultei o licenciamento de várias maneiras e examinei minuciosamente o guia de licenciamento MS SQL extremamente útil , completamente inútil , do qual nada parece fornecer qualquer informação sobre as licenças que a organização possui ou como adquiri-lo .

O cerne da questão: algumas dessas licenças foram compradas há uma década (ou duas). Algumas eram certamente faturas em papel. Lembra que eu mencionei que isso é uma organização sem fins lucrativos? No lado positivo, o licenciamento é barato. Por outro lado, o licenciamento é barato, então a maioria ou todas as licenças não possuem SA porque é mais barato comprar novas. edit: Esse era o raciocínio na época para não comprar o SA, eu não estava envolvido.

Devo apenas presumir que, como provavelmente nenhum tem SA - que o servidor também provavelmente será licenciado corretamente - e apenas comprar novos conforme necessário? Isso parece uma abordagem horrível.

Minha pergunta:

Como diabos eu sei quais licenças do SQL Server minha nova empresa possui sem tentar desenterrar faturas em papel de 2004? Eu nunca estive nesta situação antes. Minha única opção é ser auditado ou pagar para um parceiro auditar? (e se sim, Microsoft o que você está fazendo bb??).

Quaisquer insights que o dba.se possa fornecer aqui provavelmente acrescentarão anos à minha vida. Obrigado a todos!

sql-server license
  • 2 respostas
  • 3266 Views
Martin Hope
Paul-Sebastian
Asked: 2019-01-10 04:54:41 +0800 CST

Os índices compactados do SQL Server permanecem compactados na reconstrução sem especificar a compactação de dados?

  • 15

Depois que alguém reconstrói seus índices do SQL Server usando compactação de página ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)), as recompilações subsequentes (como feitas por alguns scripts de manutenção após um determinado limite de fragmentação) precisam especificar a compactação de dados novamente? Caso contrário, os índices seriam efetivamente descompactados?

sql-server index
  • 1 respostas
  • 5219 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