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

Mattia Nocerino's questions

Martin Hope
Mattia Nocerino
Asked: 2022-08-11 02:18:58 +0800 CST

Leituras lógicas e leituras lógicas LOB

  • 3

Eu tenho um aplicativo de consulta digitalizando uma tabela inteira com um campo de texto.

A consulta está fazendo isso muitas leituras:

Contagem de varredura 1, leituras lógicas 170586 , leituras físicas 3, leituras antecipadas 174716, leituras lógicas lob 7902578 , leituras físicas lob 8743, leituras antecipadas lob 0.

Plano de consulta com leituras lógicas de lob

Se eu remover o campo de texto da seleção, as leituras se tornarão o seguinte:

Contagem de varredura 1, leituras lógicas 170588 , leituras físicas 0, leituras antecipadas 0, leituras lógicas lob 0 , leituras físicas lob 0, leituras antecipadas lob 0.

Plano de consulta sem leituras lógicas de lob

A única coisa que eu não entendo é como o lob reads funciona:

se eu somar as leituras lógicas com leituras lógicas lob recebo um total de 8.073.164 leituras lógicas , que, se estiver correto, é cerca de 64 GB .

Mas todo o banco de dados tem apenas 7 GB!

Provavelmente estou perdendo algo sobre a adição de leituras lógicas e leituras lógicas de lob.

O que o número de leituras lógicas lob realmente representa?

sql-server sql-server-2017
  • 2 respostas
  • 215 Views
Martin Hope
Mattia Nocerino
Asked: 2021-03-18 01:06:31 +0800 CST

Erro 41145 após ingressar no banco de dados no grupo de disponibilidade

  • 1

Continuo recebendo do meu serviço de monitoramento SQL o seguinte alerta:

Erro: 41145, Gravidade: 16, Estado: 1. Não é possível associar o banco de dados ao grupo de disponibilidade. O banco de dados já ingressou no grupo de disponibilidade. Esta é uma mensagem informativa. Não é necessária nenhuma ação do usuário.

Esse erro está chegando aproximadamente a cada 2 horas, mas não consigo entender o porquê.

Além disso, no log de erros do SQL, tenho milhares dessa entrada de log que nunca notei em nenhuma das minhas outras instalações do SQL Server: Log de erros do servidor SQL Log de erros do servidor SQL

Esta é uma nova instalação do SQL Server que se tornará meu ambiente de produção, então quero ter certeza de que não há nada de errado com ela antes de realizarmos a troca dos servidores.

sql-server availability-groups
  • 1 respostas
  • 2408 Views
Martin Hope
Mattia Nocerino
Asked: 2021-01-15 07:48:00 +0800 CST

Vários discos versus disco único em ambiente virtualizado

  • 1

Estamos planejando instalar um SQL Server nesta arquitetura física:

  • Um cluster hyper-v baseado no Windows Server 2019
  • Um volume compartilhado de cluster onde todas as VMs residem
  • Uma SAN full-flash que contém o CSV

Eu sempre li que é uma prática recomendada comum ter vários discos para arquivos de dados, arquivos de log, arquivos db temporários etc ...

Mas essa melhor prática refere-se a uma instalação básica.

Então, o que estou perguntando é: quais são os benefícios reais de fazê-lo na arquitetura descrita acima (se houver)?

performance sql-server-2017
  • 2 respostas
  • 467 Views
Martin Hope
Mattia Nocerino
Asked: 2020-03-04 00:23:08 +0800 CST

Acionar na visualização indexada

  • 1

Eu criei uma exibição indexada com um INSTEAD OFgatilho, mas não está disparando quando as inserções acontecem no nível da tabela base.

Este é o plano que uma inserção normal gera (observe a inserção do índice clusterizado no VW_X.VW_CIqual está o índice clusterizado que representa a exibição)

Imagem do plano do SQL Server

Existe alguma maneira de rastrear inserções em uma exibição, apesar do fato de que as inserções realmente não acontecem lá, mas nas tabelas base que criam a exibição?

