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
Michael Green
Asked: 2019-07-01 21:12:27 +0800 CST

Implementação e contra-indicações para OPTIMIZE_FOR_SEQUENTIAL_KEY

  • 23

O SQL Server 2019 CTP3.1 introduziu uma otimização para lidar com a contenção de inserção de última página. Isso assume a forma de uma opção de índice chamada OPTIMIZE_FOR_SEQUENTIAL_KEY.

Imagina-se que isso poderia ser uma adaptação de Bw-Tree ou Bz-Tree . No entanto, eles dependem de páginas de tamanho variável, enquanto o mecanismo de armazenamento atual requer páginas de tamanho fixo.

Como a otimização é implementada? Como os algoritmos B-Tree atuais são alterados por essa otimização? Em que circunstâncias eu escolheria não implantar essa opção?

Pesquisar

Uma patente para uma abordagem de chave reversa .

Dei uma olhada rápida usando DBCC PAGE, comparando 2017 com 2019 e 2019 com e sem OPTIMIZE_FOR_SEQUENTIAL_KEY em um índice clusterizado exclusivo para uma coluna int IDENTITY. Não havia nada que obviamente explicasse o novo comportamento. Isso me faz pensar que é uma coisa algorítmica, ao invés de uma coisa estrutural, o que faz sentido.

Uma postagem no blog do MS.

Este recurso parece centrar-se na detecção e prevenção de comboios .

sql-server optimization
  • 1 respostas
  • 727 Views
Martin Hope
Heinzi
Asked: 2018-07-18 05:03:29 +0800 CST

A resiliência a falhas do SQL Server pode ser melhorada?

  • 23

Temos PCs com SQL Server (2008 SP4 e 2016 SP1) que perdem energia regularmente. Obviamente, isso às vezes leva à corrupção (índice) do banco de dados SQL Server, que precisamos restaurar posteriormente.

Estou ciente de que o SQL Server não foi projetado para esses cenários e a solução correta é corrigir a causa da perda de energia (mais sobre isso abaixo, se você estiver curioso). No entanto, existem opções de ajuste no SQL Server que eu possa definir para reduzir o risco de corrupção do banco de dados na perda de energia ?


Background: O "PC" é um tablet Windows montado em uma empilhadeira. Quando o usuário desliga a empilhadeira, o tablet fica sem energia. Tentamos ensinar os usuários a desligar corretamente o Windows antes de desligar a empilhadeira, mas falhamos (provavelmente porque apenas desligá-lo "funciona" na maioria das vezes). No momento, também estamos investigando outras opções, como adicionar um no-break que avisa o tablet para desligar em caso de perda de energia.

sql-server crash
  • 5 respostas
  • 4218 Views
Martin Hope
user148246
Asked: 2018-05-05 16:45:56 +0800 CST

PostgreSQL duas maneiras diferentes de gerar um UUID: gen_random_uuid vs uuid_generate_v4?

  • 23

Qual é a diferença entre as duas funções a seguir

  • gen_random_uuid()fornecido por pgcryptoextensão
  • uuid_generate_v4()fornecido por uuid-osspextensão

Ambos são os mesmos nos bastidores? Algum impacto no desempenho ao usar um?

postgresql postgresql-extensions
  • 1 respostas
  • 16368 Views
Martin Hope
Victor
Asked: 2017-07-30 14:51:06 +0800 CST

Como acesso o Postgres quando recebo um erro sobre "/var/run/postgresql/.s.PGSQL.5432"?

  • 23

Estou executando o Ubuntu 16. Instalei o Postgresql. Postgresql costumava funcionar, mas depois reiniciei.

Os comandos nmap mostram que a porta 5432 está aberta. Postgres parece estar funcionando corretamente:

service postgresql status

postgresql.service - PostgreSQL RDBMS Carregado: carregado (/lib/systemd/system/postgresql.service; habilitado; predefinição do fornecedor: habilitado) Ativo: ativo (saído) desde 29-07-2017 18:42:59 EDT; 1min 4s atrás Processo: 201 ExecStart=/bin/true (code=exited, status=0/SUCCESS) PID principal: 201 (code=exited, status=0/SUCCESS)
Memória: 0B CGroup: /system.slice/postgresql. serviço

Eu corri isso:psql

Mas consegui isso:

psql: não foi possível conectar ao servidor: Arquivo ou diretório inexistente O servidor está executando localmente e aceitando conexões no soquete de domínio Unix "/var/run/postgresql/.s.PGSQL.5432"?

O arquivo listado acima parece não existir.

Como entro no Postgresql? Normalmente eu corria psqlou sudo -i -u postgresentão psql. Mas esses comandos não estão funcionando. Eu continuo recebendo um erro sobre "não foi possível conectar ao servidor". Várias reinicializações não ajudaram.

Atualizar:

Executei este comando:dpkg -l | grep postgres

