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-31995

TheGameiswar's questions

Martin Hope
TheGameiswar
Asked: 2020-08-16 08:58:03 +0800 CST

Por que tenho esperas THREADPOOL mesmo tendo threads disponíveis?

  • 3

Estamos vendo os tempos limite de inscrição e, com a ajuda do Kit de primeiros socorros, capturei detalhes. Uma das coisas que me chamou a atenção foi:

Espera de envenenamento detectada: pool de threads

Então eu corri as consultas abaixo:

---get thread pool waits---thread pool wait query
SELECT count(*) FROM sys.dm_os_waiting_tasks 
 where wait_type ='threadpool'

-- get threads available--Threads available query
 declare @max int
select @max = max_workers_count from sys.dm_os_sys_info

select 
    @max as 'TotalThreads',
    sum(active_Workers_count) as 'CurrentThreads',
    @max - sum(active_Workers_count) as 'AvailableThreads',
    sum(runnable_tasks_count) as 'WorkersWaitingForCpu',
    sum(work_queue_count) as 'RequestWaitingForThreads' ,
    sum(current_workers_count) as 'AssociatedWorkers',
    Getdate() as 'DateLogged'
from  
    sys.dm_os_Schedulers where status='VISIBLE ONLINE'

Quando executo a consulta "espera do pool de threads", as esperas do pool de threads aparecem no resultado acima (às vezes, mais de 20 resultados) por fração de segundo e desaparecem quando o executo novamente. Mas pude ver mais de 400 threads disponíveis no segundo conjunto de resultados por meio da consulta "threads disponíveis".

Não consigo entender por que estou vendo THREADPOOLesperas quando executo a primeira consulta, mas a segunda consulta mostra que os segmentos ainda estão disponíveis. Alguém pode explicar por favor?

  • Maxdop: 8
  • Grau máximo de paralelismo: 50

O pool de threads aguarda: insira a descrição da imagem aqui

insira a descrição da imagem aqui

sql-server wait-types
  • 1 respostas
  • 592 Views
Martin Hope
TheGameiswar
Asked: 2020-06-26 09:13:15 +0800 CST

Podemos reduzir a contenção de bloqueio de linha em um índice

  • 2

Temos poucas consultas que verificam seu status em uma tabela a cada 5 segundos e atualizam seu status.

Abaixo está a aparência da consulta (todas as colunas da tabela estão na consulta de atualização)

update table1
set 
Name='somename'
DetailMessage='Error'
LastUpdate=getdate()
where id=14

Recentemente, esta tabela teve problemas de bloqueio e a consulta de atualização acima é um bloqueador de leads Sp_Blitzindex.

Abaixo estão alguns passos que eu fiz até agora ..
1. Assegurar que as chaves estrangeiras sejam indexadas (elas também são chave primária)
2. Crie índices para selecionar instruções que podem se beneficiar do novo índice, para que a contenção de bloqueio neste índice seja reduzida
3. Também reduzi o Fillfactor para 10, antes cada página armazenava 93 linhas, agora armazena apenas 7 linhas por página (ainda não consegui me dar uma explicação 100% lógica sobre como essa mudança ajudaria... )

Alguma sugestão adicional.. Avise-me se precisar de mais detalhes

Abaixo está o esquema da tabela (nomes das colunas alterados) e a tabela possui apenas 350 linhas e as consultas atualizam esta tabela na frequência de 20/30 consultas a cada 5 segundos...

create table dbo.table1
(
[ID] [int] NOT NULL,
[Name] [varchar](500) NULL,
[DetailMessage] [nvarchar](max) NOT NULL ,  
[LastUpdate] [datetime] NOT NULL
)

PS: Esta é uma consulta de terceiros e não podemos modificar o banco de dados de origem com alterações como alterar o nível de isolamento...

Versão SQL :SQl 2012

sql-server locking
  • 2 respostas
  • 676 Views
Martin Hope
TheGameiswar
Asked: 2018-06-11 02:26:29 +0800 CST

Estranho problema com o servidor vinculado e o uso de IF existe

  • 1

Estamos tentando inserir dados do servidor remoto usando a consulta abaixo