sql-server trigger
  • 1 respostas
  • 375 Views
Martin Hope
Mattia Nocerino
Asked: 2018-10-18 08:02:27 +0800 CST

Não é possível usar o guia de plano com sp_execute

  • 3

Eu tenho um aplicativo que está consultando uma tabela de 10 milhões de linhas.

A consulta está filtrando por uma coluna inteira que é indexada. Esta coluna contém apenas NULLs e a consulta sempre procura por não NULLvalores, portanto, deve ser rápida.

O problema é que o aplicativo envia a consulta com sp_preparee então sp_executee é basicamente OPTIMIZE FOR (UNKNOWN)(veja a resposta de Erik para mais informações sobre isso).

Resumidamente:

  1. sp_executedo aplicativo =>optimize for (unknown)
  2. vetor de densidade usado para obter estimativas
  3. apenas um valor ( NULL) para toda a linha, então estimativa = contagem de linhas
  4. varredura completa da tabela quando a consulta retorna 0 linhas = desempenho ruim

Como não posso alterar o código do aplicativo, achei que um guia de plano com OPTIMIZE FOR (@P0 = 1)o que resolveria tudo.

Recebi o texto da consulta de uma sessão de evento estendida (copiada da coluna sql_text, mas removi a (@P0 bigint)parte)

insira a descrição da imagem aqui

E então eu criei o guia de plano assim:

