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

George.Palacios's questions

Martin Hope
George.Palacios
Asked: 2019-10-31 03:49:58 +0800 CST

Durante um backup de log, os dados são copiados para o início ou fim da operação?

  • 19

Digamos que eu esteja executando um backup de log e esse backup de log leve 10 minutos para ser concluído. Durante essa janela de 10 minutos, outras transações são executadas. Dado o exemplo abaixo, quais transações o backup de log realmente contém?

  1. A transação A confirma
  2. A transação B é aberta
  3. O backup de log começa
  4. A transação C é aberta
  5. Confirmações da transação B
  6. Backup de log concluído
  7. Confirmações da transação C
sql-server sql-server-2012
  • 2 respostas
  • 2013 Views
Martin Hope
George.Palacios
Asked: 2019-10-11 08:28:20 +0800 CST

Como verificar se um gatilho é acionado em instruções INSERT, UPDATE ou DELETE?

  • 11

Como determino se um gatilho está direcionando as instruções INSERT, UPDATE ou DELETE?

Fiz o check-in sys.triggerse não consigo ver nada relacionado a qual operação o gatilho é acionado.

sql-server trigger
  • 1 respostas
  • 1639 Views
Martin Hope
George.Palacios
Asked: 2019-07-06 04:30:55 +0800 CST

NOLOCK ou Read Uncommitted lock/latching comportamentos

  • 5

Eu li muitas, muitas tomadas diferentes sobre como o NOLOCK ou os níveis de isolamento não confirmados de leitura funcionam em termos de travas / travas tomadas.

Ao usar um SELECT com NOLOCK ou no nível Read Uncommitted Isolation, o único bloqueio é retirado um Schema Stability Lock ou os bloqueios compartilhados são obtidos continuamente à medida que a consulta funciona nas linhas? (Obviamente, esses bloqueios precisariam ser descartados imediatamente)

E as travas? Como as páginas na memória são tratadas, pois suponho que fazer referência a um objeto na memória que está no meio de ser modificado não é permitido?

sql-server locking
  • 1 respostas
  • 268 Views
Martin Hope
George.Palacios
Asked: 2019-06-28 08:14:19 +0800 CST

ALTER TABLE ... DROP COLUMN é realmente uma operação apenas de metadados?

  • 13

Eu encontrei várias fontes que indicam ALTER TABLE ... DROP COLUMN é uma operação apenas de metadados.

Fonte

Como isso pode ser? Os dados durante uma DROP COLUMN não precisam ser removidos dos índices não clusterizados subjacentes e do índice/heap clusterizado?

Além disso, por que o Microsoft Docs sugere que é uma operação totalmente registrada?

As modificações feitas na tabela são registradas e totalmente recuperáveis. As alterações que afetam todas as linhas em tabelas grandes, como descartar uma coluna ou, em algumas edições do SQL Server, adicionar uma coluna NOT NULL com um valor padrão, podem levar muito tempo para serem concluídas e gerar muitos registros de log . Execute essas instruções ALTER TABLE com o mesmo cuidado que qualquer instrução INSERT, UPDATE ou DELETE que afete muitas linhas.

Como uma pergunta secundária: como o mecanismo acompanha as colunas descartadas se os dados não forem removidos das páginas subjacentes?

sql-server transaction-log
  • 1 respostas
  • 2554 Views
Martin Hope
George.Palacios
Asked: 2019-05-04 05:38:33 +0800 CST

Devo criar dois endpoints para dois grupos de disponibilidade na mesma instância do SQL?

  • 5

Tenho um cluster de dois nós executando o SQL Server 2012. Desejo criar dois grupos de disponibilidade na mesma instância do SQL Server.

Devo adicionar um endpoint para cada AG ou devo permitir que ambos os AGs usem o mesmo endpoint?

Eu li a documentação aqui , mas a única parte referente a vários endpoints está relacionada a várias instâncias do SQL

Observe que, se mais de uma instância de servidor em um determinado computador exigir um endpoint de espelhamento de banco de dados, especifique um número de porta diferente para cada endpoint.

sql-server sql-server-2012
  • 1 respostas
  • 1586 Views
Martin Hope
George.Palacios
Asked: 2019-04-30 04:46:36 +0800 CST

Eliminando as contas NT AUTHORITY e NT SERVICE criadas automaticamente

  • 10

Então, recentemente, movi trabalhos - um pedaço de código que encontrei em nossos scripts de compilação para novas instalações do SQL Server está abaixo.

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT AUTHORITY\SYSTEM' )
    BEGIN
        DROP LOGIN [NT AUTHORITY\SYSTEM];
    END

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT SERVICE\SQLWriter' )
    BEGIN
        DROP LOGIN [NT SERVICE\SQLWriter];
    END