if exists (select 1 from [ServerA].[DB_A].information_Schema.tables where table_name =MonthlyReportData')
begin
Insert into [ServerB].[DB_B].dbo.Monthlydata
select  *,getdate() from  
[ServerA].[DB_A].dbo.monthlydata
end

A consulta acima falha com o erro abaixo

O provedor OLE DB "SQLNCLI11" para o servidor vinculado "ServerA" não contém a tabela ""DB_A".."dbo",."MonthlyReportData"". A tabela não existe ou o usuário atual não tem permissões nessa tabela.

A tabela não existe, mas o que é estranho é a verificação da consulta do bloco 'begin', mesmo depois de existir falha

Se modificarmos a consulta abaixo, ela funcionará sem nenhum erro e a impressão 1 não será impressa

  if exists (select 1 from [ServerA].[DB_A].information_Schema.tables where table_name =MonthlyReportData')
    begin
    print 1
    end

se modificarmos ainda mais a consulta para, consultar uma tabela que existe, ela funciona, quero dizer que não vai mais longe após o beginbloco

 if exists (select 1 from [ServerA].[DB_A].information_Schema.tables where table_name =MonthlyReportData')
    begin
    Insert into [ServerB].[DB_B].dbo.Monthlydata
    select  *,getdate() from  
    [ServerA].[DB_A].dbo.validtable
    end

No exemplo acima,no beginbloco,observe existe funciona corretamente e não lança nenhum erro apenas quando você tem uma tabela válida no begin and endbloco''

Espero ter explicado isso claramente.

Abaixo estão algumas coisas verificadas

1.O problema existe mesmo com information_schema.tables
2.Tentei isso também, mas sem ajuda: https://stackoverflow.com/questions/22182437/check-if-table-exists-in-external-linked-database
3.Account usado para conectar é Sysadmin

A resposta abaixo funciona quando eu uso uma única instrução e uso exec.Eu deveria ter me deixado claro, a consulta acima é gerada dinamicamente e passada para exec..veja o exemplo abaixo

set @Sql='

Insert into [server_A].[db_A].dbo.Monthlydata
select  *,getdate() from ' +quotename(@dblocation)+'.'+quotename(cast(@dbname as varchar(20)))+'.dbo.MonthlyReportData
end'


exec(@sql)

Por favor, deixe-me saber se eu não estiver claro ou se você precisar de mais informações

Abaixo está meu código completo

DEclare @sql varchar(4000)
Declare @dblocation varchar(200)
declare @dbname varchar(200)

Declare Getdata cursor for
select  dblocation,id
from
temp

open GetBMSdata
fetch next from Getdata into @dblocation,@dbname



while @@FETCH_STATUS=0
begin

set @Sql='
if exists (select 1 from '+quotename(@dblocation)+'.'+quotename(@dbname)+'dbo.MonthlyReportData)
begin
Insert into [servera].[dba].dbo.Monthlydata
select  * from ' +quotename(@dblocation)+'.'+quotename(@dbname)+'dbo.MonthlyReportData
end'

exec(@sql)






fetch next from Getdata into @dblocation,@dbname
end


close Getdata
deallocate Getdata

Acabei modificando meu código como abaixo

set @Sql='
if exists (select 1 from '+quotename(@dblocation)+'.'+quotename(+Cast(@dbname as varchar(200)))+'.sys.tables where name='MonthlyReportData'')
begin
exec(
''
Insert into [serverb].dba_b.dbo.MonthlyReportData
select  *,getdate() from ' +quotename(@dblocation)+'.'+quotename(+Cast(@dbname as varchar(200)))+'.dbo.MonthlyReportData
''
)
end
'
print @sql
exec(@sql)
sql-server
  • 1 respostas
  • 626 Views
Martin Hope
TheGameiswar
Asked: 2018-05-15 07:07:24 +0800 CST

Invoke SQLCMD não funciona quando usado com xp_cmdshell

  • 5

Estou tentando obter o relatório de espaço em disco de vários servidores e inseri-los na tabela sql ..

abaixo está uma amostra do que estou tentando fazer, os nomes dos servidores serão preenchidos a partir de uma tabela e passados ​​como uma lista separada por vírgulas. Mesmo passando um servidor também tem o mesmo resultado

set @ps = 'powershell.exe -noexit -c "

$computers=Get-WmiObject -Class Win32_Volume '+@servernames+'
foreach($computer in $computers) 
{ 
$pscomputername=$computer.pscomputername 
$name=$computer.name 
$capacity=$computer.capacity 
$freespace=$computer.freespace 
$Label=$computer.Label 

$insertquery=" 
INSERT INTO [dbo].[temp_disksdata] 
           (
           [servername] ,
           [DiskName] ,
           [Capacity(GB)] ,
           [FreeSpace(GB)],
           [label]
           )
     VALUES 
           (''$pscomputername'' ,
           ''$name'' ,
           ''$capacity'',
           ''$freespace'',
           ''$Label''
           ) 
GO
" 

Invoke-SQLcmd  -query $insertquery -ServerInstance ''someserver'' -Database dbname

}

"';

Agora eu tento passar a variável para xp_cmdshell como abaixo

execute xp_cmdshell @ps;

Quando invocado no SSMS, acima retorna nulo, mas funciona no powershell.

Alguma idéia por quê?

Abaixo estão algumas coisas que eu tentei

1.A mesma conta (admin) é usada tanto no shell quanto no ssms
2.tentei várias coisas como importar módulos
3.XP_CMDshell funciona, mas isso retorna nulo apenas para esta consulta
4.Eu tentei adicionar -nowait, mas isso não funciona ajude também

Eu tenho tentado fazer isso por mais de um dia, mas isso não funciona .. Eu tenho que usar xp_cmdshell porque escrever ac # app não é permitido. O arquivo Bat não ajuda porque os nomes dos servidores são passados ​​como uma vírgula lista separada.

Estou modificando o código e me disseram para não reescrever quando solicitado

Por favor, deixe-me saber se você precisar de mais informações

Repro:
Abaixo está todo o comando da impressão, se você remover o powershell.exe e -c , abaixo será executado no powershell ..

powershell.exe  -c "

$computers=Get-WmiObject -Class Win32_Volume 'servername'
foreach($computer in $computers) 
{ 
$pscomputername=$computer.pscomputername 
$name=$computer.name 
$capacity=$computer.capacity 
$freespace=$computer.freespace 
$Label=$computer.Label 

$insertquery=" 
INSERT INTO [dbo].[temp_disksdata] 
           (
           [servername] ,
           [DiskName] ,
           [Capacity(GB)] ,
           [FreeSpace(GB)],
           [label]
           )
     VALUES 
           ('$pscomputername' ,
           '$name' ,
           '$capacity',
           '$freespace',
           '$Label'
           ) 

" 

Invoke-SQLcmd  -query $insertquery -ServerInstance 'servername' -Database dbname 

}

"
sql-server sql-server-2012
  • 3 respostas
  • 2245 Views
Martin Hope
TheGameiswar
Asked: 2017-10-06 04:22:01 +0800 CST

O SQL Server pode usar vários índices para a mesma consulta?

  • 6

Essa pergunta pode ter sido feita antes, mas tentei pesquisar com este termo "o SQL Server pode usar dois índices para a mesma consulta" e não obteve resultados.

Suponha que você tenha a consulta abaixo:

select col1a,colb
from #ab
where col1a in (
Select col1a from #ab 
group by col1a 
having count (distinct colb)>1)

E você tem o índice abaixo:

create index nci on #ab(colb)
include(col1a)

Este é o plano de execução e também o link Colar o Plano .

NOZES

A parte inferior do plano é para a consulta abaixo:

Select col1a from #ab 
group by col1a 
having count (distinct colb)>1

A verificação da tabela/parte superior do plano é para a consulta abaixo:

select col1a,colb
from #ab
where col1a in (

Pergunta:

Se eu tiver um índice como abaixo:

create index nic_toppart on #ab(Col1a,colb)

Será escolhido para a parte superior do plano?

Resumindo eu quis dizer:

O SQL Server pode usar o índice ncipara agrupar parte/parte inferior do plano e usar o índice nic_toppartpara a parte superior do plano

Isso é possível?

Meus testes mostram que só pode escolher um.

Abaixo estão os dados de teste. Por favor, deixe-me saber se eu não sou claro.

create table #ab
(
col1a int,
colb char(2)
)

insert into #ab
values
(1,'a'),
(1,'a'),
(1,'a'),
(2,'b'),
(2,'c'),
(2,'c')

select col1a,colb
from #ab
where col1a in (
Select col1a from #ab 
group by col1a 
having count (distinct colb)>1)


create index nci on #ab(colb)
include(col1a)

create index nci_p on #ab(col1a,colb)
sql-server index
  • 1 respostas
  • 8053 Views
Martin Hope
TheGameiswar
Asked: 2017-08-08 22:02:21 +0800 CST

Hash chaves sonda e residual

  • 21

Digamos, temos uma consulta como esta:

select a.*,b.*
from 
a join b
on a.col1=b.col1
and len(a.col1)=10

Supondo que a consulta acima use um Hash Join e tenha um residual, a chave de investigação será col1e o residual será len(a.col1)=10.

Mas ao passar por outro exemplo, pude ver que tanto a sonda quanto o residual são a mesma coluna. Abaixo está uma elaboração sobre o que estou tentando dizer:

Consulta:

select *
from T1 join T2 on T1.a = T2.a 

Plano de execução, com sonda e residual em destaque:

insira a descrição da imagem aqui

Dados de teste:

create table T1 (a int, b int, x char(200))
create table T2 (a int, b int, x char(200))

set nocount on
declare @i int
set @i = 0
while @i < 1000
  begin
      insert T1 values (@i * 2, @i * 5, @i)
    set @i = @i + 1
  end

declare @i int
set @i = 0
while @i < 10000
  begin
    insert T2 values (@i * 3, @i * 7, @i)
    set @i = @i + 1
  end

Pergunta:

Como uma sonda e um resíduo podem ser a mesma coluna? Por que o SQL Server não pode usar apenas a coluna do probe? Por que ele precisa usar a mesma coluna como residual para filtrar as linhas novamente?

Referências para dados de teste:

  • Hash Join (Blog do SQL Server de Craig Freedman)
sql-server performance
  • 1 respostas
  • 5121 Views
Martin Hope
TheGameiswar
Asked: 2017-07-26 02:19:15 +0800 CST

Limitações do recurso SQLAZURE-máximo de sessões simultâneas

  • 4

Eu estava tentando selecionar uma camada para nosso consumo interno e passando por essas limitações em detalhes.. Limites de recursos do Banco de Dados SQL do Azure

Um caso particular de problema estava abaixo do gráfico e valores particularmente destacados

insira a descrição da imagem aqui

como você vê, do destacado, há uma limitação máxima simultânea de 60 logins simultâneos e 600 sessões simultâneas

PERGUNTE:
uma única consulta pode ir em paralelo e pode ter várias sessões, essas sessões contarão sob essa limitação?

eu tentei testar isso usando o artigo de Paul White Forcing a Parallel Query Execution Plan como abaixo

DBCC FREEPROCCACHE
DBCC SETCPUWEIGHT(1000)

GO
-- Query to test  
some expensive query
GO

DBCC SETCPUWEIGHT(1)  
DBCC FREEPROCCACHE   

ou usando

OPTION (RECOMPILE, QUERYTRACEON 8649)

mas eu só posso ir até 9 sessões, quando verifiquei usando abaixo DMV

select * from sys.dm_os_tasks 
where session_id=61

e esses sinalizadores de rastreamento e opções DBCC não funcionarão no azure. deixe-me saber se não estiver claro

sql-server azure-sql-database
  • 1 respostas
  • 1586 Views
Martin Hope
TheGameiswar
Asked: 2017-04-20 19:49:31 +0800 CST

A consulta mostra o custo de classificação, mesmo quando o índice necessário está disponível

  • 5

Esta pergunta é do SO, sinalizada, mude para DBA.SE .. mas posso não ver isso acontecendo, devido a votos positivos .. então postando aqui

abaixo estão os dados de teste:

--Main Table

 CREATE TABLE [dbo].[LogTable]
    (
      [LogID] [int] NOT NULL
                    IDENTITY(1, 1) ,
      [DateSent] [datetime] NULL,
    )
 ON [PRIMARY]
GO
 ALTER TABLE [dbo].[LogTable] ADD CONSTRAINT [PK_LogTable] PRIMARY KEY CLUSTERED  ([LogID]) ON [PRIMARY]
GO
 CREATE NONCLUSTERED INDEX [IX_LogTable_DateSent] ON [dbo].[LogTable] ([DateSent] DESC) ON [PRIMARY]
GO
 CREATE NONCLUSTERED INDEX [IX_LogTable_DateSent_LogID] ON [dbo].[LogTable] ([DateSent] DESC) INCLUDE ([LogID]) ON [PRIMARY]
GO


--Cross table

 CREATE TABLE [dbo].[LogTable_Cross]
    (
      [LogID] [int] NOT NULL ,
      [UserID] [int] NOT NULL
    )
 ON [PRIMARY]
GO
 ALTER TABLE [dbo].[LogTable_Cross] WITH NOCHECK ADD CONSTRAINT [FK_LogTable_Cross_LogTable] FOREIGN KEY ([LogID]) REFERENCES [dbo].[LogTable] ([LogID])
GO
 CREATE NONCLUSTERED INDEX [IX_LogTable_Cross_UserID_LogID]
 ON [dbo].[LogTable_Cross] ([UserID])
 INCLUDE ([LogID])
GO


-- Script to populate them
 INSERT INTO [LogTable]
        SELECT TOP 100000
                DATEADD(day, ( ABS(CHECKSUM(NEWID())) % 65530 ), 0)
        FROM    sys.sysobjects
                CROSS JOIN sys.all_columns


 INSERT INTO [LogTable_Cross]
        SELECT  [LogID] ,
                1
        FROM    [LogTable]
        ORDER BY NEWID()

 INSERT INTO [LogTable_Cross]
        SELECT  [LogID] ,
                2
        FROM    [LogTable]
        ORDER BY NEWID()

 INSERT INTO [LogTable_Cross]
        SELECT  [LogID] ,
                3
        FROM    [LogTable]
        ORDER BY NEWID()


GO

Quando usamos a consulta simples abaixo,

SELECT  DI.LogID              
FROM    LogTable DI              
        INNER JOIN LogTable_Cross DP ON DP.LogID = DI.LogID  
        WHERE  DP.UserID = 1  
ORDER BY DateSent DESC

consulta mostra classificação

insira a descrição da imagem aqui

De acordo com meu entendimento, o custo de classificação deve ser evitado, pois temos o índice necessário

 CREATE NONCLUSTERED INDEX [IX_LogTable_DateSent] ON [dbo].[LogTable] ([DateSent] DESC) ON [PRIMARY]

e também cavando no plano mostra que o mesmo índice é usado ..

Minhas perguntas são:
1.Por que o custo de classificação ainda está presente
2.O que exatamente ordered property is truesignifica.

Poucas observações/trabalhos que fiz:
1.A propriedade Ordered está definida como false

então eu reescrevi a consulta como abaixo

   SELECT  DI.LogID              
    FROM    LogTable DI              
            INNER JOIN LogTable_Cross DP ON DP.LogID = DI.LogID  
            WHERE  DP.UserID = 1  and di.datesent is not null
    ORDER BY DateSent DESC

reescrevendo como acima, torna a propriedade ordenada como verdadeira, mas ainda assim a classificação está presente

mais próximo que posso encontrar é este artigo de Paul White: A Tale of Two Index Hints ,neste artigo,o ponto abaixo esclarece por que esse tipo ocorre

Para tabelas muito grandes, o otimizador pode calcular que uma varredura orientada pelo IAM pode economizar mais tempo do que seria consumido pela classificação extra, e um plano com a varredura + classificação não ordenada seria escolhido. Esta é uma otimização heurística: o otimizador não sabe nada sobre o nível real de fragmentação de um inde

Mas essa consulta requer classificação e não deve atender às condições de uma verificação do IAM

Deixe-me saber, se você precisar de mais detalhes

sql-server performance
  • 1 respostas
  • 4234 Views
Martin Hope
TheGameiswar
Asked: 2017-01-04 05:45:10 +0800 CST

Excluir da tabela com (instantâneo)

  • 1

Eu estava tentando aprender querystore. Ao passar por algumas consultas envolvidas no armazenamento de consultas, uma das consultas está abaixo

DELETE TOP (1000000)
FROM [sys].[memory_optimized_history_table_1179151246]
 WITH (SNAPSHOT) 

consulta completa:

(@rowcount INT OUTPUT) DELETE TOP (1000000) FROM [sys].[memory_optimized_history_table_1179151246] WITH (SNAPSHOT) 
OUTPUT 
DELETED.[ColdRoomTemperatureID], DELETED.[ColdRoomSensorNumber], DELETED.[RecordedWhen], DELETED.[Temperature], DELETED.[ValidFrom], DELETED.[ValidTo]  
 INTO [Warehouse].[ColdRoomTemperatures_Archive]  
 WHERE [ValidTo] < GetHkOldestTxTemporalTs() 

Pesquisei muito para ver o que WITH (SNAPSHOT)significa a opção, mas não consegui encontrar nada.

Você pode me ajudar a entender o que WITH (SNAPSHOT)significa?

Deixe-me saber, se você precisar de mais informações.

sql-server sql-server-2016
  • 1 respostas
  • 1098 Views
Martin Hope
TheGameiswar
Asked: 2016-12-07 06:58:23 +0800 CST

Quebra de consulta em IF EXISTS torna muito lento

  • 24

Eu tenho a consulta abaixo:

select databasename 
from somedb.dbo.bigtable l where databasename ='someval' and source  <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source)

A consulta acima é concluída em três segundos.

Se a consulta acima retornar algum valor, queremos que o procedimento armazenado EXIT, então eu o reescrevo como abaixo:

If Exists(
select databasename 
from somedb.dbo.bigtable l where databasename ='someval' and source  <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source)
)
Begin
Raiserror('Source missing',16,1)
Return
End

No entanto, isso está demorando 10 minutos.

Posso reescrever a consulta acima como abaixo, que também é concluída em menos de 3 segundos:

  select databasename 
from somedb.dbo.bigtable l where databasename ='someval' and source  <>'kt'
and not exists(select 1 from dbo.smalltable c where c.source=l.source
if @@rowcount >0
Begin
Raiserror('Source missing',16,1)
Return
End

O problema com a reescrita acima é que a consulta acima faz parte de um procedimento armazenado maior e retorna vários conjuntos de resultados. Em C#, iteramos cada conjunto de resultados e fazemos algum processamento.

O acima retorna um conjunto de resultados vazio, portanto, se eu seguir essa abordagem, terei que alterar meu C# e fazer a implantação novamente.

Então minha pergunta é,

por que usar apenas IF EXISTSmuda o plano para levar tanto tempo?

Abaixo estão os detalhes que podem ajudá-lo e deixe-me saber se você precisar de algum detalhe:

  1. Criar script de tabela e estatísticas para obter o mesmo plano que o meu
  2. Plano de execução lenta
  3. Plano de execução rápida

    Plano lento usando Brentozar Cole o plano
    Plano rápido usando Brentozar Cole o plano

Nota: Ambas as consultas são iguais (usando parâmetros), a única diferença é EXISTS(posso ter cometido alguns erros ao anonimizar).

Os scripts de criação da tabela estão abaixo:

http://pastebin.com/CgSHeqXc -- estatísticas de mesa pequena
http://pastebin.com/GUu9KfpS -- estatísticas de mesa grande

sql-server
  • 3 respostas
  • 11379 Views
Martin Hope
TheGameiswar
Asked: 2016-07-27 03:36:50 +0800 CST

O que é o Operador BMK no SQLServer

  • 10

Eu estava tentando responder a esta pergunta afirmando que a cláusula é opcional .. Mas estou preso com um operador no plano .. abaixo está a captura de tela do plano de execução ..

insira a descrição da imagem aqui

Como você pode ver, há um operador BMK no plano de consulta, mas nenhuma indicação mostrando como ele é calculado.

passos que tentei até agora:
comecei a pesquisar com BMK1000, mas ele mostra um monte de perguntas com o mesmo operador. finalmente encontrei um tópico que diz "O BMK que você está referenciando é o local de armazenamento dentro do heap que é mantido com o índice não clusterizado em vez da chave do cluster."..Mas não tenho certeza de como isso está relacionado a mim, já que não tenho nenhum índice..

PERGUNTE:
o que é o operador BMK e como ele é calculado. Quaisquer ponteiros também serão úteis

Aqui está o SQLFiddle para reproduzir o problema

sql-server execution-plan
  • 1 respostas
  • 2936 Views
Martin Hope
TheGameiswar
Asked: 2016-07-12 00:52:00 +0800 CST

Object_name(object_id) retornando resultados incorretos

  • 2

Estamos tentando excluir procedimentos armazenados com nomes como '%backup%' ou %WI%'.

Aqui está a consulta total que usei ..

;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' and ( object_name(object_id) NOT LIKE '%BACKUP%' 
  or object_name(object_id) not like '%backup%'
  OR object_name(object_id) NOT LIKE '%Wi%')
)
SELECT * FROM CTE

Exemplo de saída da consulta acima:
report_spBIHRRecruitmentReport_Phase2_backup

Mas, estranhamente, a consulta acima está retornando resultados que ainda têm nomes
como
1.backup
2.Wi

Então eu tentei usar o agrupamento para restringir resultados como resultados.

;WITH CTE
AS
(select object_name(object_id) as procname
from sys.sql_modules
where definition LIKE '%CTLEMPLOYEE%' collate SQL_Latin1_General_CP1_CI_AS
 and ( object_name(object_id) NOT LIKE '%BACKUP%' 
  or object_name(object_id) not like '%backup%' 
  OR object_name(object_id) NOT LIKE '%Wi%' collate SQL_Latin1_General_CP1_CI_AS
)) 
SELECT * FROM CTE

A saída ainda contém nomes como abaixo:

report_spBIHRRecruitmentReport_Phase2_backup

Abaixo estão as informações do meu banco de dados:
Versão:SQL Server 2012
Collation:SQL_Latin1_General_CP1_CI_AS
nível de compatibilidade: 90

PERGUNTE:
Você pode me ajudar a entender por que ainda recebo nomes como '%backup% ou '%wi%'

Scripts para reproduzir:

create proc usp_test1_backup
as
begin
end


create proc usp_test2_wi
as
begin
end

drop proc usp_test1_backup
drop proc usp_test2_wi

Plano de execução da minha consulta se te ajudar:

http://pastebin.com/aKBqkPzj

Por favor, deixe-me saber se você precisar de mais informações

sql-server t-sql
  • 1 respostas
  • 173 Views
Martin Hope
TheGameiswar
Asked: 2016-04-03 06:00:41 +0800 CST

Definir E/S de estatísticas para loops aninhados

  • 8

Considere a consulta abaixo:

CREATE PROC dbo.GetPage  @orderid  AS INT    = 0, -- anchor sort key
            @pagesize AS BIGINT = 25
 AS
SELECT
TOP (@pagesize) orderid, orderdate, custid, empid
 FROM dbo.Orders WHERE orderid > @orderid ORDER BY orderid;

exec GetPage 25,25

SET STATISTICS IO para a consulta acima retornou:

(25 row(s) affected)
Table 'Orders'. Scan count 1, logical reads 87, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

A explicação de Itzik Ben-Gan em seu livro é assim para as leituras acima:

Os custos de I/O envolvidos na execução do plano de consulta são os seguintes:

  • Procure a folha do índice: 3 leituras (o índice tem três níveis).
  • Varredura de intervalo de 25 linhas: 0–1 leituras (centenas de linhas cabem em uma página).
  • Pré-busca de loops aninhados usada para otimizar pesquisas: 9 leituras (medidas pela desativação da pré-busca com sinalizador de rastreamento 8744)
  • 25 pesquisas principais: 75 leituras

plano de consulta

Plano de execução

Agora, minha pergunta é: como os loops aninhados fazem uma pesquisa de chave uma vez para cada linha retornada da busca, as leituras de busca devem ser 25 * 3: 75, o mesmo que as pesquisas de chave?

Plano de consulta XML

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.4" Build="13.0.900.73" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
  <BatchSequence>
    <Batch>
      <Statements>
        <StmtSimple StatementCompId="3" StatementEstRows="25" StatementId="1" StatementOptmLevel="FULL" StatementOptmEarlyAbortReason="GoodEnoughPlanFound" CardinalityEstimationModelVersion="130" StatementSubTreeCost="0.0887816" StatementText=" CREATE PROC dbo.GetPage  @orderid  AS INT    = 0, -- anchor sort key &#xD;&#xA;  @pagesize AS BIGINT = 25 &#xD;&#xA;  AS&#xD;&#xA;SELECT TOP (@pagesize) orderid, orderdate, custid, empid FROM dbo.Orders WHERE orderid &gt; @orderid ORDER BY orderid" StatementType="SELECT" QueryHash="0x48DC1D1D4649B914" QueryPlanHash="0x8FDC055F05E0E93C" RetrievedFromCache="true" SecurityPolicyApplied="false">
          <StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
          <QueryPlan CachedPlanSize="32" CompileTime="2" CompileCPU="2" CompileMemory="208">
            <MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
            <OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="52428" EstimatedPagesCached="13107" EstimatedAvailableDegreeOfParallelism="2" />
            <RelOp AvgRowSize="29" EstimateCPU="2.5E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="25" LogicalOp="Top" NodeId="0" Parallel="false" PhysicalOp="Top" EstimatedTotalSubtreeCost="0.0887816">
              <OutputList>
                <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderid" />
                <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="custid" />
                <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="empid" />
                <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
              </OutputList>
              <Top RowCount="false" IsPercent="false" WithTies="false">
                <TopExpression>
                  <ScalarOperator ScalarString="[@pagesize]">
                    <Identifier>
                      <ColumnReference Column="@pagesize" />
                    </Identifier>
                  </ScalarOperator>
                </TopExpression>
                <RelOp AvgRowSize="29" EstimateCPU="4.1799" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="25" LogicalOp="Inner Join" NodeId="1" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0887791">
                  <OutputList>
                    <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderid" />
                    <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="custid" />
                    <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="empid" />
                    <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                  </OutputList>
                  <NestedLoops Optimized="false" WithOrderedPrefetch="true">
                    <OuterReferences>
                      <ColumnReference Column="Uniq1001" />
                      <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                      <ColumnReference Column="Expr1003" />
                    </OuterReferences>
                    <RelOp AvgRowSize="18" EstimateCPU="1.10013" EstimateIO="1.92683" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="25" LogicalOp="Index Seek" NodeId="3" Parallel="false" PhysicalOp="Index Seek" EstimatedTotalSubtreeCost="0.00335567" TableCardinality="1000000">
                      <OutputList>
                        <ColumnReference Column="Uniq1001" />
                        <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderid" />
                        <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                      </OutputList>
                      <IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Column="Uniq1001" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderid" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                          </DefinedValue>
                        </DefinedValues>
                        <Object Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Index="[PK_Orders]" IndexKind="NonClustered" Storage="RowStore" />
                        <SeekPredicates>
                          <SeekPredicateNew>
                            <SeekKeys>
                              <StartRange ScanType="GT">
                                <RangeColumns>
                                  <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderid" />
                                </RangeColumns>
                                <RangeExpressions>
                                  <ScalarOperator ScalarString="[@orderid]">
                                    <Identifier>
                                      <ColumnReference Column="@orderid" />
                                    </Identifier>
                                  </ScalarOperator>
                                </RangeExpressions>
                              </StartRange>
                            </SeekKeys>
                          </SeekPredicateNew>
                        </SeekPredicates>
                      </IndexScan>
                    </RelOp>
                    <RelOp AvgRowSize="22" EstimateCPU="0.0001581" EstimateIO="0.003125" EstimateRebinds="25" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Clustered Index Seek" NodeId="5" Parallel="false" PhysicalOp="Clustered Index Seek" EstimatedTotalSubtreeCost="0.0853189" TableCardinality="1000000">
                      <OutputList>
                        <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="custid" />
                        <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="empid" />
                      </OutputList>
                      <IndexScan Lookup="true" Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="custid" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="empid" />
                          </DefinedValue>
                        </DefinedValues>
                        <Object Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Index="[idx_cl_od]" TableReferenceId="-1" IndexKind="Clustered" Storage="RowStore" />
                        <SeekPredicates>
                          <SeekPredicateNew>
                            <SeekKeys>
                              <Prefix ScanType="EQ">
                                <RangeColumns>
                                  <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                                  <ColumnReference Column="Uniq1001" />
                                </RangeColumns>
                                <RangeExpressions>
                                  <ScalarOperator ScalarString="[PerformanceV3].[dbo].[Orders].[orderdate]">
                                    <Identifier>
                                      <ColumnReference Database="[PerformanceV3]" Schema="[dbo]" Table="[Orders]" Column="orderdate" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator ScalarString="[Uniq1001]">
                                    <Identifier>
                                      <ColumnReference Column="Uniq1001" />
                                    </Identifier>
                                  </ScalarOperator>
                                </RangeExpressions>
                              </Prefix>
                            </SeekKeys>
                          </SeekPredicateNew>
                        </SeekPredicates>
                      </IndexScan>
                    </RelOp>
                  </NestedLoops>
                </RelOp>
              </Top>
            </RelOp>
            <ParameterList>
              <ColumnReference Column="@pagesize" ParameterCompiledValue="(25)" />
              <ColumnReference Column="@orderid" ParameterCompiledValue="(25)" />
            </ParameterList>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>
sql-server execution-plan
  • 1 respostas
  • 1097 Views
Martin Hope
TheGameiswar
Asked: 2016-02-08 09:51:15 +0800 CST

Tendo dificuldade em entender as expressões no plano de consulta abaixo

  • 3

Eu estava passando por novos recursos de tabelas temporais no SQL 2016, um dos exemplos foi consultar tabelas com a cláusula as of

que retornou abaixo do plano de consulta

Rows    Executes    StmtText    StmtId  NodeId  Parent  PhysicalOp  LogicalOp   Argument    DefinedValues   EstimateRows    EstimateIO  EstimateCPU AvgRowSize  TotalSubtreeCost    OutputList  Warnings    Type    Parallel    EstimateExecutions
1   1   select * from   Employee  for system_time  as of '2016-02-07 15:39:02.10'   1   1   0   NULL    NULL    NULL    NULL    2   NULL    NULL    NULL    0.0065729   NULL    NULL    SELECT  0   NULL
1   1     |--Concatenation  1   2   1   Concatenation   Concatenation   NULL    [Union1005] = ([sql2016].[dbo].[Employee].[EmployeeID], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[EmployeeID]), [Union1006] = ([sql2016].[dbo].[Employee].[Name], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Name]), [Union1007] = ([sql2016].[dbo].[Employee].[Position], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Position]), [Union1008] = ([sql2016].[dbo].[Employee].[Department], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Department]), [Union1009] = ([sql2016].[dbo].[Employee].[Address], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Address]), [Union1010] = ([sql2016].[dbo].[Employee].[AnnualSalary], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[AnnualSalary]), [Union1011] = ([sql2016].[dbo].[Employee].[ValidFrom], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom]), [Union1012] = ([sql2016].[dbo].[Employee].[ValidTo], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo])    2   0   2E-07   1266    0.0065729   [Union1005], [Union1006], [Union1007], [Union1008], [Union1009], [Union1010], [Union1011], [Union1012]  NULL    PLAN_ROW    0   1
0   1          |--Clustered Index Scan(OBJECT:([sql2016].[dbo].[Employee].[PK__Employee__7AD04FF1C19A16B5]), WHERE:([sql2016].[dbo].[Employee].[ValidFrom]<='2016-02-07 15:39:02.1000000' AND [sql2016].[dbo].[Employee].[ValidTo]>'2016-02-07 15:39:02.1000000'))  1   3   2   Clustered Index Scan    Clustered Index Scan    OBJECT:([sql2016].[dbo].[Employee].[PK__Employee__7AD04FF1C19A16B5]), WHERE:([sql2016].[dbo].[Employee].[ValidFrom]<='2016-02-07 15:39:02.1000000' AND [sql2016].[dbo].[Employee].[ValidTo]>'2016-02-07 15:39:02.1000000')  [sql2016].[dbo].[Employee].[EmployeeID], [sql2016].[dbo].[Employee].[Name], [sql2016].[dbo].[Employee].[Position], [sql2016].[dbo].[Employee].[Department], [sql2016].[dbo].[Employee].[Address], [sql2016].[dbo].[Employee].[AnnualSalary], [sql2016].[dbo].[Employee].[ValidFrom], [sql2016].[dbo].[Employee].[ValidTo]   1   0.003125    0.0001592   1266    0.0032842   [sql2016].[dbo].[Employee].[EmployeeID], [sql2016].[dbo].[Employee].[Name], [sql2016].[dbo].[Employee].[Position], [sql2016].[dbo].[Employee].[Department], [sql2016].[dbo].[Employee].[Address], [sql2016].[dbo].[Employee].[AnnualSalary], [sql2016].[dbo].[Employee].[ValidFrom], [sql2016].[dbo].[Employee].[ValidTo]   NULL    PLAN_ROW    0   1
1   1          |--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1014], [Expr1015], [Expr1013]))   1   4   2   Nested Loops    Inner Join  OUTER REFERENCES:([Expr1014], [Expr1015], [Expr1013])   NULL    1   0.003125    0.0001603   1266    0.0032853   [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[EmployeeID], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Name], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Position], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Department], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Address], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[AnnualSalary], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo]   NULL    PLAN_ROW    0   1
1   1               |--Compute Scalar(DEFINE:(([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))))  1   5   4   Compute Scalar  Compute Scalar  DEFINE:(([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))) ([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))  1   0   0   23  0   [Expr1014], [Expr1015], [Expr1013]  NULL    PLAN_ROW    0   1
1   1               |    |--Constant Scan   1   6   5   Constant Scan   Constant Scan   NULL    NULL    1   0   0   0   0   NULL    NULL    PLAN_ROW    0   1
1   1               |--Clustered Index Seek(OBJECT:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ix_MSSQL_TemporalHistoryFor_565577053]), SEEK:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo] > [Expr1014] AND [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo] < [Expr1015]),  WHERE:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom]<='2016-02-07 15:39:02.1000000') ORDERED FORWARD)    1   10  4   Clustered Index Seek    Clustered Index Seek    OBJECT:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ix_MSSQL_TemporalHistoryFor_565577053]), SEEK:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo] > [Expr1014] AND [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo] < [Expr1015]),  WHERE:([sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom]<='2016-02-07 15:39:02.1000000') ORDERED FORWARD [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[EmployeeID], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Name], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Position], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Department], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Address], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[AnnualSalary], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo]   1   0.003125    0.0001603   1266    0.0032853   [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[EmployeeID], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Name], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Position], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Department], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[Address], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[AnnualSalary], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom], [sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidTo]   NULL    PLAN_ROW    0   1