EXEC sp_create_plan_guide 
    @name = N'Test_1',
    @stmt = N'select subsidiary0_.primary_event_gkey as primary40_1_, subsidiary0_.gkey as gkey1_, subsidiary0_.gkey as gkey1667_0_, subsidiary0_.operator_gkey as operator2_1667_0_, subsidiary0_.complex_gkey as complex3_1667_0_, subsidiary0_.facility_gkey as facility4_1667_0_, subsidiary0_.yard_gkey as yard5_1667_0_, subsidiary0_.placed_by as placed6_1667_0_, subsidiary0_.placed_time as placed7_1667_0_, subsidiary0_.event_type_gkey as event8_1667_0_, subsidiary0_.applied_to_class as applied9_1667_0_, subsidiary0_.applied_to_gkey as applied10_1667_0_, subsidiary0_.applied_to_natural_key as applied11_1667_0_, subsidiary0_.note as note1667_0_, subsidiary0_.billing_extract_batch_id as billing13_1667_0_, subsidiary0_.quantity as quantity1667_0_, subsidiary0_.quantity_unit as quantity15_1667_0_, subsidiary0_.responsible_party as respons16_1667_0_, subsidiary0_.related_entity_gkey as related17_1667_0_, subsidiary0_.related_entity_id as related18_1667_0_, subsidiary0_.related_entity_class as related19_1667_0_, subsidiary0_.related_batch_id as related20_1667_0_, subsidiary0_.acknowledged as acknowl21_1667_0_, subsidiary0_.acknowledged_by as acknowl22_1667_0_, subsidiary0_.flex_string01 as flex23_1667_0_, subsidiary0_.flex_string02 as flex24_1667_0_, subsidiary0_.flex_string03 as flex25_1667_0_, subsidiary0_.flex_string04 as flex26_1667_0_, subsidiary0_.flex_string05 as flex27_1667_0_, subsidiary0_.flex_date01 as flex28_1667_0_, subsidiary0_.flex_date02 as flex29_1667_0_, subsidiary0_.flex_date03 as flex30_1667_0_, subsidiary0_.flex_double01 as flex31_1667_0_, subsidiary0_.flex_double02 as flex32_1667_0_, subsidiary0_.flex_double03 as flex33_1667_0_, subsidiary0_.flex_double04 as flex34_1667_0_, subsidiary0_.flex_double05 as flex35_1667_0_, subsidiary0_.created as created1667_0_, subsidiary0_.creator as creator1667_0_, subsidiary0_.changed as changed1667_0_, subsidiary0_.changer as changer1667_0_, subsidiary0_.primary_event_gkey as primary40_1667_0_, subsidiary0_1_.instrument_value as instrument2_1671_0_, subsidiary0_1_.check_time as check3_1671_0_, subsidiary0_1_.node_name as node4_1671_0_, subsidiary0_1_.instrument_gkey as instrument5_1671_0_, subsidiary0_2_.move_kind as move2_1836_0_, subsidiary0_2_.ufv_gkey as ufv3_1836_0_, subsidiary0_2_.line_op as line4_1836_0_, subsidiary0_2_.carrier_gkey as carrier5_1836_0_, subsidiary0_2_.exclude as exclude1836_0_, subsidiary0_2_.fm_pos_loctype as fm7_1836_0_, subsidiary0_2_.fm_pos_locid as fm8_1836_0_, subsidiary0_2_.fm_pos_loc_gkey as fm9_1836_0_, subsidiary0_2_.fm_pos_slot as fm10_1836_0_, subsidiary0_2_.fm_pos_orientation as fm11_1836_0_, subsidiary0_2_.fm_pos_name as fm12_1836_0_, subsidiary0_2_.fm_pos_bin as fm13_1836_0_, subsidiary0_2_.fm_pos_tier as fm14_1836_0_, subsidiary0_2_.fm_pos_anchor as fm15_1836_0_, subsidiary0_2_.fm_pos_orientation_degrees as fm16_1836_0_, subsidiary0_2_.to_pos_loctype as to17_1836_0_, subsidiary0_2_.to_pos_locid as to18_1836_0_, subsidiary0_2_.to_pos_loc_gkey as to19_1836_0_, subsidiary0_2_.to_pos_slot as to20_1836_0_, subsidiary0_2_.to_pos_orientation as to21_1836_0_, subsidiary0_2_.to_pos_name as to22_1836_0_, subsidiary0_2_.to_pos_bin as to23_1836_0_, subsidiary0_2_.to_pos_tier as to24_1836_0_, subsidiary0_2_.to_pos_anchor as to25_1836_0_, subsidiary0_2_.to_pos_orientation_degrees as to26_1836_0_, subsidiary0_2_.che_fetch as che27_1836_0_, subsidiary0_2_.che_carry as che28_1836_0_, subsidiary0_2_.che_put as che29_1836_0_, subsidiary0_2_.che_qc as che30_1836_0_, subsidiary0_2_.dist_start as dist31_1836_0_, subsidiary0_2_.dist_carry as dist32_1836_0_, subsidiary0_2_.t_carry_complete as t33_1836_0_, subsidiary0_2_.t_dispatch as t34_1836_0_, subsidiary0_2_.t_fetch as t35_1836_0_, subsidiary0_2_.t_discharge as t36_1836_0_, subsidiary0_2_.t_put as t37_1836_0_, subsidiary0_2_.t_carry_fetch_ready as t38_1836_0_, subsidiary0_2_.t_carry_put_ready as t39_1836_0_, subsidiary0_2_.t_carry_dispatch as t40_1836_0_, subsidiary0_2_.t_tz_arrival as t41_1836_0_, subsidiary0_2_.rehandle_count as rehandle42_1836_0_, subsidiary0_2_.twin_fetch as twin43_1836_0_, subsidiary0_2_.twin_carry as twin44_1836_0_, subsidiary0_2_.twin_put as twin45_1836_0_, subsidiary0_2_.restow_account as restow46_1836_0_, subsidiary0_2_.service_order as service47_1836_0_, subsidiary0_2_.restow_reason as restow48_1836_0_, subsidiary0_2_.processed as processed1836_0_, subsidiary0_2_.pow as pow1836_0_, subsidiary0_2_.che_carry_login_name as che51_1836_0_, subsidiary0_2_.che_put_login_name as che52_1836_0_, subsidiary0_2_.che_fetch_login_name as che53_1836_0_, subsidiary0_2_.berth as berth1836_0_, subsidiary0_2_.category as category1836_0_, subsidiary0_2_.freight_kind as freight56_1836_0_, subsidiary0_3_.cv_id as cv2_1838_0_, subsidiary0_3_.transaction_count as transact3_1838_0_, subsidiary0_3_.run_time_ms as run4_1838_0_, case when subsidiary0_1_.ahe_gkey is not null then 1 when subsidiary0_2_.mve_gkey is not null then 2 when subsidiary0_3_.edievent_gkey is not null then 3 when subsidiary0_.gkey is not null then 0 end as clazz_0_ from srv_event subsidiary0_ left outer join srv_app_health_event subsidiary0_1_ on subsidiary0_.gkey=subsidiary0_1_.ahe_gkey left outer join inv_move_event subsidiary0_2_ on subsidiary0_.gkey=subsidiary0_2_.mve_gkey left outer join edi_event subsidiary0_3_ on subsidiary0_.gkey=subsidiary0_3_.edievent_gkey where subsidiary0_.primary_event_gkey= @P0  ',        
    @type = N'SQL',
    @params = N'@P0 bigint',
    @hints = N'OPTION (OPTIMIZE FOR (@P0 = 1))'
