AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 145982
Accepted
Pரதீப்
Pரதீப்
Asked: 2016-08-06 02:18:16 +0800 CST2016-08-06 02:18:16 +0800 CST 2016-08-06 02:18:16 +0800 CST

sp_updatestats vs Atualizar estatísticas

  • 772

Existe alguma diferença entre atualizar as estatísticas de uma tabela usando sp_updatestatssem reamostragem e atualizar as estatísticas da tabela usando UPDATE STATISTICSsemsample options(FULLSCAN,SAMPLE PERCENT,RESAMPLE)

exec sp_updatestats vs atualização de estatísticas tablename

atualizar as tabelas usando sp_updatestatso valor padrão NOatualizará as estatísticas com a taxa de amostragem padrão.

da mesma forma, atualizar as estatísticas da tabela usando UPDATE STATISTICSsem sample options(FULLSCAN,SAMPLE PERCENT,RESAMPLE)também atualizará as estatísticas da tabela com a amostragem padrão.

Então, há alguma diferença entre os dois métodos? Estou perdendo alguma coisa aqui?

Atualizar :

Eu sei que sp_updatestatsroda em todas as tabelas, mas usando UPDATE STATISTICSpodemos atualizar as estatísticas de uma tabela específica.

sql-server statistics
  • 4 4 respostas
  • 29068 Views