Aqui está minha consulta:

select * from 
Employee
for system_time
as of '2016-02-07 15:39:02.10'

Não consigo entender o que os valores abaixo contêm

1   1               |--Compute Scalar(DEFINE:(([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))))  1   5   4   Compute Scalar  Compute Scalar  DEFINE:(([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))) ([Expr1014],[Expr1015],[Expr1013])=GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))  1   0   0   23  0   [Expr1014], [Expr1015], [Expr1013]  NULL    PLAN_ROW    0   1

Vocês podem me ajudar a entender o que contém a expressão escalar, abaixo está todo o plano xml FYR

    PhysicalOp="Concatenation" EstimatedTotalSubtreeCost="0.0065729">
              <OutputList>
                <ColumnReference Column="Union1005" />
                <ColumnReference Column="Union1006" />
                <ColumnReference Column="Union1007" />
                <ColumnReference Column="Union1008" />
                <ColumnReference Column="Union1009" />
                <ColumnReference Column="Union1010" />
                <ColumnReference Column="Union1011" />
                <ColumnReference Column="Union1012" />
              </OutputList>
              <RunTimeInformation>
                <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
              </RunTimeInformation>
              <Concat>
                <DefinedValues>
                  <DefinedValue>
                    <ColumnReference Column="Union1005" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="EmployeeID" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="EmployeeID" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1006" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Name" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Name" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1007" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Position" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Position" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1008" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Department" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Department" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1009" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Address" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Address" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1010" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="AnnualSalary" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="AnnualSalary" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1011" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidFrom" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidFrom" />
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Union1012" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidTo" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                  </DefinedValue>
                </DefinedValues>
                <RelOp AvgRowSize="1266" EstimateCPU="0.0001592" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Clustered Index Scan" NodeId="1" Parallel="false" PhysicalOp="Clustered Index Scan" EstimatedTotalSubtreeCost="0.0032842" TableCardinality="2">
                  <OutputList>
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="EmployeeID" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Name" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Position" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Department" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Address" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="AnnualSalary" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidFrom" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidTo" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="0" ActualRowsRead="2" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
                  </RunTimeInformation>
                  <IndexScan Ordered="false" ForcedIndex="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="EmployeeID" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Name" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Position" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Department" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="Address" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="AnnualSalary" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidFrom" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidTo" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Index="[PK__Employee__7AD04FF1C19A16B5]" IndexKind="Clustered" Storage="RowStore" />
                    <Predicate>
                      <ScalarOperator ScalarString="[sql2016].[dbo].[Employee].[ValidFrom]&lt;='2016-02-07 15:39:02.1000000' AND [sql2016].[dbo].[Employee].[ValidTo]&gt;'2016-02-07 15:39:02.1000000'">
                        <Logical Operation="AND">
                          <ScalarOperator>
                            <Compare CompareOp="LE">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidFrom" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Const ConstValue="'2016-02-07 15:39:02.1000000'" />
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                          <ScalarOperator>
                            <Compare CompareOp="GT">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[Employee]" Column="ValidTo" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Const ConstValue="'2016-02-07 15:39:02.1000000'" />
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                        </Logical>
                      </ScalarOperator>
                    </Predicate>
                  </IndexScan>
                </RelOp>
                <RelOp AvgRowSize="1266" EstimateCPU="0.0001603" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Inner Join" NodeId="2" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="0.0032853" TableCardinality="3">
                  <OutputList>
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="EmployeeID" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Name" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Position" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Department" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Address" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="AnnualSalary" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidFrom" />
                    <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                  </OutputList>
                  <RunTimeInformation>
                    <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
                  </RunTimeInformation>
                  <NestedLoops Optimized="false">
                    <OuterReferences>
                      <ColumnReference Column="Expr1014" />
                      <ColumnReference Column="Expr1015" />
                      <ColumnReference Column="Expr1013" />
                    </OuterReferences>
                    <RelOp AvgRowSize="23" EstimateCPU="0" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Compute Scalar" NodeId="3" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="0">
                      <OutputList>
                        <ColumnReference Column="Expr1014" />
                        <ColumnReference Column="Expr1015" />
                        <ColumnReference Column="Expr1013" />
                      </OutputList>
                      <RunTimeInformation>
                        <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
                      </RunTimeInformation>
                      <ComputeScalar>
                        <DefinedValues>
                          <DefinedValue>
                            <ValueVector>
                              <ColumnReference Column="Expr1014" />
                              <ColumnReference Column="Expr1015" />
                              <ColumnReference Column="Expr1013" />
                            </ValueVector>
                            <ScalarOperator ScalarString="GetRangeWithMismatchedTypes('2016-02-07 15:39:02.1000000',NULL,(6))">
                              <Intrinsic FunctionName="GetRangeWithMismatchedTypes">
                                <ScalarOperator>
                                  <Const ConstValue="'2016-02-07 15:39:02.1000000'" />
                                </ScalarOperator>
                                <ScalarOperator>
                                  <Const ConstValue="NULL" />
                                </ScalarOperator>
                                <ScalarOperator>
                                  <Const ConstValue="(6)" />
                                </ScalarOperator>
                              </Intrinsic>
                            </ScalarOperator>
                          </DefinedValue>
                        </DefinedValues>
                        <RelOp AvgRowSize="0" EstimateCPU="0" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Constant Scan" NodeId="4" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="0">
                          <OutputList />
                          <RunTimeInformation>
                            <RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
                          </RunTimeInformation>
                          <ConstantScan />
                        </RelOp>
                      </ComputeScalar>
                    </RelOp>
                    <RelOp AvgRowSize="1266" EstimateCPU="0.0001603" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Clustered Index Seek" NodeId="8" Parallel="false" PhysicalOp="Clustered Index Seek" EstimatedTotalSubtreeCost="0.0032853" TableCardinality="3">
                      <OutputList>
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="EmployeeID" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Name" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Position" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Department" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Address" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="AnnualSalary" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidFrom" />
                        <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                      </OutputList>
                      <RunTimeInformation>
                        <RunTimeCountersPerThread Thread="0" ActualRows="1" ActualRowsRead="3" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" />
                      </RunTimeInformation>
                      <IndexScan Ordered="true" ScanDirection="FORWARD" ForcedIndex="false" ForceSeek="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
                        <DefinedValues>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="EmployeeID" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Name" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Position" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Department" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="Address" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="AnnualSalary" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidFrom" />
                          </DefinedValue>
                          <DefinedValue>
                            <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                          </DefinedValue>
                        </DefinedValues>
                        <Object Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Index="[ix_MSSQL_TemporalHistoryFor_565577053]" IndexKind="Clustered" Storage="RowStore" />
                        <SeekPredicates>
                          <SeekPredicateNew>
                            <SeekKeys>
                              <StartRange ScanType="GT">
                                <RangeColumns>
                                  <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                                </RangeColumns>
                                <RangeExpressions>
                                  <ScalarOperator ScalarString="[Expr1014]">
                                    <Identifier>
                                      <ColumnReference Column="Expr1014" />
                                    </Identifier>
                                  </ScalarOperator>
                                </RangeExpressions>
                              </StartRange>
                              <EndRange ScanType="LT">
                                <RangeColumns>
                                  <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidTo" />
                                </RangeColumns>
                                <RangeExpressions>
                                  <ScalarOperator ScalarString="[Expr1015]">
                                    <Identifier>
                                      <ColumnReference Column="Expr1015" />
                                    </Identifier>
                                  </ScalarOperator>
                                </RangeExpressions>
                              </EndRange>
                            </SeekKeys>
                          </SeekPredicateNew>
                        </SeekPredicates>
                        <Predicate>
                          <ScalarOperator ScalarString="[sql2016].[dbo].[MSSQL_TemporalHistoryFor_565577053].[ValidFrom]&lt;='2016-02-07 15:39:02.1000000'">
                            <Compare CompareOp="LE">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Database="[sql2016]" Schema="[dbo]" Table="[MSSQL_TemporalHistoryFor_565577053]" Column="ValidFrom" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Const ConstValue="'2016-02-07 15:39:02.1000000'" />
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                        </Predicate>
                      </IndexScan>
                    </RelOp>
                  </NestedLoops>
                </RelOp>
              </Concat>
            </RelOp>
          </QueryPlan>
        </StmtSimple>
      </Statements>
    </Batch>
  </BatchSequence>