GO

Também criei um guia de plano sem os espaços no final da declaração, só para ter certeza, mas nenhum deles está sendo usado pelo aplicativo.

O estranho é que, se eu executar a consulta sozinho, o guia do plano é considerado e funciona como eu pensava.

declare @p1 int;  

exec sp_prepare 
    @p1 output,   
    N'@P0 bigint',  
    N'select subsidiary0_.primary_event_gkey as primary40_1_, subsidiary0_.gkey as gkey1_, subsidiary0_.gkey as gkey1667_0_, subsidiary0_.operator_gkey as operator2_1667_0_, subsidiary0_.complex_gkey as complex3_1667_0_, subsidiary0_.facility_gkey as facility4_1667_0_, subsidiary0_.yard_gkey as yard5_1667_0_, subsidiary0_.placed_by as placed6_1667_0_, subsidiary0_.placed_time as placed7_1667_0_, subsidiary0_.event_type_gkey as event8_1667_0_, subsidiary0_.applied_to_class as applied9_1667_0_, subsidiary0_.applied_to_gkey as applied10_1667_0_, subsidiary0_.applied_to_natural_key as applied11_1667_0_, subsidiary0_.note as note1667_0_, subsidiary0_.billing_extract_batch_id as billing13_1667_0_, subsidiary0_.quantity as quantity1667_0_, subsidiary0_.quantity_unit as quantity15_1667_0_, subsidiary0_.responsible_party as respons16_1667_0_, subsidiary0_.related_entity_gkey as related17_1667_0_, subsidiary0_.related_entity_id as related18_1667_0_, subsidiary0_.related_entity_class as related19_1667_0_, subsidiary0_.related_batch_id as related20_1667_0_, subsidiary0_.acknowledged as acknowl21_1667_0_, subsidiary0_.acknowledged_by as acknowl22_1667_0_, subsidiary0_.flex_string01 as flex23_1667_0_, subsidiary0_.flex_string02 as flex24_1667_0_, subsidiary0_.flex_string03 as flex25_1667_0_, subsidiary0_.flex_string04 as flex26_1667_0_, subsidiary0_.flex_string05 as flex27_1667_0_, subsidiary0_.flex_date01 as flex28_1667_0_, subsidiary0_.flex_date02 as flex29_1667_0_, subsidiary0_.flex_date03 as flex30_1667_0_, subsidiary0_.flex_double01 as flex31_1667_0_, subsidiary0_.flex_double02 as flex32_1667_0_, subsidiary0_.flex_double03 as flex33_1667_0_, subsidiary0_.flex_double04 as flex34_1667_0_, subsidiary0_.flex_double05 as flex35_1667_0_, subsidiary0_.created as created1667_0_, subsidiary0_.creator as creator1667_0_, subsidiary0_.changed as changed1667_0_, subsidiary0_.changer as changer1667_0_, subsidiary0_.primary_event_gkey as primary40_1667_0_, subsidiary0_1_.instrument_value as instrument2_1671_0_, subsidiary0_1_.check_time as check3_1671_0_, subsidiary0_1_.node_name as node4_1671_0_, subsidiary0_1_.instrument_gkey as instrument5_1671_0_, subsidiary0_2_.move_kind as move2_1836_0_, subsidiary0_2_.ufv_gkey as ufv3_1836_0_, subsidiary0_2_.line_op as line4_1836_0_, subsidiary0_2_.carrier_gkey as carrier5_1836_0_, subsidiary0_2_.exclude as exclude1836_0_, subsidiary0_2_.fm_pos_loctype as fm7_1836_0_, subsidiary0_2_.fm_pos_locid as fm8_1836_0_, subsidiary0_2_.fm_pos_loc_gkey as fm9_1836_0_, subsidiary0_2_.fm_pos_slot as fm10_1836_0_, subsidiary0_2_.fm_pos_orientation as fm11_1836_0_, subsidiary0_2_.fm_pos_name as fm12_1836_0_, subsidiary0_2_.fm_pos_bin as fm13_1836_0_, subsidiary0_2_.fm_pos_tier as fm14_1836_0_, subsidiary0_2_.fm_pos_anchor as fm15_1836_0_, subsidiary0_2_.fm_pos_orientation_degrees as fm16_1836_0_, subsidiary0_2_.to_pos_loctype as to17_1836_0_, subsidiary0_2_.to_pos_locid as to18_1836_0_, subsidiary0_2_.to_pos_loc_gkey as to19_1836_0_, subsidiary0_2_.to_pos_slot as to20_1836_0_, subsidiary0_2_.to_pos_orientation as to21_1836_0_, subsidiary0_2_.to_pos_name as to22_1836_0_, subsidiary0_2_.to_pos_bin as to23_1836_0_, subsidiary0_2_.to_pos_tier as to24_1836_0_, subsidiary0_2_.to_pos_anchor as to25_1836_0_, subsidiary0_2_.to_pos_orientation_degrees as to26_1836_0_, subsidiary0_2_.che_fetch as che27_1836_0_, subsidiary0_2_.che_carry as che28_1836_0_, subsidiary0_2_.che_put as che29_1836_0_, subsidiary0_2_.che_qc as che30_1836_0_, subsidiary0_2_.dist_start as dist31_1836_0_, subsidiary0_2_.dist_carry as dist32_1836_0_, subsidiary0_2_.t_carry_complete as t33_1836_0_, subsidiary0_2_.t_dispatch as t34_1836_0_, subsidiary0_2_.t_fetch as t35_1836_0_, subsidiary0_2_.t_discharge as t36_1836_0_, subsidiary0_2_.t_put as t37_1836_0_, subsidiary0_2_.t_carry_fetch_ready as t38_1836_0_, subsidiary0_2_.t_carry_put_ready as t39_1836_0_, subsidiary0_2_.t_carry_dispatch as t40_1836_0_, subsidiary0_2_.t_tz_arrival as t41_1836_0_, subsidiary0_2_.rehandle_count as rehandle42_1836_0_, subsidiary0_2_.twin_fetch as twin43_1836_0_, subsidiary0_2_.twin_carry as twin44_1836_0_, subsidiary0_2_.twin_put as twin45_1836_0_, subsidiary0_2_.restow_account as restow46_1836_0_, subsidiary0_2_.service_order as service47_1836_0_, subsidiary0_2_.restow_reason as restow48_1836_0_, subsidiary0_2_.processed as processed1836_0_, subsidiary0_2_.pow as pow1836_0_, subsidiary0_2_.che_carry_login_name as che51_1836_0_, subsidiary0_2_.che_put_login_name as che52_1836_0_, subsidiary0_2_.che_fetch_login_name as che53_1836_0_, subsidiary0_2_.berth as berth1836_0_, subsidiary0_2_.category as category1836_0_, subsidiary0_2_.freight_kind as freight56_1836_0_, subsidiary0_3_.cv_id as cv2_1838_0_, subsidiary0_3_.transaction_count as transact3_1838_0_, subsidiary0_3_.run_time_ms as run4_1838_0_, case when subsidiary0_1_.ahe_gkey is not null then 1 when subsidiary0_2_.mve_gkey is not null then 2 when subsidiary0_3_.edievent_gkey is not null then 3 when subsidiary0_.gkey is not null then 0 end as clazz_0_ from srv_event subsidiary0_ left outer join srv_app_health_event subsidiary0_1_ on subsidiary0_.gkey=subsidiary0_1_.ahe_gkey left outer join inv_move_event subsidiary0_2_ on subsidiary0_.gkey=subsidiary0_2_.mve_gkey left outer join edi_event subsidiary0_3_ on subsidiary0_.gkey=subsidiary0_3_.edievent_gkey where subsidiary0_.primary_event_gkey= @P0  ';  