rc postgresql-9.5 9.5.6-0ubuntu0.16.04 amd64 banco de dados SQL relacional de objeto, servidor versão 9.5
ii postgresql-client 9.5+173 todos os programas front-end para PostgreSQL (versão suportada)
ii postgresql-client-9.5 9.5.7-0ubuntu0.16.04 amd64 programas front-end para PostgreSQL 9.5
ii postgresql-client-common 173 all manager para várias versões do cliente PostgreSQL
ii postgresql-common 173 all PostgreSQL gerenciador de cluster de banco de dados
postgresql linux
  • 8 respostas
  • 179206 Views
Martin Hope
Joe Obbish
Asked: 2017-05-19 05:47:56 +0800 CST

Por que essa consulta não usa um spool de índice?

  • 23

Estou fazendo esta pergunta para entender melhor o comportamento do otimizador e entender os limites em torno dos spools de índice. Suponha que eu coloque inteiros de 1 a 10000 em um heap:

CREATE TABLE X_10000 (ID INT NOT NULL);
truncate table X_10000;

INSERT INTO X_10000 WITH (TABLOCK)
SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;

E force uma junção de loop aninhado com MAXDOP 1:

SELECT *
FROM X_10000 a
INNER JOIN X_10000 b ON a.ID = b.ID
OPTION (LOOP JOIN, MAXDOP 1);

Esta é uma ação bastante hostil para o SQL Server. As junções de loop aninhadas geralmente não são uma boa opção quando ambas as tabelas não têm índices relevantes. Aqui está o plano:

consulta ruim

A consulta leva 13 segundos na minha máquina com 100000000 linhas buscadas no spool da tabela. No entanto, não vejo por que a consulta deve ser lenta. O otimizador de consulta tem a capacidade de criar índices em tempo real por meio de spools de índice . Esta consulta parece ser um candidato perfeito para um spool de índice.

A consulta a seguir retorna os mesmos resultados que a primeira, tem um spool de índice e termina em menos de um segundo:

SELECT *
FROM X_10000 a
CROSS APPLY (SELECT TOP (9223372036854775807) b.ID FROM X_10000 b WHERE a.ID = b.ID) ca
OPTION (LOOP JOIN, MAXDOP 1);

solução alternativa 1

Essa consulta também possui um spool de índice e termina em menos de um segundo:

SELECT *
FROM X_10000 a
INNER JOIN X_10000 b ON a.ID >= b.ID AND a.ID <= b.ID
OPTION (LOOP JOIN, MAXDOP 1);

solução alternativa 2

Por que a consulta original não tem um spool de índice? Existe algum conjunto de dicas documentadas ou não documentadas ou sinalizadores de rastreamento que fornecerão um spool de índice? Encontrei esta pergunta relacionada , mas ela não responde totalmente à minha pergunta e não consigo fazer com que o sinalizador de rastreamento misterioso funcione para essa consulta.

sql-server optimization
  • 1 respostas
  • 2939 Views
Martin Hope
Phrancis
Asked: 2016-06-09 16:32:31 +0800 CST

Usando texto MAX ou tipo menor mais específico

  • 23

Alguém estava revisando meu código DDL para criar tabelas e sugeriu, quando viram que eu vi usando VARCHAR(256)campos para texto, espero que sejam bem pequenos, como um primeiro nome ou qualquer outra coisa, que eu deveria sempre usar VARCHAR(MAX)e vincular Por que usar qualquer coisa além de varchar (max ) . Eu li, mas parecia datado, pois estava focado em 2005, e não parecia oferecer nenhuma justificativa real para alocar potencialmente até 2 GB por linha em todos os campos de texto.

De um ponto de vista de desempenho, armazenamento etc., como alguém deve decidir se deve usar VARCHAR(MAX)ou um tipo menor e mais específico para versões modernas do SQL Server? (por exemplo, 2008, 2012, 2014)

sql-server database-design
  • 2 respostas
  • 1143 Views
Martin Hope
LCJ
Asked: 2016-05-04 10:07:25 +0800 CST

Consultas sem plano suficientemente bom encontrado

  • 23

Eu tenho um banco de dados SQL Server 2012. Percebi valor Reason for early termination of statement optimizationpara algumas consultas e todas deram Good Enough Plan Found. Agora minhas perguntas são:

  1. Quais são todos os tipos possíveis de “Razão para término antecipado da otimização de instrução”. Eu procurei por isso no msdn, mas não obtive uma lista completa de valores.
  2. Existe um DMV ou evento estendido para listar todas as consultas para as quais a otimização foi encerrada devido a outros motivos que não o Plano Bom o Suficiente Encontrado? Referi-me a seguir dois artigos que não listam a lista completa de possibilidades. [Além disso, eles me dão resultados diferentes no meu banco de dados].

    • Descoberta: tempo limite de compilação da consulta
    • Identificando planos de consulta que não são bons o suficiente

insira a descrição da imagem aqui

sql-server optimization
  • 2 respostas
  • 1692 Views