</ShowPlanXML>
sql-server execution-plan
  • 1 respostas
  • 688 Views
Martin Hope
TheGameiswar
Asked: 2015-09-09 04:03:08 +0800 CST

Status do encadeamento do SQL Server

  • 6

Nosso SQL está configurado para usar no máximo 704 threads, algumas vezes recebemos alertas informando que restam apenas 10 threads, então não consigo entender se o SQL mantém o thread aberto, pois criar um novo thread é caro.

então minha pergunta é

  1. Como saber se um thread está disponível para uma nova solicitação ou atualmente ocupado com outras solicitações.

  2. Estou tentando vincular task_addresssys.dm_exec_requests com sys.dm_os_tasks e worker_addresscomo abaixo

    select * from sys.dm_exec_requests ec
    join
    sys.dm_os_tasks tsk
    on tsk.task_state=ec.task_address
    join
    sys.dm_os_workers wrk
    on wrk.worker_address=tsk.worker_address
    

Não vejo nenhuma saída, isso significa que posso assumir que todos os tópicos estão livres

  1. Atualmente, abaixo está o estado dos meus threads de trabalho, o que isso significa suspenso?. Pude ver a contagem de mais de 500 com status suspenso.

insira a descrição da imagem aqui

4. Posso usar a consulta abaixo para descobrir que tenho inanição de thread de trabalho