exec sp_execute @p1, 123123; 

exec sp_unprepare @p1; 

Observei também que, quando executo a consulta acima no SSMS, ela aparece nos eventos estendidos como sql_batche não como rpc. Talvez seja algo a ver com o problema?

sql-server sql-server-2017
  • 1 respostas
  • 199 Views
Martin Hope
Mattia Nocerino
Asked: 2018-08-17 23:37:39 +0800 CST

O SSMS falha ao tentar criar um diagrama de banco de dados

  • 3

Atualmente, estou usando a versão mais recente do SSMS (17.8.1) no Windows 10 e toda vez que tento criar um diagrama de banco de dados, ele trava sem me dar nenhuma mensagem de erro. Já tentei reinstalar o SSMS, mas o problema ainda ocorre.

insira a descrição da imagem aqui

ssms crash
  • 1 respostas
  • 4101 Views
Martin Hope
Mattia Nocerino
Asked: 2018-07-20 06:58:37 +0800 CST

Mover dados de uma tabela para outra sem perder dados

  • 4

Eu tenho uma tabela de log que atualmente contém milhões de registros. Eu quero habilitar o particionamento nessa tabela, então o que eu fiz por enquanto é:

  1. Criou uma função de partição e um esquema de partição.
  2. Criou uma tabela vazia com a mesma estrutura nesse esquema de partição.
  3. Dados copiados da tabela de log atual deste ponto no tempo (vamos chamá-lo de T1) voltando para a nova tabela particionada.