Martin Hope
sharptooth
Asked: 2016-04-23 01:46:24 +0800 CST

De onde vem esse Constant Scan e Left Outer Join em um plano de consulta SELECT trivial?

  • 23

Eu tenho esta tabela:

CREATE TABLE [dbo].[Accounts] (
    [AccountId] UNIQUEIDENTIFIER UNIQUE NOT NULL DEFAULT NEWID(),
    -- WHATEVER other columns
);
GO
CREATE UNIQUE CLUSTERED INDEX [AccountsIndex]
    ON [dbo].[Accounts]([AccountId] ASC);
GO

Esta consulta:

DECLARE @result UNIQUEIDENTIFIER
SELECT @result = AccountId FROM Accounts WHERE AccountId='guid-here'

executa com um plano de consulta que consiste em uma única busca de índice - como esperado:

SELECT <---- Clustered Index Seek

Esta consulta faz o mesmo:

DECLARE @result UNIQUEIDENTIFIER
SET @result = (SELECT AccountId FROM Accounts WHERE AccountId='guid-here')

mas é executado com um plano em que o resultado do Index Seek é Left Outer Joined com o resultado de alguma Constant Scan e, em seguida, alimentado no Compute Scalar:

SELECT <--- Compute Scalar <--- Left Outer Join <--- Constant Scan
                                      ^
                                      |------Clustered Index Seek

O que é essa magia extra? O que faz a Varredura Constante seguida pela Junção Externa Esquerda?

sql-server execution-plan
  • 1 respostas
  • 1890 Views
Martin Hope
ThunD3eR
Asked: 2016-03-18 03:40:03 +0800 CST

Inserir resultados de um procedimento armazenado em uma variável de tabela

  • 23

Eu tenho um procedimento armazenado que armazena valores em uma variável de tabela. Eu seleciono esses valores e os retorno quando o procedimento é chamado.

Estou tentando definir esses valores de retorno em outra variável de tabela, mas não consigo descobrir.

Procedimento armazenado

ALTER PROCEDURE [dbo].[GetOrSetDomainId]
@DomainName varchar(50),
@DomainUrl varchar(50)
AS
BEGIN
    DECLARE @DomainId bigint;
    DECLARE @NumberOfRwos bigint;

    DECLARE @DomainHistory TABLE
    (
        DomainId bigint, 
        HasHistory bit,
        ServerOnline bit,
        DatabaseOnline bit, 
        ServerPerformance bigint,
        DatabasePerformance bigint, 
        SoldTickets bigint
    )


    SELECT  @NumberOfRwos =  COUNT(Id) 
    FROM DomainData
    WHERE DomainName = @DomainName OR DomainUrl = @DomainUrl

    IF(@NumberOfRwos = 0)
    BEGIN
        INSERT INTO DomainData (DomainName, DomainUrl) VALUES (@DomainName, @DomainUrl)

         SELECT @DomainId =  @@IDENTITY

         INSERT INTO @DomainHistory(DomainId,HasHistory)VALUES(@DomainId, 0)

         SELECT * FROM @DomainHistory
    END

    ELSE
    BEGIN
    ---not important here----
    END

END

Código de chamada

Eu chamo o procedimento usando:

DECLARE @DomainHistory TABLE
(
    DomainId bigint, 
    HasHistory bit,
    ServerOnline bit,
    DatabaseOnline bit, 
    ServerPerformance bigint,
    DatabasePerformance bigint, 
    SoldTickets bigint
)

SET @DomainHistory = EXEC GetOrSetDomainId 'test', 'test2'
---Other alternatives:---
INSERT INTO @DomainHistory(DomainId,HasHistory)
VALUES(EXEC GetOrSetDomainId 'test', 'test2')

Como posso fazer isso?

sql-server t-sql
  • 1 respostas
  • 68746 Views
Martin Hope
keypress
Asked: 2016-01-08 05:20:06 +0800 CST

Qual é a sobrecarga para varchar(n)?

  • 23

Eu queria perguntar o significado deste fragmento do documento do Postgres em relação ao varchar(n)tipo:

O requisito de armazenamento para uma string curta (até 126 bytes) é de 1 byte mais a string real, que inclui o preenchimento de espaço no caso de caractere. Strings mais longas têm 4 bytes de sobrecarga em vez de 1.

Vamos supor que eu tenha um varchar(255)campo. E agora, as seguintes afirmações:

  • Se esse campo contiver uma string de 10 bytes, a sobrecarga será de 1 byte. Portanto, a string usará 11 bytes.
  • Se o campo contiver string usando 140 bytes, a sobrecarga será de 4 bytes. Portanto, a string usará 144 bytes.

Essas afirmações acima são verdadeiras? Aqui alguém entende o documento da mesma forma que eu, mas aqui alguém afirma que a sobrecarga é sempre de 4 bytes aqui ?

postgresql varchar
  • 1 respostas
  • 13995 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