select status from sys.dm_Exec_requests

se o status estiver pendente, posso assumir que o SQL está aguardando novos threads de trabalho

  1. Atualmente, vejo uma sessão com mais de 250 linhas em sysprocesses, quando consulto, sys.dm_os_Waiting_tasksvejo mais de 2186 linhas e 90% delas são para a mesma sessão. Portanto, minha pergunta aqui é como uma consulta pode abranger esses muitos segmentos

insira a descrição da imagem aqui

  1. Vou obter a contagem de trabalhadores disponíveis usando a consulta abaixo, isso está correto?

    select (
            select max_workers_count
            from sys.dm_os_sys_info
            ) - (
            select sum(active_workers_count)
            from sys.dm_os_Schedulers
            )
    
sql-server
  • 2 respostas
  • 17212 Views
Martin Hope
TheGameiswar
Asked: 2015-08-18 13:54:24 +0800 CST

Como responder por que de repente precisamos de índices ou a consulta precisa ser alterada

  • 11

Sou DBA júnior com 3 anos de experiência. Nosso trabalho é ajustar as consultas ou aconselhar os desenvolvedores que determinado código deve ser reescrito ou índices são necessários.

Uma pergunta simples que a equipe de desenvolvimento faz com frequência é: "Ontem funcionou bem, o que mudou de repente?" e seremos solicitados a verificar o lado da infraestrutura. A primeira reação em qualquer problema sempre parece ser colocar a culpa máxima na infraestrutura, que é sempre a primeira coisa a ser validada.