As próximas etapas seriam copiar os últimos registros restantes e renomear T1as Tnowduas tabelas para que o aplicativo comece a gravar na nova tabela particionada.

Claro que a tabela de log é acessada com frequência, então minha pergunta é:

Como posso ter certeza de que não perderei nenhum dado durante esse processo? Posso fazer com que os usuários não percebam nada ou preciso necessariamente parar o aplicativo por esse breve período? Ou posso apenas bloquear essa tabela para que o aplicativo continue em execução? Se sim, como?

sql-server sql-server-2016
  • 2 respostas
  • 1457 Views
Martin Hope
Mattia Nocerino
Asked: 2018-07-11 02:33:07 +0800 CST

A atualização das estatísticas com amostragem automática atrapalha o vetor de densidade e o histograma

  • 7

Eu tenho uma tabela que contém 22 milhões de registros.

Percebi que as estatísticas de uma coluna estavam muito erradas, mesmo que essa coluna tenha uma distribuição constante: na verdade, cada valor é repetido duas vezes.

Para ajudá-lo a visualizar esse cenário, pense em uma tabela com datas de check-in e check-out (2 registros distintos) para cada id exclusivo de outra tabela.

Estas são as estatísticas com uma verificação completa:Estatísticas com varredura completa

Estas são as estatísticas com amostragem automática:insira a descrição da imagem aqui