IF EXISTS ( SELECT  *
            FROM    [sys].[syslogins]
            WHERE   [name] = N'NT SERVICE\Winmgmt' )
    BEGIN
        DROP LOGIN [NT SERVICE\Winmgmt];
    END
GO

Essas contas são criadas durante o processo de instalação do SQL Server por padrão.

A eliminação dos logins acima é recomendada? Existem efeitos colaterais que isso pode causar? Para que servem esses logins?

Eu li Posso excluir logins NT SERVICE\SQLWriter e NT SERVICE\Winmgmt? mas não é concreto o suficiente - posso ver para que eles são necessários, mas muito pouco mais. Eles precisam de acesso sysadmin? etc.

Como exemplo (retirado de Configure Windows Service Accounts and Permissions ):

O sistema local é uma conta interna com privilégios muito altos. Possui amplos privilégios no sistema local e atua como o computador na rede. O nome real da conta é NT AUTHORITY\SYSTEM.

Como devo ler isso? Deveria ser deixado com esses privilégios "altos"?

sql-server sql-server-2016
  • 1 respostas
  • 1337 Views
Martin Hope
George.Palacios
Asked: 2018-10-02 03:52:47 +0800 CST

Prática recomendada para atualizações de bancos de dados de não produção e TDE

  • 5

Digamos que tenhamos um sistema de produção com vários bancos de dados criptografados usando TDE e um certificado autogerado.

Precisamos regularmente pegar esse banco de dados e atualizar nossos sistemas de não produção. Esse processo envolve fazer backup do banco de dados de origem, restaurá-lo para pré-produção, ofuscar dados pessoais e vários outros itens.

O fato chave aqui é que o sistema de pré-produção tem uma cópia do certificado de criptografia da produção

Estou procurando maneiras de tornar esse processo mais seguro - não estou satisfeito com o certificado no ambiente de pré-produção. Existe outra maneira que irá:

  1. Nunca tenha um backup não criptografado salvo em qualquer lugar
  2. Não permitir a propagação de dados pessoais da produção para sistemas de não produção?
sql-server sql-server-2014
  • 2 respostas
  • 1386 Views
Martin Hope
George.Palacios
Asked: 2018-08-22 00:04:22 +0800 CST

Estimativa de linha incorreta seguindo o operador Compute Scalar no plano

  • 5

Estou lutando para entender de onde vem uma estimativa de linha em um plano de execução.

Cole o link do plano

declare
@BatchKey INT = 1, @ParentBatchKey INT = 1,
@QuoteRef varchar(50) = 'Q00018249',
@MpanRef varchar(50) = '1425431100004'


SELECT DISTINCT
        ISNULL(c.ContractReference,-1) AS [ContractReference] ,
        ISNULL(d_cd.ContractDetailsKey,-1) AS [ContractDetailsKey] ,
        -1 AccountManagerKey,
        -1 SegmentationKey,
        ISNULL(d_tpi.TpiKey,-1) AS [TpiKey] ,
        ISNULL(d_cu.CustomerKey,-1) AS [CustomerKey] ,
        ISNULL(d_p.ProductKey,-1) AS [ProductKey] ,
        -1 as PayPointKey,
        -1 AS [GspBandingKey], --Not used in Junifer ESOB
        ISNULL(d_pps.[ProductPricingStructureKey],-1) AS [ProductPricingStructureKey],
        ISNULL(d_tou.TouBandingKey,-1) AS [PricingStructureBandingKey],
        -1 AS [VolumePointCategoryKey],
        ISNULL(d_ppc.PowerPeriodCategoryKey,-1) AS [PowerPeriodCategoryKey],
        ISNULL(d_pcat.[PriceComponentAggregationTypeKey],-1) AS [PriceComponentAggregationTypeKey],
        -1 AS [MarginRateBandingKey], --Not used in Junifer ESOB
        -1 AS [DuosUrcBandingKey], --Not used in Junifer ESOB
        -1 AS [ConsumptionToleranceKey],
        ISNULL(d_mp.MeterPointKey,-1) AS [MeterPointKey] ,
        ISNULL(d.DateKey,-1) AS [ForecastDateKey] ,
        -1 AS [ForecastEFADateKey], 
        ISNULL(d_cw.DateKey,-1) AS [ContractWonDateKey] ,
        ISNULL(f.SiteVolumeKwh,0) AS [SiteVolume] ,
        ISNULL(f.GspVolumeKwh,0) AS [GspVolume] ,
        ISNULL(f.NbpVolumeKwh,0) AS [NbpVolume],
        @BatchKey,
        @ParentBatchKey,
        CAST(f.ForecastKey as NVARCHAR(100)) AS [SourceId]