Como devemos responder às perguntas "o que mudou" feitas pela equipe de desenvolvimento? Vocês já enfrentaram a mesma situação? Em caso afirmativo, por favor, compartilhe sua experiência.

sql-server performance
  • 3 respostas
  • 899 Views
Martin Hope
TheGameiswar
Asked: 2015-05-26 18:18:30 +0800 CST

Fragmentação do índice ? é inevitável

  • 2

Esta é a pergunta de acompanhamento para @martin smith excelente resposta https://stackoverflow.com/questions/1251636/what-do-clustered-and-non-clustered-index-actually-mean

Depois disso, assisti ao vídeo MCM de Paul randal, que mostra por que a fragmentação do índice é mais importante em varreduras grandes apenas para tabelas enormes. ..

Suponha que eu tenha uma grande tabela e identidade como chave agrupada e nenhuma atualização para a chave agrupada e todas as páginas estejam em ordem lógica, o Sql garante que todas essas páginas estejam no disco próximas... durante as primeiras inserções, pode bloquear algum espaço para esta tabela , mas depois disso muitas inserções podem acontecer em outras tabelas também, então os dados podem não estar próximos... Meu entendimento está correto?

sql-server index
  • 1 respostas
  • 81 Views
Martin Hope
TheGameiswar
Asked: 2015-04-10 00:12:52 +0800 CST