Por que esse comportamento estranho? Existe alguma regra prática para determinar uma taxa de amostragem correta ou o fullscan é necessário? Devo criar um trabalho de atualização de estatísticas com fullscan para algumas estatísticas? E se for o caso, como saber quais são as estatísticas que precisam desse tipo de tratamento?

Informações adicionais:

  • Não há restrição de chave estrangeira nessa coluna
  • A coluna é umanumeric(14,0) NULL
sql-server sql-server-2016
  • 2 respostas
  • 844 Views
Martin Hope
Mattia Nocerino
Asked: 2018-06-13 02:20:23 +0800 CST

Não é possível encontrar valores de parâmetros compilados no cache do plano

  • 3

Encontrei, por meio do repositório de consultas, uma consulta que está executando em média 297.582 leituras lógicas.

Queria ver se consegui ajustar um pouco essa query, e depois disso, tentar executar a query novamente para ver se houve alguma melhora.

O problema é que não consegui encontrar o valor dos parâmetros compilados no plano em cache.

Estou esquecendo de algo? Talvez algum motivo/configuração que impeça o cache de valores de parâmetros?

Não consigo encontrar os parâmetros mesmo se eu abrir o plano de execução como XML.

Informações adicionais: a consulta é executada por um aplicativo de terceiros que prepara as instruções e as executa com sp_preparee sp_execute.

Plano XML completo

Loja de consultas:Não é possível encontrar nenhum parâmetro na guia de propriedades

Planeje DMVs de cache:Planejar cache dmv

sql-server sql-server-2016
  • 1 respostas
  • 333 Views
Martin Hope
Mattia Nocerino
Asked: 2018-06-07 05:10:34 +0800 CST

Consulta usando um índice filtrado, mas um número estimado incorreto de linhas

  • 2

Eu tenho uma tabela com um nonclustered indexem um datetime2campo.

Nessa mesma tabela tenho um campo (char[1])que é usado para deletar registros logicamente e pode ter 2 valores distintos: A(ativo) ou D(excluído).

Existem 451.047 registros com o datetime2campo definido como, NULLmas apenas 7.095 estão marcados como A.

Toda consulta na aplicação procura apenas registros ativos , então, toda consulta que está procurando NULLsno campo datetime estava recebendo estimativas muito ruins e, com isso, planos de execução ruins.

Exemplo simples:Plano sem índice filtrado: veja as linhas estimadas versus as linhas reais

Decidi então criar um índice não clusterizado filtrado, mas as estimativas ainda estavam incorretas:Planejar usando um índice filtrado, ainda recebendo estimativas erradas

Parece que ainda recebo as estimativas antigas, mesmo que a consulta esteja usando corretamente o índice filtrado. Alguém sabe o motivo deste comportamento?

Estas são as novas estatísticas do índice filtrado:Estatísticas de índice filtradas

Definição da tabela:

CREATE TABLE [TYDATPRD].[HAND00F](
    [STDRECSTS] [char](1) NULL,
    [HDHAND] [numeric](14, 0) IDENTITY(1,1) NOT NULL,
    [HDCHKINDT] [datetime2](7) NULL,
    --lots of other columns which I don't think are needed

    CONSTRAINT [PK_TYDATPRD_HAND00F] PRIMARY KEY CLUSTERED (
        [HDHAND] ASC
    ) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DATA]
) ON [DATA]

Definição de índice filtrado não clusterizado:

CREATE NONCLUSTERED INDEX [IX_HAND00F_HDCHKINDT] ON [TYDATPRD].[HAND00F] (
    [HDCHKINDT] ASC
)
WHERE [STDRECSTS]='A'
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [INDEXES]
GO
sql-server-2016 index-tuning
  • 1 respostas
  • 489 Views
