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 / 7570
Accepted
olle
olle
Asked: 2011-11-04 06:53:18 +0800 CST2011-11-04 06:53:18 +0800 CST 2011-11-04 06:53:18 +0800 CST

Como evitar grande impacto no desempenho durante a criação do índice

  • 772

Eu tenho um banco de dados existente que está faltando alguns índices. Quando tentei criar alguns, o servidor de banco de dados realmente sofreu com o uso da CPU durante a criação do índice, interferindo na carga de trabalho regular. Existe uma maneira de prevenir ou limitar isso? Afinal estou criando o índice para aumentar a performance. Ou este é um golpe único que tenho que suportar para que as coisas sejam melhores no futuro?

sql-server performance
  • 1 1 respostas
  • 1741 Views

1 respostas

  • Voted
  1. Best Answer
    Mark Storey-Smith
    2011-11-04T07:22:56+08:002011-11-04T07:22:56+08:00

    Há muitas explicações possíveis para isso. Pode ser que você tenha que aceitá-lo como o custo de fazer uma melhoria, mas pode estar destacando problemas em outras partes do sistema. Causas Possíveis:

    • Fragmentação da tabela.
    • Fragmentação dos arquivos físicos do banco de dados.
    • Escolha incorreta da chave de índice clusterizado.
    • Tabela grande com baixa porcentagem de seus dados no buffer pool, exigindo muita E/S física para leitura.
    • Falta de capacidade de memória/io/cpu sobressalente para lidar com essa tarefa única além da carga de trabalho normal.
    • Criação de índice que requer tempdb para classificação, mas tempdb na mesma unidade que dados e/ou arquivos de log.

    Sua pergunta é um pouco esparsa nos detalhes necessários para fornecer uma resposta conclusiva. Para começar, você pode adicionar a tabela DDL (incluindo definição de índice clusterizado) à sua pergunta junto com contagens de linha e tamanho do banco de dados. Além disso, uma descrição da especificação do servidor (memória, cpu, configuração da unidade) e se o tempdb está ou não em uma matriz separada.

    Em seguida, o seguinte nos dará uma indicação de como está o desempenho do seu subsistema IO.

    SELECT
        DB_NAME(fs.database_id) AS [Database Name]
      , mf.physical_name
      , io_stall_read_ms
      , num_of_reads
      , CAST(io_stall_read_ms / (1.0 + num_of_reads) AS NUMERIC(10, 1)) AS [avg_read_stall_ms]
      , io_stall_write_ms
      , num_of_writes
      , CAST(io_stall_write_ms / (1.0 + num_of_writes) AS NUMERIC(10, 1)) AS [avg_write_stall_ms]
      , io_stall_read_ms + io_stall_write_ms AS [io_stalls]
      , num_of_reads + num_of_writes AS [total_io]
      , CAST((io_stall_read_ms + io_stall_write_ms) / (1.0 + num_of_reads
        + num_of_writes) AS NUMERIC(10, 1)) AS [avg_io_stall_ms]
    FROM
        sys.dm_io_virtual_file_stats(NULL, NULL) AS fs
    INNER JOIN 
        sys.master_files AS mf
    ON  fs.database_id = mf.database_id
    AND fs.[file_id] = mf.[file_id]
    ORDER BY
        avg_io_stall_ms DESC
    OPTION
        (RECOMPILE) ;
    

    O seguinte nos dirá o quão mal fragmentados estão seus índices existentes. Você pode querer executá-lo em um momento de silêncio, pois pode afetar o desempenho.

    SELECT
        DB_NAME(database_id) AS [Database Name]
      , OBJECT_NAME(ps.OBJECT_ID) AS [Object Name]
      , i.name AS [Index Name]
      , ps.index_id
      , index_type_desc
      , avg_fragmentation_in_percent
      , fragment_count
      , page_count
    FROM
        sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'LIMITED') AS ps
    INNER JOIN 
        sys.indexes AS i
    ON  ps.[object_id] = i.[object_id]
    AND ps.index_id = i.index_id
    WHERE
        database_id = DB_ID()
    AND page_count > 500
    ORDER BY
        avg_fragmentation_in_percent DESC ;
    
    • 3

relate perguntas

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

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

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 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
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +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