FROM 
        [Electricity].[Forecast] f 
              INNER JOIN Electricity.ContractMeterPoint cmp ON cmp.MeterPointKey = f.MeterPointKey and cmp.ContractKey = f.ContractKey  
              INNER JOIN Electricity.Contract c on c.ContractKey = cmp.ContractKey 
        INNER JOIN Electricity.MeterPoint mp ON mp.MeterPointKey = cmp.MeterPointKey

        --INNER JOIN Electricity.ContractMeterPoint cmp ON cmp.MeterPointKey = mp.MeterPointKey and cmp.ContractKey = c.ContractKey 
        INNER JOIN Electricity.ProductBundle pb ON c.ProductBundleKey = pb.ProductBundleKey
        LEFT JOIN Electricity.Quote q ON c.QuoteKey = q.QuoteKey
        LEFT JOIN Gdf.Tender t ON q.TenderKey = t.TenderKey
        LEFT JOIN Gdf.Customer cu ON q.CustomerKey = cu.CustomerKey
        LEFT JOIN Electricity.ProductBundleAggregationType pbat ON pbat.ProductName = pb.BundleName
        LEFT JOIN Dimensional_DW.DimensionElectricity.Product d_p ON d_p.ProductDurableKey = pb.ProductBundleKey
        LEFT JOIN Dimensional_DW.Dimension.Tpi d_tpi ON d_tpi.TpiDurableKey = c.TpiKey
        LEFT JOIN Dimensional_DW.DimensionElectricity.ProductPricingStructure d_pps ON d_pps.ProductPricingStructureDurableKey = f.PriceStructureKey
        LEFT JOIN Dimensional_DW.DimensionElectricity.TouBanding d_tou ON d_tou.TouBandingDurableKey = f.PriceRateKey
        LEFT JOIN Dimensional_DW.DimensionElectricity.MeterPoint d_mp ON d_mp.MeterPointDurableKey = cmp.MeterPointKey
        LEFT JOIN Dimensional_DW.DimensionElectricity.PriceComponentAggregationType d_pcat ON d_pcat.[TnuosAggregationType] =pbat.[TNUoSAggType] AND d_pcat.[DuosAggregationType] =pbat.[DUoSFixedAvailAggType] AND d_pcat.[DuosUrcAggregationType] =pbat.[DUoSURCAggType] AND d_pcat.[BsuosAggregationType] =pbat.[BSUoSAggType] AND d_pcat.[ROAggregationType] =pbat.[ROAggType]
        LEFT JOIN Dimensional_DW.Dimension.Date AS d ON d.DateKey = CAST(CONVERT(NVARCHAR(8), f.DeliveryDate, 112) AS INT) 
        LEFT JOIN Dimensional_DW.Dimension.Date AS d_cw ON d_cw.DateKey = CAST(CONVERT(NVARCHAR(8), c.QuoteWonDate, 112) AS INT) 
        LEFT JOIN Dimensional_DW.DimensionElectricity.PowerPeriodCategory d_ppc ON d_ppc.HhPeriod = f.Period
        LEFT JOIN Dimensional_DW.Dimension.Customer d_cu ON d_cu.CustomerDurableKey = cu.CustomerKey
        LEFT JOIN Dimensional_DW.DimensionElectricity.ContractDetails d_cd ON d_cd.ContractDetailsDurableKey = c.ContractKey

WHERE  1=1
   and     c.ContractReference = @QuoteRef
   and c.QuoteWonDate IS NOT NULL 
   and c.QuoteKey <> -1
           --(SELECT distinct C.ContractKey FROM Electricity.Contract WHERE ContractReference = @QuoteRef and c.QuoteWonDate IS NOT NULL and c.QuoteKey <> -1)
                --(SELECT distinct C1.ContractKey FROM Electricity.Contract c1 WHERE c1.ContractReference = @QuoteRef and c1.QuoteWonDate IS NOT NULL and c1.QuoteKey <> -1)
        and mp.MpanID = @MpanRef
              --and c.ContractKey = 18235
              --and d.DateKey =  20180522
              order by [ForecastDateKey]

Meu problema é em torno do nodeId 26, o operador escalar:

insira a descrição da imagem aqui

Não tenho certeza de como a estimativa de linha de 5 está sendo gerada - isso parece cascatear o plano para a maioria dos outros operadores - as contagens de execução estimadas dos operadores de loop aninhado mais abaixo no plano parecem indicar ~ 5 estimado, então ~ 35k reais.