Martin Hope
Mattia Nocerino
Asked: 2017-07-06 05:47:35 +0800 CST

Administração de vários servidores: Trabalho que é executado em servidores mestre e de destino?

  • 2

Estou tentando configurar a administração multiservidor no SQL Server 2016. Tenho dois servidores, um mestre e um de destino. Criei um trabalho de teste que faz uma instrução select simples e depois envia um e-mail. Eu quero que esse trabalho seja executado nos servidores mestre e de destino, mas parece que não posso.

Eu não posso acreditar que isso não é possível (tentei no google para isso, mas não encontrei nada).

sql-server sql-server-2016
  • 1 respostas
  • 418 Views
Martin Hope
Mattia Nocerino
Asked: 2016-10-07 00:03:17 +0800 CST

"Dimensões do tipo de medida" na tabela de fatos "Instantâneo acumulado"

  • 8

Eu tenho uma tabela de fatos de instantâneo acumulando que rastreia a entrada e saída de contêineres em um terminal .

Os containers podem entrar e sair de 3 formas diferentes , então pensei em criar uma tabela de dimensão específica que listasse essas 3 formas possíveis ( trem, embarcação ou caminhão ).

Então li este artigo que basicamente diz que essa técnica está errada, mas não consigo entender o porquê.

Primeiro artigo:

Às vezes, quando uma tabela de fatos tem uma longa lista de fatos esparsamente preenchida em qualquer linha individual, é tentador criar uma dimensão de tipo de medida que reduza a linha da tabela de fatos a um único fato genérico identificado pela dimensão de tipo de medida. Geralmente, não recomendamos essa abordagem. Embora remova todas as colunas de fatos vazias, ele multiplica o tamanho da tabela de fatos pelo número médio de colunas ocupadas em cada linha e torna os cálculos intracolunas muito mais difíceis. Essa técnica é aceitável quando o número de fatos potenciais é extremo (na casa das centenas), mas menos de um punhado seria aplicável a qualquer linha da tabela de fatos.

Entendo que, se uma " dimensão de tipo de medida " for implementada para uma tabela de fatos de transação, ela poderá criar problemas como este outro artigo diz, mas não consigo ver nenhuma desvantagem se usada para um fato instantâneo acumulado .

Segundo artigo: (algumas desvantagens de implementar uma "Dimensão de tipo de medida")

  1. [...] Se formos com uma "Dimensão do tipo de medida", perderemos essa capacidade analítica. Se uma medida não for compatível com as outras medidas, não podemos somá-las.
  2. [...] Quanto mais passos nosso SQL precisar executar para produzir um relatório, mais lento será o relatório.
  3. [...] Na ferramenta de BI, se você não colocar o filtro do tipo de medida, você corre o risco de o usuário ficar com “informação lixo”. Do ponto de vista da usabilidade, esse design é um lixo.

Resposta à resposta de Mark Storey-Smith

Muito boa abordagem, eu nunca teria pensado nisso.

Outra coisa: toda entrada e saída de veículo que traz contêiner para dentro do terminal tem um identificador único que me dá outras informações como: previsão de chegada do veículo, chegada efetiva, se é embarcação o cais, se é caminhão o pedágio e muitas outras informações...

Estas são 3 tabelas de fatos diferentes e devem ser vinculadas de alguma forma à tabela de fatos do contêiner.

Eu pensei que o ID da viagem é um degenerate dimension, então ele iria diretamente para a tabela de fatos do contêiner. Então, minha dúvida é: devo adicionar 6 campos diferentes na tabela de fatos do contêiner (vessel_voyage_in_key, Vessel_voyage_out_key, train_voyage_in_key, train_voyage_out_key, truck_voyage_in_key, truck_voyage_out_key) ou apenas 2 outros campos (voyage_in, voyage_out) que se vinculam dinamicamente às várias tabelas de viagem?

Espero que minha dúvida tenha sido esclarecida, obrigado.

database-design data-warehouse
  • 1 respostas
  • 549 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