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 / user-99331

jesijesi's questions

Martin Hope
DMDM
Asked: 2024-06-10 18:07:29 +0800 CST

SP sendo recompilado com o motivo "Estatísticas alteradas" mesmo após desabilitar auto_stats para todas as tabelas envolvidas

  • 6

Eu estava solucionando um problema de desempenho e preciso de um SP para parar de ser recompilado devido às estatísticas de atualização automática.

Não quero desabilitar a atualização automática de estatísticas em todo o banco de dados, então pensei em desativá-la em todas as tabelas envolvidas usando sp_autostatsproc. Mas mesmo depois de desabilitar as estatísticas de atualização automática em todas as tabelas envolvidas, ela ainda está sendo recompilada com o motivo "Estatísticas alteradas".

Verifiquei a última vez que as estatísticas foram atualizadas e também usei o evento estendido auto_stats para rastrear se as estatísticas estavam sendo atualizadas, mas não está.

REPRODUÇÃO

USE [test]
GO
CREATE TABLE [dbo].[test](
    [a] [int] IDENTITY(1,1) NOT NULL,   [b] [int] NULL, [c] [int] NULL,
PRIMARY KEY CLUSTERED 
(
    [a] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [idx] ON [dbo].[test]
(
    [c] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = ON, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE proc [dbo].[sp1] @a int
as
select * from  test  where c=@a  order by b
GO
sp_autostats 'test','off'
go

--creating lots of changes.
--Session 1
set nocount on 
while 1=1
begin
delete top(1) from test
end

--Session 2
set nocount on 
while 1=1
insert into test select 1, FLOOR(RAND() * (10 - 1 + 1)) + 1;

--powershell 3.  Calling the SP in a loop
while ($true) {
    
        $sqlQuery = "EXEC test.dbo.sp1 @a=100;"
        Invoke-Sqlcmd -ServerInstance 'sql1\s14' -Database 'test' -Query $sqlQuery -Encrypt Optional
        Start-Sleep -Milliseconds 500
}

--Monitor sql_statement_recompile extended event.  Should see a recompile event in a couple minutes with "Statistics changed" as recompile_cause
CREATE EVENT SESSION [test] ON SERVER 
ADD EVENT sqlserver.sql_statement_recompile(SET collect_object_name=(1),collect_statement=(1)
    ACTION(sqlserver.server_principal_name,sqlserver.sql_text))
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

Suspeito que possa ter algo a ver com estatísticas na mesa de trabalho criada para esse tipo. se comentarmos a cláusula order by no SP o problema desaparece. Chamar periodicamente sp_recompiletambém parece redefinir o que quer que esteja rastreando e acionando a recompilação.

Alguma solução alternativa para isso e alguém mais enfrentou esse problema?

sql-server
  • 1 respostas
  • 117 Views
Martin Hope
jesijesi
Asked: 2020-01-29 20:00:55 +0800 CST

Executando sys.dm_db_index_physical_stats em paralelo

  • 3

Estou tentando obter informações de fragmentação em algumas tabelas com mais de 500 GB e estou usando a ...DETAILEDopção de sys.dm_db_index_physical_stats. Estou fazendo isso em uma cópia de restauração do banco de dados de produção em nosso servidor de pré-produção, então não me importo em prejudicar o desempenho do servidor.

Eu executei e parece que está sendo executado em série e está demorando uma eternidade. Tem como rodar dm_db_index_physical_stats()em paralelo? Ou alguma outra configuração está atrapalhando?

Eu acho DBCC TRACEON (8649)e OPTION(USE HINT('ENABLE_PARALLEL_PLAN_PREFERENCE'))não estão disponíveis no SQL Server 2014.

Também tentei DBCC SETCPUWEIGHT(1000);no blog de Paul White aqui . O blog menciona sobre inibidor de paralelismo e um dos quais são as tabelas do sistema. É dm_db_index_physical_stats()considerada uma tabela de sistema?

sql-server performance
  • 1 respostas
  • 289 Views
Martin Hope
jesijesi
Asked: 2019-06-17 23:21:04 +0800 CST

O Service pack tem todas as alterações em uma atualização cumulativa

  • 5

Eu sempre pensei que todas as alterações nas CUs seriam acumuladas no próximo pacote de serviços. Recentemente, estava analisando as alterações no SQL 2016 SP2 e no SQL 2016 CU15 para SP1 .

Fiquei surpreso ao ver que nenhum dos KB no SP1CU15 foi mencionado no SP2. o que estou perdendo?

sql-server sql-server-2016
  • 1 respostas
  • 403 Views
Martin Hope
jesijesi
Asked: 2018-10-20 13:40:27 +0800 CST

Deadlock - Devido à atualização causando o movimento da página de índice dentro de um índice

  • 2

Ainda estou solucionando o impasse mencionado nestas perguntas . Com isso, obtive ajuda para entender por que um select manteria um bloqueio compartilhado e pude testar e confirmar isso também.

Agora estou olhando para o segundo spid envolvido no impasse. Essa sessão faz uma atualização usando uma chave primária (WHERE BatchId = @BatchI , BatchId é o PK) e precisa de IX em duas páginas. Inicialmente, não consegui descobrir por que ele precisava de bloqueios em duas páginas de um índice não clusterizado quando estava apenas atualizando uma linha. Então percebi que a atualização para essa linha alteraria a localização da linha no índice não clusterizado e isso poderia ser o motivo pelo qual ela precisa de bloqueios em duas páginas.

Isso é correto?

Em segundo lugar, por favor, ajude a confirmar se meu entendimento sobre esse impasse está correto. Para simplificar, vamos supor que há apenas duas páginas nesse índice não clusterizado. Página1 e Página2. Então é isso que está acontecendo mais ou menos insira a descrição da imagem aqui

sql-server performance
  • 1 respostas
  • 487 Views
Martin Hope
jesijesi
Asked: 2018-10-15 21:05:07 +0800 CST

Solução de problemas de impasse, vítima segurando o bloqueio compartilhado

  • 1

Estou tentando solucionar a situação de impasse abaixo insira a descrição da imagem aqui

Observando o xml de deadlock, ambas as sessões estão usando o nível de isolamento de leitura confirmada. A pergunta é, no nível de isolamento comprometido de leitura, nessa situação, por que a vítima está segurando o bloqueio compartilhado? Meu entendimento e acabei de testar é que, ao ler tabelas, ele adquiriria bloqueio compartilhado no nível de página/linha e o liberaria imediatamente. Em que situação no nível de isolamento de leitura confirmada, uma sessão deseja manter o bloqueio compartilhado na página que adquiriu?

Todos os bloqueios estão em um índice não clusterizado em uma tabela.

<deadlock>
    <victim-list>
        <victimProcess id="process11634c19088" />
    </victim-list>
    <process-list>
        <process id="process11634c19088" taskpriority="0" logused="0" waitresource="PAGE: 11:13:52372905 " ownerId="57900000774" transactionname="SELECT" lasttranstarted="2018-10-12T09:48:05.360" XDES="0x3e7feedc00" lockMode="S" schedulerid="12" kpid="8544" status="suspended" spid="72" sbid="0" ecid="0" priority="0" trancount="0" lastbatchstarted="2018-10-12T09:48:05.360" lastbatchcompleted="2018-10-12T09:48:05.377" lastattention="1900-01-01T00:00:00.377" clientapp=".Net SqlClient Data Provider" hostname="hostname1" hostpid="6912" loginname="ENETTAD\SVC_APP" isolationlevel="read committed (2)" xactid="57900000774" currentdb="11" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056" databaseName="database1">
            <executionStack>
                <frame procname="database1.dbo.uspBatch_Search" line="88" stmtstart="5068" stmtend="7128" sqlhandle="0x03000b00fad68c201937da0036a9000001000000000000000000000000000000000000000000000000000000">
SELECT @TotalRowCount = COUNT(*)    
  FROM dbo.Batch     
  JOIN #child ce    
   ON ce.ECN = requestednce    
  WHERE BatchId = ISNULL(@BatchId, BatchId)    
   AND RequestedUsername = ISNULL(@RequestedUsername, RequestedUsername)    
   AND requestednce = ISNULL(@requestednce, requestednce)    
   AND BatchStatusId = ISNULL(@StatusId, BatchStatusId)    
   AND BatchStatusId != @NewStatusId   and  BatchStatusId != @CancelledStatusId    
   AND (  (@IsReportRequired = @true AND ReportBlobId IS NOT NULL)     
   OR (@IsReportRequired = @false))    
   AND ( (     
   (@DateType = @CreatedDate AND CreatedDate BETWEEN cast(@FromDate AS varchar(20)) AND cast(@ToDate AS varchar(20)) )    
    OR     
   (@IncludeCurrent = @true AND ( BatchStatusId IN (@QueuedStatus,@InProgressStatus,@ReportingStatus)     
      OR     
       CompletedDate BETWEEN cast(@FromDate AS varchar(20)) AND cast(@ToDate AS varchar(20)))  )    
  )     
  OR @DateType = @IgnoreDateRange    </frame>
                <frame procname="adhoc" line="1" stmtstart="386" sqlhandle="0x01000b005101d12e207be87f2100000000000000000000000000000000000000000000000000000000000000">
EXEC @RETURN_VALUE = [dbo].[uspBatch_Search] @ECN = @p0, @BatchId = @p1, @requestednce = @p2, @RequestedUsername = @p3, @DateType = @p4, @FromDate = @p5, @ToDate = @p6, @StatusId = @p7, @IsReportRequired = @p8, @IncludeCurrent = @p9, @StartRowIndex = @p10, @SortExpression = @p11, @MaximumRows = @p12, @TotalRowCount = @p13 OUTPUT    </frame>
                <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
            </executionStack>
            <inputbuf>
(@p0 int,@p1 int,@p2 int,@p3 varchar(8000),@p4 varchar(8000),@p5 datetime,@p6 datetime,@p7 int,@p8 tinyint,@p9 bit,@p10 int,@p11 varchar(8000),@p12 int,@p13 int output,@RETURN_VALUE int output)EXEC @RETURN_VALUE = [dbo].[uspBatch_Search] @ECN = @p0, @BatchId = @p1, @requestednce = @p2, @RequestedUsername = @p3, @DateType = @p4, @FromDate = @p5, @ToDate = @p6, @StatusId = @p7, @IsReportRequired = @p8, @IncludeCurrent = @p9, @StartRowIndex = @p10, @SortExpression = @p11, @MaximumRows = @p12, @TotalRowCount = @p13 OUTPUT   </inputbuf>
        </process>
        <process id="process2e950984e8" taskpriority="0" logused="10880" waitresource="PAGE: 11:13:14044552 " waittime="241" ownerId="57900000848" transactionname="user_transaction" lasttranstarted="2018-10-12T09:48:05.367" XDES="0xf7c3c0c3b0" lockMode="IX" schedulerid="2" kpid="5476" status="suspended" spid="234" sbid="0" ecid="0" priority="0" trancount="2" lastbatchstarted="2018-10-12T09:48:05.370" lastbatchcompleted="2018-10-12T09:48:05.367" lastattention="1900-01-01T00:00:00.367" clientapp=".Net SqlClient Data Provider" hostname="hostname1" hostpid="6912" loginname="ENETTAD\SVC_APP" isolationlevel="read committed (2)" xactid="57900000848" currentdb="11" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128056" databaseName="database1">
            <executionStack>
                <frame procname="database1.dbo.uspBatch_Update" line="32" stmtstart="1934" stmtend="2586" sqlhandle="0x03000b00b243467b8df206000ba7000001000000000000000000000000000000000000000000000000000000">
UPDATE Batch      
            SET  BatchStatusId = @BatchStatusId,      
            ReportBlobId = @ReportBlobId,      
            CompletedDate = @CompletedDate,    
            ImportReportVersion = @ImportReportVersion,    
            ExportReportVersion = @ExportReportVersion,  
            ErrorCode = @ErrorCode  
            WHERE BatchId  = @BatchI    </frame>
                <frame procname="adhoc" line="1" stmtstart="236" sqlhandle="0x01000b009c24d728c05a7d06ab00000000000000000000000000000000000000000000000000000000000000">
EXEC @RETURN_VALUE = [dbo].[uspBatch_Update] @RequestId = @p0, @BatchId = @p1, @BatchStatusId = @p2, @ReportBlobId = @p3, @CompletedDate = @p4, @ErrorCode = @p5, @ImportReportVersion = @p6, @ExportReportVersion = @p7    </frame>
                <frame procname="unknown" line="1" sqlhandle="0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000">
unknown    </frame>
            </executionStack>
            <inputbuf>
(@p0 uniqueidentifier,@p1 int,@p2 int,@p3 varchar(8000),@p4 datetime,@p5 int,@p6 int,@p7 int,@RETURN_VALUE int output)EXEC @RETURN_VALUE = [dbo].[uspBatch_Update] @RequestId = @p0, @BatchId = @p1, @BatchStatusId = @p2, @ReportBlobId = @p3, @CompletedDate = @p4, @ErrorCode = @p5, @ImportReportVersion = @p6, @ExportReportVersion = @p7   </inputbuf>
        </process>
    </process-list>
    <resource-list>
        <pagelock fileid="13" pageid="52372905" dbid="11" subresource="FULL" objectname="database1.dbo.Batch" id="lock9f21680580" mode="IX" associatedObjectId="72060857777979392" databaseName="database1">
            <owner-list>
                <owner id="process2e950984e8" mode="IX" />
            </owner-list>
            <waiter-list>
                <waiter id="process11634c19088" mode="S" requestType="wait" />
            </waiter-list>
        </pagelock>
        <pagelock fileid="13" pageid="14044552" dbid="11" subresource="FULL" objectname="database1.dbo.Batch" id="lock1506883db00" mode="S" associatedObjectId="72060857777979392" databaseName="database1">
            <owner-list>
                <owner id="process11634c19088" mode="S" />
            </owner-list>
            <waiter-list>
                <waiter id="process2e950984e8" mode="IX" requestType="wait" />
            </waiter-list>
        </pagelock>
    </resource-list>
</deadlock>
sql-server sql-server-2014
  • 1 respostas
  • 417 Views
Martin Hope
jesijesi
Asked: 2018-10-08 23:39:21 +0800 CST

Limpando MSrepl_errors, replicação do SQL Server

  • 2

Nossa tabela MSrepl_errors tem cerca de 15 GB e obteve registros desde o início dos tempos. Qual é a maneira correta de limpar esta tabela. Nós simplesmente excluímos dele?

Editar A limpeza do agente de distribuição já está em execução. insira a descrição da imagem aqui

Felicidades

sql-server sql-server-2014
  • 1 respostas
  • 757 Views
Martin Hope
jesijesi
Asked: 2018-08-03 04:21:29 +0800 CST

Verificação de índice clusterizado em tabela particionada, mesmo quando há índice de cobertura

  • 3

Eu tenho uma tabela particionada que é particionada com base em col1 int. Eu também tenho um índice de cobertura para a consulta que estou tentando solucionar.

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

Acima está o plano

Deixado a seu critério, o SQL Server decide fazer uma verificação de índice clusterizado de toda a tabela, o que obviamente é lento. Se eu forçar o índice (como no plano acima), a consulta será executada rapidamente.

Que lógica mágica o SQL Server usa para decidir que o índice coberto não é útil? Não tenho certeza se top/orderby e rowgoal tem alguma coisa a ver com isso.

A estrutura da minha tabela é

Create table object2(col1 int, col3 datetime, col4 int, col5, col6 etc) clusterd on col1

nonclustered non aligned index is on col3,col4 (col1 is clustered so its included in nonclust)

SELECT top(?) Object1.Column1
    FROM Object2 Object1 WITH (NOLOCK,index(Column2))
    WHERE  Object1.Column3 >= ?
    AND Object1.Column4 IN (?)
    ORDER BY Object1.Column1

Editar repositório adicionado

    CREATE PARTITION FUNCTION [PFtest](int) AS RANGE RIGHT FOR VALUES (100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000)
    GO
    CREATE PARTITION SCHEME [PStest] AS PARTITION [PFtest] all TO ([PRIMARY]);
    GO

    create table test([ID] [int] IDENTITY(1,1) NOT NULL primary key clustered,[Created] [datetime] NULL,[Type] [int] NULL,text1 varchar(10),text2 varchar(20))
    on pstest(id)
    set nocount on

    declare @a int =1
    declare @type int
    while 1=1
    begin
    if @a%30 =0
    insert into test (Created, Type, text1, text2) select getdate(),4,'four','four'
    else
    insert into test (Created, Type, text1, text2) select getdate(),1,'one','one'
    set @a=@a+1
    end
    create nonclustered index ncl1 on test(created, type)

select min(created),max(created) from test
--2018-08-02 22:46:40.187   2018-08-02 22:49:01.577
SELECT top(10) ID
    FROM test  
    WHERE  Created >= '2018-08-02 22:49:01'
    AND Type IN (1, 4)
    ORDER BY ID -- clustered index scan

SELECT top(10) ID
    FROM test  
    WHERE  Created >= '2018-08-02 22:49:01.577'
    AND Type IN (1, 4)
    ORDER BY ID-- index seek of ncl1
sql-server sql-server-2014
  • 2 respostas
  • 820 Views
Martin Hope
jesijesi
Asked: 2018-01-02 20:58:23 +0800 CST

Pergunta de criação de chave simétrica

  • 1

Estou passando pela página CREATE SYMMETRIC KEY (Transact-SQL) .

Lá diz como um cuidado

Quando uma chave simétrica é criptografada com uma senha em vez da chave pública da chave mestra do banco de dados, o algoritmo de criptografia TRIPLE DES é usado. Por causa disso, as chaves criadas com um algoritmo de criptografia forte, como AES, são protegidas por um algoritmo mais fraco.

Não entendi a primeira parte em negrito e tenho algumas perguntas.

  1. Dos meus testes, não vejo uma opção para criptografar uma chave simétrica com a chave mestra do banco de dados.

  2. A chave mestra do banco de dados não é uma chave simétrica. O que eles querem dizer com chave pública da chave mestra do banco de dados?

sql-server sql-server-2014
  • 1 respostas
  • 81 Views
Martin Hope
jesijesi
Asked: 2017-09-06 18:02:27 +0800 CST

Selecionando e inserindo no servidor vinculado

  • 5

Estou tendo uma situação com o servidor vinculado que não consigo entender.

Portanto, temos um servidor vinculado de um servidor 2008R2 para um servidor 2014. A consulta de exemplo abaixo está sendo executada no servidor 2008R2 e funciona bem.

SET XACT_ABORT ON;
 Declare @BatchSize int = 10
      DELETE from LINKEDSRV.DB.DBO.Table
      INSERT INTO LINKEDSRV.DB.DBO.Table (ECN)
      SELECT TOP (10) C1 from LINKEDSRV.DB.DBO.Table22 --order by C1
      SELECT * FROM LINKEDSRV.DB.DBO.Table

Mas quando executo a mesma coisa com o order by C1ele não retorna nenhum resultado.

Segundo caso - Se eu substituir TOP(10)por TOP(@BatchSize)e não order by, também não obtenho nenhum resultado. por exemplo

SELECT TOP (@BatchSize) C1 from LINKEDSRV.DB.DBO.Table22 

Todos os cenários funcionam se eu SET XACT_ABORT OFF. Então o XACT_ABORT tem algum tipo de restrição quando se trata de servidor vinculado?

Editar - fiz mais alguns testes e parece que tem algo a ver com o número de linhas também

Possível Repo

No Servidor A

use testdb
go
create table t1( c1 int, c2 datetime)
create table t2( c1 int, c2 datetime)

insert into t2 select 1, GETDATE()
insert into t2 select  * from t2 -- insert close to 5000 rows, I found the issue around over around 35000 rows

No Servidor B

Criar servidor vinculado ao ServerA

SET XACT_ABORT ON;
Declare @BatchSize int = 10
delete from ServerA.testdb.dbo.t1
insert into ServerA.testdb.dbo.t1 (c1) 
select top (@BatchSize) c1 from ServerA.testdb.dbo.t2 --order by c2
select * from ServerA.testdb.dbo.t1

Sem saída. Mas se você reduzir o número de linhas na tabela t2 para cerca de 2000, funcionará bem.

sql-server sql-server-2008-r2
  • 2 respostas
  • 13005 Views
Martin Hope
jesijesi
Asked: 2017-08-02 16:34:35 +0800 CST

Como desabilitar o roteamento somente leitura no SQL Server

  • 2

Eu sei que posso apenas alterar a string de conexão para remover a applicationintentpropriedade, mas como removo a configuração de dentro do SQL Server?

Por exemplo, se consultarmos sys.availability_read_only_routing_lists, como obtenho um resultado vazio?

sql-server sql-server-2014
  • 2 respostas
  • 2057 Views
Martin Hope
jesijesi
Asked: 2017-06-11 20:30:24 +0800 CST

Entendendo o bloqueio de índice não clusterizado durante uma atualização

  • 4

O script de configuração

CREATE TABLE t2 (   [col1] INT, [col2] INT  );

DECLARE @int INT;
SET @int = 1;

WHILE (@int <= 1000) 
BEGIN
    INSERT INTO t2 
        ([col1], [col2])
    VALUES (@int*2, @int*2);
    SET @int = @int + 1;
END
GO
create clustered index cl on t2(col1)
create  index ncl on t2(col2)

Eu executo uma atualização simples e mantenho a transação aberta no nível de isolamento de leitura confirmada.

begin tran
update t2 set [col2]=[col2]+1  where col1=6

Se eu verificar sp_lock em outra sessão, recebo os resultados abaixo

insira a descrição da imagem aqui

O que estou tentando entender são os bloqueios de teclas no índice não clusterizado (indid 2). Por que há dois bloqueios de teclas no índice não clusterizado?

Se eu verificar a página dbcc na página id 248, eu poderia localizar o óbvio ((1bfceb831cd9)) que é o bloqueio para a entrada para o registro 6 que foi alterado para 7. Saída da PÁGINA DBCC abaixo

insira a descrição da imagem aqui

O que estou tentando entender é qual é o propósito do outro bloqueio de chave (5ebca7ef4e2c) e qual é o seu bloqueio.

sql-server sql-server-2014
  • 1 respostas
  • 1303 Views
Martin Hope
jesijesi
Asked: 2017-05-01 17:12:35 +0800 CST

Não foi possível truncar o log de transações, log_reuse_wait_desc - AVAILABILITY_REPLICA

  • 10

Esta manhã fui acordado por um alerta completo de log de transações em um dos nossos bancos de dados. Esse servidor é um cluster sempre ativo e também um assinante de replicação transacional. Eu verifiquei log_reuse_wait_desc e mostrou logbackup. Alguém desativou acidentalmente os trabalhos de backup de log 4 dias antes, reativei o trabalho de backup de log e o log foi limpo. Como eram 4 da manhã, pensei em ir ao escritório mais tarde naquela manhã e diminuir o log, pois ele cresceu para 400 GB.

10AM- Estou no escritório e verifico o uso do log antes de encolher e estava em torno de 16%. Fiquei surpreso e verifiquei o log_reuse_wait_desc, que mostrava a replicação. Fiquei confuso porque este era um assinante de replicação. Vimos então que o db estava habilitado para CDC e pensamos que poderia ser a causa, então desabilitamos o CDC e agora o log_reuse_wait_desc mostra AVAILABILITY_REPLICA.

Enquanto isso, o uso de logs continua crescendo e está em 17% agora. Eu verifico o painel Alwayson e verifico a fila de envio e refazer e ambos são praticamente zero. Não sei por que a reutilização do log está sendo exibida como AVAILABILITY_REPLICA e não é possível limpar o log.

Alguma ideia de por que isso está acontecendo?

sql-server sql-server-2014
  • 4 respostas
  • 11502 Views
Martin Hope
jesijesi
Asked: 2017-02-07 14:43:27 +0800 CST

Agregado de fluxo para classificação?

  • 5

insira a descrição da imagem aqui

Tentando entender Algumas coisas no plano de consulta acima.

  • Por que há um Stream Aggregate na consulta quando não tenho um grupo por. Eu acho que tem algo a ver com a junção sendo mesclada e está fazendo uma classificação?

  • Em segundo lugar, e mais importante, por que uma estimativa de 13 entrando
    no agregado do fluxo resulta em uma estimativa de 24.595.900? Isso está causando o problema secundário do Object4 obter o índice clusterizado verificado em vez de um loop aninhado. Eu tive que dividir a consulta em duas consultas em vez de usar um OR e a junção se transforma em um loop aninhado e busca em Object4.

Plano de consulta

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

sql-server sql-server-2008-r2
  • 1 respostas
  • 1036 Views
Martin Hope
jesijesi
Asked: 2017-02-01 00:00:09 +0800 CST

cheirando variável?

  • 5

Isso pode ser estúpido e parecer que estou voltando a tentar entender o básico.

Então eu crio uma tabela de teste como abaixo e crio um índice clusterizado nela

create table test( c1 int)

DECLARE @Random INT;
DECLARE @Upper INT;
DECLARE @Lower INT
SET @Lower = 1 
SET @Upper = 10000 
while 1=1
begin
SELECT @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0)
insert into test SELECT @Random
end 

create clustered index cidx on test(c1)

Agora estou executando a consulta abaixo com o plano de execução real em

DECLARE @Min INT

SET @Min = 216 --selected this cause this was a histogram step

select * from test  where c1 = @Min
select * from test  where c1 = @Min option(recompile)

Então para a primeira consulta o comportamento é o esperado, o número estimado de linhas é calculado a partir do vetor densidade.

Buscar Predicados - Buscar Chaves 1 : Prefixo: [db].[dbo].[test].c1 = Operador Escalar( [@Min] )

insira a descrição da imagem aqui

Mas, para a segunda consulta, parece que o sql server pode farejar o valor com a opção (recompilar). Eu pensei que o SQL Server não pode farejar variáveis ​​mesmo se usarmos a opção recompilar?

Buscar Predicados - Buscar Chaves 1 : Prefixo: [DB].[dbo].[test].c1 = Operador Escalar( (216) )

insira a descrição da imagem aqui

Então, como você pode ver pelo número estimado de linhas, o primeiro é 3,2511 que veio do vetor densidade e para o segundo o número estimado de linhas de 7 vem do histograma.

Então é verdade que o SQL Server pode farejar a variável quando recompilamos a consulta ad hoc ou é algo que eu não entendo?

sql-server sql-server-2014
  • 1 respostas
  • 220 Views
Martin Hope
jesijesi
Asked: 2017-01-19 15:10:54 +0800 CST

Adicionar artigo à replicação de transação sem gerar um instantâneo

  • 0

Eu tenho uma replicação de transação e a assinatura foi sincronizada do instantâneo anos atrás. Agora eu tenho uma nova tabela que precisa ser adicionada à replicação. O problema é que a tabela está perto de um TB e eu não quero gerar um instantâneo para essa tabela, apenas quero que os novos dados sejam sincronizados, como quando você sincroniza do backup. Suas inserções apenas na tabela e posso sincronizar os dados antigos manualmente mais tarde.

Como faço a replicação para iniciar a transferência dos dados sem gerar o snapshot.

sql-server sql-server-2014
  • 4 respostas
  • 1362 Views
Martin Hope
jesijesi
Asked: 2016-12-05 21:35:05 +0800 CST

Erro de replicação do SQL Server "nome do perfil não é válido"

  • 1

Hoje comecei a receber a mensagem de erro abaixo em um dos agentes de distribuição. A publicação tem uma assinatura push e on pull. O erro apareceu apenas na assinatura push. O servidor de publicação tem 5 outras publicações, cada uma com assinatura pull e push para os mesmos servidores e todas funcionam bem.

Tentei alterar o perfil do agente distribuidor e reiniciei o trabalho de distribuição, mas não funcionou.

Message
2016-12-05 00:41:45.429 Copyright (c) 2014 Microsoft Corporation
2016-12-05 00:41:45.429 Microsoft SQL Server Replication Agent: distrib
2016-12-05 00:41:45.429 
2016-12-05 00:41:45.429 The timestamps prepended to the output lines are expressed in terms of UTC time.
2016-12-05 00:41:45.429 User-specified agent parameter values:
            -Subscriber SubscriberServer
            -SubscriberDB DBName
            -Publisher Publisher1
            -Distributor DistributerServer
            -DistributorSecurityMode 1
            -Publication DBName_HA_Pub
            -PublisherDB DBName
            -Continuous
            -XJOBID 0x0D2A9EB2B6FBDF4CAE11F0A700401787
            -XJOBNAME Publisher_instance_-DBName-DBName_HA_Pub-SubscriberServer-48
            -XSTEPID 2
            -XSUBSYSTEM Distribution
            -XSERVER DistributerServer
            -XCMDLINE 0
            -XCancelEventHandle 0000000000006888
            -XParentProcessHandle 00000000000083E8
2016-12-05 00:41:45.429 Startup Delay: 668 (msecs)
2016-12-05 00:41:46.101 Connecting to Distributor 'DistributerServer'
2016-12-05 00:41:46.179 Parameter values obtained from agent profile:
            -bcpbatchsize 2147473647
            -commitbatchsize 100
            -commitbatchthreshold 1000
            -historyverboselevel 2
            -keepalivemessageinterval 300
            -logintimeout 15
            -maxbcpthreads 1
            -maxdeliveredtransactions 0
            -pollinginterval 5000
            -querytimeout 1800
            -skiperrors 
            -transactionsperhistory 100
2016-12-05 00:41:46.179 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:41:46.226 Initializing
2016-12-05 00:41:46.288 
42000 profile name is not valid 14607
2016-12-05 00:41:46.288 
42000 profile name is not valid 14607
2016-12-05 00:41:46.288 
42000 profile name is not valid 14607
2016-12-05 00:41:46.304 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:41:46.304 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:41:46.304 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:41:51.351 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:41:51.351 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:41:51.367 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:42:01.390 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:42:01.390 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:42:01.406 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:42:16.423 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:42:16.423 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:42:16.454 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:42:36.474 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:42:36.474 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:42:36.505 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:43:01.524 Disconnecting from Subscriber 'SubscriberServer'
2016-12-05 00:43:01.524 Connecting to Subscriber 'SubscriberServer'
2016-12-05 00:43:01.540 Error executing a batch of commands. Retrying individual commands.
2016-12-05 00:43:01.556 Agent message code 14607. profile name is not valid
2016-12-05 00:43:01.571 Category:COMMAND
Source:  Failed Command
Number:  
Message: if @@trancount > 0 rollback tran
2016-12-05 00:43:01.571 Category:NULL
Source:  Microsoft SQL Server Native DBName 11.0
Number:  14607
Message: profile name is not valid
sql-server transactional-replication
  • 1 respostas
  • 1479 Views
Martin Hope
jesijesi
Asked: 2016-11-21 17:05:59 +0800 CST

Alteração da conta de serviço do SQL Server de conta virtual para conta AD

  • 2

Tive uma pergunta sobre como a permissão local é concedida (como fazer logon como um serviço e substituir um token de nível de processo) quando você altera a conta de serviço do SQL Server da conta virtual (NT SERVICE\MSSQLSERVER) para uma conta do Windows AD.

Eu instalei o sql server pela primeira vez sem especificar uma conta do Windows. Após a instalação, quando verifico "Política de Segurança Local", pude ver "NT SERVICE\MSSQLSERVER" adicionado a permissões como "Fazer logon como um serviço" e "Substituir um token de nível de processo".

Em seguida, mudei a conta de serviço para uma conta do Windows AD usando o gerenciador de configuração, voltei e verifiquei a Política de segurança local novamente e não consegui encontrar a nova conta do Windows AD adicionada a nenhuma delas.

Então, estou me perguntando como a conta do Windows AD obtém essas permissões? Está de alguma forma vinculado às contas virtuais?

SQL Server 2014, Windows 2012R2

Eu passei pelas perguntas abaixo, mas esta questão específica não é abordada.

Privilégios e direitos do Windows da conta de serviço do SQL Server

sql-server sql-server-2014
  • 2 respostas
  • 1278 Views
Martin Hope
jesijesi
Asked: 2016-10-16 21:33:40 +0800 CST

FCI com grupo de disponibilidade Alwayson (armazenamento assimétrico)

  • 1

Estou tentando configurar um ambiente de demonstração onde tenho um cluster do Windows com 3 nós.
O nó 1 será o servidor sql autônomo e a réplica primária. Os nós 2 e 3 estarão em uma instância de cluster de failover (sqlclu1) e essa será a réplica secundária assíncrona.

Eu instalei o sql server como uma instância em cluster (nó 2 e 3) e possui um armazenamento compartilhado (E: drive) que é apresentado apenas para o nó 2 e 3 e que contém arquivos de dados sql (quero dizer, o possível proprietário para este disco é apenas o nó 2 e 3 e também não conectei o disco ao nó 1).

Estou preso na próxima etapa em que estou tentando instalar um servidor sql autônomo no nó 1 por ser a réplica primária. O problema é que quando tento adicionar um disco com o mesmo nome (E :) não está me deixando fazer isso. E:drive simplesmente não está disponível na lista quando crio um novo volume.

Acho que enchi algo e estou me perguntando como o armazenamento assimétrico precisa ser configurado para que eu possa criar um disco com a mesma letra de unidade.

De acordo com https://msdn.microsoft.com/en-us/library/jj215886.aspx

Armazenamento assimétrico Dois FCIs, um em cada site em um único WSFC de vários sites, apresentam considerações sobre como o armazenamento compartilhado é tratado. Cada FCI tem seu próprio armazenamento compartilhado. Os nós no site primário compartilham armazenamento entre si para formar um FCI de armazenamento compartilhado, e os nós no site DR compartilham armazenamento entre si para formar outro FCI de armazenamento compartilhado. O armazenamento no site primário não é visível para os nós no site de recuperação de desastres e vice-versa. Esse arranjo de armazenamento, em que um disco de cluster é compartilhado entre um subconjunto de nós em um WSFC, é conhecido como armazenamento assimétrico. Antes da capacidade de armazenamento assimétrico, o armazenamento compartilhado precisava estar visível para todos os nós no WSFC (armazenamento simétrico). Esse aprimoramento do Windows Server é a peça-chave da funcionalidade que permite a arquitetura da solução FCI + AG discutida neste white paper. Ao habilitar essa funcionalidade, você pode combinar a solução de armazenamento compartilhado (FCI) com a solução de armazenamento não compartilhado (grupos de disponibilidade), em uma única solução HA + DR.Conseqüentemente, esse aprimoramento também permite que você use letras de unidade idênticas para recursos de disco compartilhados em datacenters .

Usando sql server 2014 e windows 2012R2

sql-server sql-server-2014
  • 2 respostas
  • 784 Views
Martin Hope
jesijesi
Asked: 2016-09-02 01:18:07 +0800 CST

Estimativa de cardinalidade para >= e > para valor estatístico intra-etapa

  • 13

Estou tentando entender como o SQL Server tenta estimar as cláusulas 'maior que' e 'maior que igual a' no SQL Server 2014.

Acho que entendo a estimativa de cardinalidade quando atinge a etapa, por exemplo, se eu entender

    select * from charge where charge_dt >= '1999-10-13 10:47:38.550'

A estimativa de cardinalidade é 6672, que pode ser facilmente calculada como 32(EQ_ROWS) + 6624(RANGE_ROWS) + 16 (EQ_ROWS) = 6672 (histograma na captura de tela abaixo)

insira a descrição da imagem aqui

Mas quando eu faço

    select * from charge where charge_dt >= '1999-10-13 10:48:38.550' 

(aumentei o tempo para 10:48, então não é um passo)

a estimativa é 4844,13.

Como isso é calculado?

sql-server sql-server-2014
  • 2 respostas
  • 685 Views

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