4 respostas

  • Voted
  1. Best Answer
    Shanky
    2016-08-06T03:10:32+08:002016-08-06T03:10:32+08:00

    Existe alguma diferença entre atualizar as estatísticas de uma tabela usando sp_updatestats sem reamostragem e atualizar as estatísticas da tabela usando UPDATE STATISTICS sem opções de amostra (FULLSCAN, SAMPLE PERCENT, RESAMPLE)

    Somando ao que já foi mencionado pelo @Gameiswar, a outra diferença que eu conheço com sp_updatestats, quando você executa para todas as tabelas do banco de dados ele APENAS atualiza as estatísticas das tabelas que tem pelo menos uma linha alterada. BOL diz

    Para tabelas baseadas em disco, sp_updatestats atualiza apenas as estatísticas que exigem atualização com base nas informações rowmodctr na exibição de catálogo sys.sysindexes, evitando atualizações desnecessárias de estatísticas em linhas inalteradas.

    Portanto, quando você executa sp_updatestats e diz que as estatísticas de todas as tabelas foram atualizadas, isso é incorreto/enganoso apenas para tabelas que têm pelo menos uma linha alterada quando as estatísticas foram atualizadas.

    Ao usar UPDATE STATISTICS, você tem muitas opções para usar para atualização de estatísticas.

    Além disso, quando você recria o índice com verificação completa ou com opções padrão, as estatísticas são atualizadas para esse índice, portanto, não há necessidade de reconstruir as estatísticas novamente.

    PS: Qualquer que seja a diferença, eu não usaria sp_updatestats, pois o mecanismo que ele usa para atualizar as estatísticas não é bom, por que eu deveria atualizar as estatísticas da tabela se apenas uma linha mudou e eu tenho 100 mil linhas na tabela, apenas consumirá recursos e causar mais problemas.

    EDITAR:

    Se você deseja atualizar as estatísticas seletivamente e não deseja executar sp_updatestas, use a consulta abaixo para filtrar estatísticas desatualizadas. Esta consulta usa DMF e funcionaria de SQL Server 2008 R2 SP2 , SQL Server 2012 Sp1 and above, Copiado do blog de Erin Stellato

    NOTA : Perceba que tabelas diferentes podem ter limites diferentes e você precisará ajustar a consulta acima para seus bancos de dados. Para algumas tabelas, esperar até que 15% ou 20% das linhas tenham sido modificadas pode ser aceitável. Mas para outros, pode ser necessário atualizar em 10% ou até 5%, dependendo dos valores reais e de sua inclinação.

    SELECT [sch].[name] + '.' + [so].[name] AS [TableName] ,
    [ss].[name] AS [Statistic],
    [sp].[last_updated] AS [StatsLastUpdated] ,
    [sp].[rows] AS [RowsInTable] ,
    [sp].[rows_sampled] AS [RowsSampled] ,
    [sp].[modification_counter] AS [RowModifications]
    FROM [sys].[stats] [ss]
    JOIN [sys].[objects] [so] ON [ss].[object_id] = [so].[object_id]
    JOIN [sys].[schemas] [sch] ON [so].[schema_id] = [sch].[schema_id]
    OUTER APPLY [sys].[dm_db_stats_properties]([so].[object_id],
    [ss].[stats_id]) sp
    WHERE [so].[type] = 'U'
    AND [sp].[modification_counter] > 0--change accordingly
    ORDER BY [sp].[last_updated] DESC;
    

    Se você quiser evitar todos esses problemas, você também pode usar o script de atualização de estatísticas Ola Hallengren, que cuida de muitas dessas coisas.

    • 6
  2. Tom V
    2016-08-06T03:35:32+08:002016-08-06T03:35:32+08:00

    O código para sp_updatestatsé bastante simples, você pode vê-lo criando uma cópia do banco de mssqlsystemresourcedados. Basta copiar os arquivos mdf e ldf em algum lugar e anexá-los como um banco de dados com outro nome.

    Como pode ser visto em BOL a instrução leva 1 parâmetro, reamostra:

    ALTER procedure [sys].[sp_updatestats]
        @resample char(8)='NO'
    as
    

    Não acho uma boa ideia postar todo o procedimento aqui, você mesmo pode dar uma olhada, mas basicamente é um procedimento simples.

    Dentro do procedimento, ele faz um loop sobre as tabelas no banco de dados, faz algumas verificações básicas, como verificar se uma tabela não tem seu índice clusterizado desabilitado, verifica se uma tabela é hekathon (para determinar se a lista de estatísticas em uma tabela deve ser lido de sys.stats ou sys.indexes), verifica se é uma tabela hekathon novamente para adicionar fullscan no caso de uma tabela hekathon e, em seguida, executa uma simples UPDATE STATISTICS.

    Basicamente, uma dessas três instruções é executada em todas as estatísticas do seu banco de dados

    -- When resample is yes
    UPDATE STATISTICS [sysname].[sysname] [sysname] WITH RESAMPLE
    -- When resample is no
    UPDATE STATISTICS [sysname].[sysname] [sysname] 
    -- For a hekathon table
    UPDATE STATISTICS [sysname].[sysname] [sysname] WITH FULLSCAN
    

    Exceto se as estatísticas tiverem estatísticas automáticas desabilitadas, também adiciona uma NORECOMPUTEcláusula

    Portanto, não há muita diferença entre simplesmente chamar um UPDATE STATISTICSem cada uma de suas estatísticas se elas não tiverem estatísticas automáticas desabilitadas e não estiverem em tabelas com otimização de memória.

    • 6
  3. TheGameiswar
    2016-08-06T02:29:47+08:002016-08-06T02:29:47+08:00

    Existem diferenças em como os usamos ..

    Sp_updatestats:
    sp_updatestats executa UPDATE STATISTICS, especificando a palavra-chave ALL, em todas as tabelas internas e definidas pelo usuário no banco de dados. Não podemos pedir ao SQL para atualizar apenas estatísticas para uma única tabela/índice usando esta opção,

    Estatísticas de atualização:
    Com Estatísticas de atualização, você pode atualizar estatísticas por tabela/índice.

    Existe alguma diferença entre atualizar as estatísticas de uma tabela usando sp_updatestats sem reamostragem e atualizar as estatísticas da tabela usando UPDATE STATISTICS sem opções de amostra (FULLSCAN, SAMPLE PERCENT, RESAMPLE)

    Se 'reamostragem' não for especificado, sp_updatestats atualizará as estatísticas usando a amostragem padrão.

    Para estatísticas de atualização, quando nenhuma das opções de amostra (SAMPLE, FULLSCAN, RESAMPLE) for especificada, o otimizador de consulta amostrará os dados e calculará o tamanho da amostra por padrão.

    • 2
  4. Prakash BhojeGowda
    2019-05-29T06:21:31+08:002019-05-29T06:21:31+08:00

    A taxa de amostragem de SP_Updatestats é muito baixa, como 0,05%. Especialmente em VLDBs É aconselhável usar estatísticas de atualização do DBCC em cada tabela para atualizar as estatísticas com amostragem apropriada. O melhor seria executar estatísticas de atualização do DBCC com verificação completa. Se isso não for possível, use taxa de amostragem de 25%.

    • -2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

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