Entendimento abaixo do plano de execução

  • 5

Eu tenho duas tabelas tb1 e tb2, tb1 não possui nenhum índice nela. Preenchi tb1 com 1.000.000 linhas e tb2 tem 500 linhas e com um índice clusterizado na coluna ID.

Para entender a junção de loop aninhado, usei a consulta abaixo:

SELECT * 
FROM tb1
INNER JOIN tb2 ON tb1.id=tb2.id 
OPTION(loop join);

Eu tenho abaixo do plano de execução para isso:

insira a descrição da imagem aqui

O Tb1 que não possui índice é digitalizado e o custo é de 2%, enquanto o índice está sendo usado no tb2 e o custo é de 98%.

insira a descrição da imagem aqui

Minha pergunta é:

  1. Como entender o custo estimado do operador mostrado para o recorte acima (138.236)

insira a descrição da imagem aqui

  1. Do recorte acima da varredura da tabela (cujo custo é de 2%), o número de execuções é 24, isso significa que o sql lê linhas em lotes armazenados na memória e, para cada linha, faz uma operação de busca de tbl2?

Alguém pode me explicar o plano de execução e também quaisquer ponteiros para saber mais sobre varredura de força, índice de força quando pressionei F4 depois de clicar em um operador.

sql-server execution-plan
  • 1 respostas
  • 750 Views