Por que o operador escalar seria alimentado com uma estimativa de ~14.000 linhas e, em seguida, estimaria uma saída de 5? Isso é um problema ou um arenque vermelho? Tem alguma coisa a ver com as conversões que está realizando? Eu posso entender isso afetando uma junção, mas por que isso afetaria a saída da conversão?

sql-server sql-server-2014
  • 1 respostas
  • 622 Views
Martin Hope
George.Palacios
Asked: 2018-02-28 03:37:24 +0800 CST

Conversão implícita causando erro em parte do tempo

  • 3

Estou coçando a cabeça sobre isso nos últimos dias - simplesmente não consigo ver por que um procedimento funciona em um ambiente, mas falha em outro devido a um erro de conversão (mesmos dados, mesmo código).

O plano para (uma versão fortemente reduzida) do servidor de trabalho está aqui: https://www.brentozar.com/pastetheplan/?id=B1jZWTfOf

(Isso não parece estar funcionando, então carreguei o XML do plano para pastebin aqui: https://pastebin.com/47Q6nniw )

Um pouco de plano de fundo para as colunas relevantes que estão causando o problema:

A tabela propertyInst contém uma coluna chamada ValueStr, que é um tipo de dados nvarchar. A tabela GeneralLedgerCode tem um id de coluna do tipo de dados int. Nossos desenvolvedores estão tentando unir as duas tabelas. A coluna ValueStr contém dados de texto, dados XML, dados int, dados decimais etc. Obviamente, decidimos adicionar uma função para garantir que apenas números inteiros sejam analisados ​​(ISNUMERIC(ValueStr) = 1). O que não percebemos é que isso também tentaria converter quaisquer valores decimais - isso está causando um erro de conversão na produção da natureza:

A conversão falhou ao converter o valor nvarchar '0.1' para o tipo de dados int.

Minha pergunta aqui é, dado que o Table Scan da tabela propertyInst estará pegando todos os valores numéricos, incluindo decimais, por que a conversão implícita no operador escalar não falha com o mesmo erro de conversão? A saída da consulta ISNUMERIC retorna alguns desses decimais. Não consigo ver como o plano em anexo está funcionando.

Um operador de conversão implícito nunca falha completamente e o erro de conversão é proveniente do teste residual no operador de correspondência de hash? Então, novamente, como o valor poderia chegar ao operador quando falharia na conversão implícita?

Como uma pequena ajuda, a imagem do plano está aqui, com o Compute Scalar sobre o qual estou perguntando circulado.

Plano

Além disso, posso ver que não há linhas reais registradas no operador escalar - isso significa que o mecanismo decidiu não usar esse operador específico em tempo de execução devido ao erro de conversão?

Plano2

Qualquer ajuda seria apreciada.

sql-server sql-server-2014
  • 1 respostas
  • 304 Views
Martin Hope
George.Palacios
Asked: 2017-05-11 01:06:42 +0800 CST

Ajuda na interpretação do plano de execução (Hash Aggregation)

  • 6

Então, tenho um plano de execução que estou tentando otimizar e há uma seção de um operador que não consigo entender.

Há uma seção do plano em que um Compute Scalar é usado, seguido por uma agregação usando uma correspondência de hash.

Eu tenho as perguntas:

Como posso usar as propriedades do agregador de correspondência de hash para me dizer quais colunas ele está gerando? Não consigo dizer em quais colunas a agregação está sendo executada.

Esta é a seção do plano: insira a descrição da imagem aqui

Estas são as propriedades do operador:

insira a descrição da imagem aqui

Planeje XML para o elemento:

<RelOp NodeId="489" PhysicalOp="Hash Match" LogicalOp="Aggregate" EstimateRows="25432.8" EstimateIO="0" EstimateCPU="621.202" AvgRowSize="1038" EstimatedTotalSubtreeCost="12113" Parallel="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row">
                  <OutputList>
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="id" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="description" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="unitPrice" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="units" />
                    <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="billCurrencyAmount" />
                    <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="Item" />
                    <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="InvoiceLineCategory" />
                    <ColumnReference Column="Expr1066" />
                    <ColumnReference Column="Expr1067" />
                    <ColumnReference Column="Expr1068" />
                    <ColumnReference Column="Expr1069" />
                    <ColumnReference Column="Expr1070" />
                    <ColumnReference Column="Expr1071" />
                    <ColumnReference Column="Expr1072" />
                    <ColumnReference Column="Expr1073" />
                    <ColumnReference Column="Expr1074" />
                    <ColumnReference Column="Expr1075" />
                    <ColumnReference Column="Expr1076" />
                    <ColumnReference Column="Expr1077" />
                    <ColumnReference Column="Expr1078" />
                    <ColumnReference Column="Expr1079" />
                  </OutputList>
                  <MemoryFractions Input="0.00395919" Output="0.379612" />
                  <Hash>
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="description" />
                        <ScalarOperator ScalarString="ANY([Staging].[Junifer].[BillBreakdownLine].[description] as [bbl].[description])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="description" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="unitPrice" />
                        <ScalarOperator ScalarString="ANY([Staging].[Junifer].[BillBreakdownLine].[unitPrice] as [bbl].[unitPrice])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="unitPrice" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="units" />
                        <ScalarOperator ScalarString="ANY([Staging].[Junifer].[BillBreakdownLine].[units] as [bbl].[units])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="units" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="billCurrencyAmount" />
                        <ScalarOperator ScalarString="ANY([Staging].[Junifer].[BillBreakdownLine].[billCurrencyAmount] as [bbl].[billCurrencyAmount])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="billCurrencyAmount" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Column="Expr1077" />
                        <ScalarOperator ScalarString="ANY([Expr1077])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Column="Expr1077" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Column="Expr1078" />
                        <ScalarOperator ScalarString="ANY([Expr1078])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Column="Expr1078" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Column="Expr1079" />
                        <ScalarOperator ScalarString="ANY([Expr1079])">
                          <Aggregate Distinct="0" AggType="ANY">
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Column="Expr1079" />
                              </Identifier>
                            </ScalarOperator>
                          </Aggregate>
                        </ScalarOperator>
                      </DefinedValue>
                    </DefinedValues>
                    <HashKeysBuild>
                      <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="id" />
                      <ColumnReference Column="Expr1066" />
                      <ColumnReference Column="Expr1067" />
                      <ColumnReference Column="Expr1068" />
                      <ColumnReference Column="Expr1069" />
                      <ColumnReference Column="Expr1070" />
                      <ColumnReference Column="Expr1071" />
                      <ColumnReference Column="Expr1072" />
                      <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="Item" />
                      <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="InvoiceLineCategory" />
                      <ColumnReference Column="Expr1073" />
                      <ColumnReference Column="Expr1074" />
                      <ColumnReference Column="Expr1075" />
                      <ColumnReference Column="Expr1076" />
                    </HashKeysBuild>
                    <BuildResidual>
                      <ScalarOperator ScalarString="[Staging].[Junifer].[BillBreakdownLine].[id] as [bbl].[id] = [Staging].[Junifer].[BillBreakdownLine].[id] as [bbl].[id] AND [Expr1066] = [Expr1066] AND [Expr1067] = [Expr1067] AND [Expr1068] = [Expr1068] AND [Expr1069] = [Expr1069] AND [Expr1070] = [Expr1070] AND [Expr1071] = [Expr1071] AND [Expr1072] = [Expr1072] AND #BillLineCategorisation.[Item] as [blc].[Item] = #BillLineCategorisation.[Item] as [blc].[Item] AND #BillLineCategorisation.[InvoiceLineCategory] as [blc].[InvoiceLineCategory] = #BillLineCategorisation.[InvoiceLineCategory] as [blc].[InvoiceLineCategory] AND [Expr1073] = [Expr1073] AND [Expr1074] = [Expr1074] AND [Expr1075] = [Expr1075] AND [Expr1076] = [Expr1076]">
                        <Logical Operation="AND">

                                  ...                                                                             <Logical Operation="AND">
                                                                          <ScalarOperator>
                                                                            <Compare CompareOp="IS">
                                                                              <ScalarOperator>
                                                                                <Identifier>
                                                                                  <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="id" />
                                                                                </Identifier>
                                                                              </ScalarOperator>
                                                                              <ScalarOperator>
                                                                                <Identifier>
                                                                                  <ColumnReference Database="[Staging]" Schema="[Junifer]" Table="[BillBreakdownLine]" Alias="[bbl]" Column="id" />
                                                                                </Identifier>
                                                                              </ScalarOperator>
                                                                            </Compare>
                                                                          </ScalarOperator>
                                                                          <ScalarOperator>
                                                                            <Compare CompareOp="IS">
                                                                              <ScalarOperator>
                                                                                <Identifier>
                                                                                  <ColumnReference Column="Expr1066" />
                                                                                </Identifier>
                                                                              </ScalarOperator>
                                                                              <ScalarOperator>
                                                                                <Identifier>
                                                                                  <ColumnReference Column="Expr1066" />
                                                                                </Identifier>
                                                                              </ScalarOperator>
                                                                            </Compare>
                                                                          </ScalarOperator>
                                                                        </Logical>
                                                                      </ScalarOperator>
                                                                      <ScalarOperator>
                                                                        <Compare CompareOp="IS">
                                                                          <ScalarOperator>
                                                                            <Identifier>
                                                                              <ColumnReference Column="Expr1067" />
                                                                            </Identifier>
                                                                          </ScalarOperator>
                                                                          <ScalarOperator>
                                                                            <Identifier>
                                                                              <ColumnReference Column="Expr1067" />
                                                                            </Identifier>
                                                                          </ScalarOperator>
                                                                        </Compare>
                                                                      </ScalarOperator>
                                                                    </Logical>
                                                                  </ScalarOperator>
                                                                  <ScalarOperator>
                                                                    <Compare CompareOp="IS">
                                                                      <ScalarOperator>
                                                                        <Identifier>
                                                                          <ColumnReference Column="Expr1068" />
                                                                        </Identifier>
                                                                      </ScalarOperator>
                                                                      <ScalarOperator>
                                                                        <Identifier>
                                                                          <ColumnReference Column="Expr1068" />
                                                                        </Identifier>
                                                                      </ScalarOperator>
                                                                    </Compare>
                                                                  </ScalarOperator>
                                                                </Logical>
                                                              </ScalarOperator>
                                                              <ScalarOperator>
                                                                <Compare CompareOp="IS">
                                                                  <ScalarOperator>
                                                                    <Identifier>
                                                                      <ColumnReference Column="Expr1069" />
                                                                    </Identifier>
                                                                  </ScalarOperator>
                                                                  <ScalarOperator>
                                                                    <Identifier>
                                                                      <ColumnReference Column="Expr1069" />
                                                                    </Identifier>
                                                                  </ScalarOperator>
                                                                </Compare>
                                                              </ScalarOperator>
                                                            </Logical>
                                                          </ScalarOperator>
                                                          <ScalarOperator>
                                                            <Compare CompareOp="IS">
                                                              <ScalarOperator>
                                                                <Identifier>
                                                                  <ColumnReference Column="Expr1070" />
                                                                </Identifier>
                                                              </ScalarOperator>
                                                              <ScalarOperator>
                                                                <Identifier>
                                                                  <ColumnReference Column="Expr1070" />
                                                                </Identifier>
                                                              </ScalarOperator>
                                                            </Compare>
                                                          </ScalarOperator>
                                                        </Logical>
                                                      </ScalarOperator>
                                                      <ScalarOperator>
                                                        <Compare CompareOp="IS">
                                                          <ScalarOperator>
                                                            <Identifier>
                                                              <ColumnReference Column="Expr1071" />
                                                            </Identifier>
                                                          </ScalarOperator>
                                                          <ScalarOperator>
                                                            <Identifier>
                                                              <ColumnReference Column="Expr1071" />
                                                            </Identifier>
                                                          </ScalarOperator>
                                                        </Compare>
                                                      </ScalarOperator>
                                                    </Logical>
                                                  </ScalarOperator>
                                                  <ScalarOperator>
                                                    <Compare CompareOp="IS">
                                                      <ScalarOperator>
                                                        <Identifier>
                                                          <ColumnReference Column="Expr1072" />
                                                        </Identifier>
                                                      </ScalarOperator>
                                                      <ScalarOperator>
                                                        <Identifier>
                                                          <ColumnReference Column="Expr1072" />
                                                        </Identifier>
                                                      </ScalarOperator>
                                                    </Compare>
                                                  </ScalarOperator>
                                                </Logical>
                                              </ScalarOperator>
                                              <ScalarOperator>
                                                <Compare CompareOp="IS">
                                                  <ScalarOperator>
                                                    <Identifier>
                                                      <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="Item" />
                                                    </Identifier>
                                                  </ScalarOperator>
                                                  <ScalarOperator>
                                                    <Identifier>
                                                      <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="Item" />
                                                    </Identifier>
                                                  </ScalarOperator>
                                                </Compare>
                                              </ScalarOperator>
                                            </Logical>
                                          </ScalarOperator>
                                          <ScalarOperator>
                                            <Compare CompareOp="IS">
                                              <ScalarOperator>
                                                <Identifier>
                                                  <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="InvoiceLineCategory" />
                                                </Identifier>
                                              </ScalarOperator>
                                              <ScalarOperator>
                                                <Identifier>
                                                  <ColumnReference Table="#BillLineCategorisation" Alias="[blc]" Column="InvoiceLineCategory" />
                                                </Identifier>
                                              </ScalarOperator>
                                            </Compare>
                                          </ScalarOperator>
                                        </Logical>
                                      </ScalarOperator>
                                      <ScalarOperator>
                                        <Compare CompareOp="IS">
                                          <ScalarOperator>
                                            <Identifier>
                                              <ColumnReference Column="Expr1073" />
                                            </Identifier>
                                          </ScalarOperator>
                                          <ScalarOperator>
                                            <Identifier>
                                              <ColumnReference Column="Expr1073" />
                                            </Identifier>
                                          </ScalarOperator>
                                        </Compare>
                                      </ScalarOperator>
                                    </Logical>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Compare CompareOp="IS">
                                      <ScalarOperator>
                                        <Identifier>
                                          <ColumnReference Column="Expr1074" />
                                        </Identifier>
                                      </ScalarOperator>
                                      <ScalarOperator>
                                        <Identifier>
                                          <ColumnReference Column="Expr1074" />
                                        </Identifier>
                                      </ScalarOperator>
                                    </Compare>
                                  </ScalarOperator>
                                </Logical>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Compare CompareOp="IS">
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Column="Expr1075" />
                                    </Identifier>
                                  </ScalarOperator>
                                  <ScalarOperator>
                                    <Identifier>
                                      <ColumnReference Column="Expr1075" />
                                    </Identifier>
                                  </ScalarOperator>
                                </Compare>
                              </ScalarOperator>
                            </Logical>
                          </ScalarOperator>
                          <ScalarOperator>
                            <Compare CompareOp="IS">
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Column="Expr1076" />
                                </Identifier>
                              </ScalarOperator>
                              <ScalarOperator>
                                <Identifier>
                                  <ColumnReference Column="Expr1076" />
                                </Identifier>
                              </ScalarOperator>
                            </Compare>
                          </ScalarOperator>
                        </Logical>
                      </ScalarOperator>
                    </BuildResidual>

insira a descrição da imagem aqui

sql-server optimization
  • 1 respostas
  • 244 Views
Martin Hope
George.Palacios
Asked: 2014-08-05 05:05:42 +0800 CST

Atualização na exibição em tabelas particionadas atualizando todos os índices

  • 2

Temos uma tabela, que é particionada por meio de um campo de data em anos separados.

Há uma visão sobre todas essas mesas (Call)

Esquema é o seguinte:

CREATE TABLE [dbo].[Call_2015](
    [calID] [uniqueidentifier] NOT NULL,
    [calPackageID] [int] NULL,
    [calClientID] [int] NULL,
    [calStartDate] [datetime] NOT NULL,
    [calEndDate] [datetime] NOT NULL,
    [calTimeIn] [char](5) NULL,
    [calTimeOut] [char](5) NULL,
    [calMinutes] [smallint] NULL,
    [calPreferredTimeIn] [char](5) NULL,
    [calPreferredTimeOut] [char](5) NULL,
    [calActualTimeIn] [char](5) NULL,
    [calActualTimeOut] [char](5) NULL,
    [calActualMinutes] [smallint] NULL,
    [calConfirmed] [smallint] NULL,
    [calCarerID] [int] NULL,
    [calRepCarerID] [int] NULL,
    [calOriginalCarerID] [int] NULL,
    [calContractID] [int] NULL,
    [calNeedID] [int] NULL,
    [calMedicationID] [int] NULL,
    [calFrequency] [smallint] NULL,
    [calFromDate] [datetime] NULL,
    [calWeekNo] [smallint] NULL,
    [calAlert] [smallint] NULL,
    [calNoLeave] [smallint] NULL,
    [calTimeCritical] [smallint] NULL,
    [calStatus] [smallint] NULL,
    [calClientAwayReasonID] [int] NULL,
    [calCarerAwayReasonID] [int] NULL,
    [calOutsideShift] [smallint] NULL,
    [calHistoryID] [int] NULL,
    [calInvoiceID] [int] NULL,
    [calWagesheetID] [int] NULL,
    [calReasonID] [int] NULL,
    [calCallConfirmID] [varchar](50) NULL,
    [calCreated] [datetime] NULL,
    [calUpdated] [datetime] NULL,
    [calVariation] [int] NULL,
    [calVariationUserID] [int] NULL,
    [calException] [smallint] NULL,
    [calRetained] [smallint] NULL,
    [calDoubleUpID] [uniqueidentifier] NULL,
    [calDoubleUpOrder] [smallint] NULL,
    [calNeedCount] [smallint] NULL,
    [calNoStay] [smallint] NULL,
    [calCoverCarerID] [int] NULL,
    [calPayAdjustment] [real] NULL,
    [calChargeAdjustment] [real] NULL,
    [calTeamID] [int] NULL,
    [calExpenses] [money] NULL,
    [calMileage] [real] NULL,
    [calOverrideStatus] [smallint] NULL,
    [calLocked] [smallint] NULL,
    [calDriver] [smallint] NULL,
    [calPostcode] [char](10) NULL,
    [calDayCentreID] [int] NULL,
    [calMustHaveCarer] [smallint] NULL,
    [calRoleID] [int] NULL,
    [calUnavailableCarerID] [int] NULL,
    [calClientInformed] [smallint] NULL,
    [calFamilyInformed] [smallint] NULL,
    [calMonthlyDay] [smallint] NULL,
    [calOriginalTimeIn] [char](5) NULL,
    [calLeadCarer] [smallint] NULL,
    [calCallTypeID] [int] NULL,
    [calActualStartDate] [datetime] NULL,
    [calActualEndDate] [datetime] NULL,
    [Table_Year] [int] NOT NULL,
 CONSTRAINT [PK_Call_2015] PRIMARY KEY CLUSTERED 
(
    [Table_Year] ASC,
    [calID] ASC,
    [calStartDate] ASC,
    [calEndDate] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[Call_2015]  WITH CHECK ADD  CONSTRAINT [CK_Call_Year_2015] CHECK  (([Table_Year]=(2015)))
GO

ALTER TABLE [dbo].[Call_2015] CHECK CONSTRAINT [CK_Call_Year_2015]
GO

ALTER TABLE [dbo].[Call_2015]  WITH CHECK ADD  CONSTRAINT [CK_calStartDate_2015] CHECK  (([calStartDate]>=CONVERT([datetime],'01 Jan 2015 00:00:00',(0)) AND [calStartDate]<=CONVERT([datetime],'31 DEC 2015 23:59:59',(0))))
GO

ALTER TABLE [dbo].[Call_2015] CHECK CONSTRAINT [CK_calStartDate_2015]
GO

ALTER TABLE [dbo].[Call_2015] ADD  CONSTRAINT [DF_Call_2015_Table_Year]  DEFAULT ((2015)) FOR [Table_Year]
GO

A atualização da tabela é a seguinte:

UPDATE Call SET
        calStartDate = CASE 
            WHEN calFrequency = 14 THEN dbo.funDate(@MonthlyDay, MONTH(calStartDate), YEAR(calStartDate))
            WHEN calFrequency IN (15,16) THEN dbo.funMonthlyCallDate(calFrequency, @MonthlyDay, calStartDate)
            ELSE DateAdd(d, @StartDay-1, (calStartDate - datepart(dw,calStartDate)+1)) 
        END,
        calEndDate = CASE 
            WHEN calFrequency = 14 THEN dbo.funDate(@MonthlyDay + @EndDay - @StartDay, MONTH(calStartDate), YEAR(calStartDate))
            WHEN calFrequency IN (15,16) THEN DATEADD(D, @EndDay - @StartDay, dbo.funMonthlyCallDate(calFrequency, @MonthlyDay, calStartDate))
            ELSE DateAdd(d, @StartDay-1+@DayCount, (calStartDate - datepart(dw,calStartDate)+1)) 
        END,
        calTimeIn = @TimeIn,
        calTimeOut = @TimeOut,
        calMinutes = @Minutes,
        calMonthlyDay = @MonthlyDay,
        calClientInformed = Null, 
        calFamilyInformed = Null
    WHERE calPackageID = @PackageID
    AND calClientID = @ClientID
    AND calWeekNo = @WeekNo
    AND (DatePart(dw, calStartDate) = @OriginalDay OR calFrequency IN (14,15,16))
    AND calStartDate BETWEEN @StartDate AND @EndDate
    AND (calInvoiceID = 0 OR calInvoiceID Is Null OR @InvoicesFinalised = 1)
    AND (calWagesheetID = 0 OR calWagesheetID Is Null OR @WagesFinalised = 1)
    AND (calLocked = 0 OR calLocked Is Null)
    AND (Table_Year = YEAR(@StartDate) 
            OR Table_Year =YEAR(@EndDate))

O SP atualiza um lote de linhas dependentes da entrada em @StartDate e @EndDate (atualiza todas as linhas com uma calStartDate entre as duas)

O problema então vem com o plano de execução. Há enormes custos de E/S para a operação, e eu acertei como o SQL está lidando com a atualização.

Atualmente temos 20 dessas mesas; particionada por ano. Cada atualização está causando uma atualização dos índices de cada tabela, independentemente de a tabela ser realmente tocada pela operação de atualização ou não.

Plano de execução

Abaixo desta seção, ele atualiza, exatamente da mesma maneira, todas as tabelas na exibição.

Não consigo entender por que isso ocorre, pois especifiquei o Table_Year (no qual a tabela está particionada) no texto da consulta. O SQL não deveria atualizar apenas a tabela necessária?

sql-server index
  • 2 respostas
  • 1144 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