Martin Hope
TheGameiswar
Asked: 2015-03-08 08:57:47 +0800 CST

Ler registros de log de transações

  • 1

Estou lendo o artigo de Remus Rusanu no tlog. Nesse artigo, ele demonstrou como ler a carga útil do log usando a opção de página dbcc. Captura de tela do PFB para obter mais detalhes.insira a descrição da imagem aqui

t-sql transaction-log
  • 1 respostas
  • 2156 Views
Martin Hope
TheGameiswar
Asked: 2014-12-30 20:30:27 +0800 CST

Crescimento do log de reconstrução do índice

  • 2

Quanto a reconstrução do índice de log irá gerar. Lembrei-me de que a leitura do índice de reconstrução deve gerar a mesma quantidade de arquivo de log que o tamanho da tabela. Mas meus testes estão mostrando o contrário. Precisamos dessa estimativa, pois estamos tentando criar índices de banco de dados do Azure e tem uma limitação de máx. 2 GB.

Meu banco de dados está em modelo de recuperação total.

Tamanho da mesa:

insira a descrição da imagem aqui

tamanho do registro:

insira a descrição da imagem aqui

pelas fotos, você pode ver que a geração de log foi muito menor com a operação de reconstrução de índice online. Alguém pode me corrigir se estiver faltando alguma coisa

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