none
Criação de index no nó secundário RRS feed

  • Question

  • Bom dia a todos,

    Estou usando o nó secundário para consultas pesadas.

    Entendo que, para criar index no nó secundário eu devo utilizo o nó primário.

    Porém, ao rodar o script de index sugerido no nó secundário ele exibe index já criados. Estou tentando entender esse comportamento, alguém sabe me explicar?

    MSSQL utilizado é o 2014

    Script que utilizo

    SELECT
      MIGS.AVG_TOTAL_USER_COST * (MIGS.AVG_USER_IMPACT / 100.0) * (MIGS.USER_SEEKS + MIGS.USER_SCANS) AS IMPROVEMENT_MEASURE,
      'CREATE INDEX [MISSING_INDEX_' + CONVERT(VARCHAR, MIG.INDEX_GROUP_HANDLE) + '_' + CONVERT(VARCHAR, MID.INDEX_HANDLE)
      + '_' + LEFT (PARSENAME(MID.STATEMENT, 1), 32) + ']'
      + ' ON ' + MID.STATEMENT
      + ' (' + ISNULL (MID.EQUALITY_COLUMNS,'')
      + CASE WHEN MID.EQUALITY_COLUMNS IS NOT NULL AND MID.INEQUALITY_COLUMNS IS NOT NULL THEN ',' ELSE '' END
      + ISNULL (MID.INEQUALITY_COLUMNS, '')
      + ')'
      + ISNULL (' INCLUDE (' + MID.INCLUDED_COLUMNS + ')', '') AS CREATE_INDEX_STATEMENT,
      MIGS.*,
      MID.DATABASE_ID,
      MID.[OBJECT_ID]
    FROM
      SYS.DM_DB_MISSING_INDEX_GROUPS MIG
      INNER JOIN SYS.DM_DB_MISSING_INDEX_GROUP_STATS MIGS ON MIGS.GROUP_HANDLE = MIG.INDEX_GROUP_HANDLE
      INNER JOIN SYS.DM_DB_MISSING_INDEX_DETAILS     MID  ON MIG.INDEX_HANDLE  = MID.INDEX_HANDLE
    WHERE
      MIGS.AVG_TOTAL_USER_COST * (MIGS.AVG_USER_IMPACT / 100.0) * (MIGS.USER_SEEKS + MIGS.USER_SCANS) > 10
    ORDER BY
      MIGS.AVG_TOTAL_USER_COST * MIGS.AVG_USER_IMPACT * (MIGS.USER_SEEKS + MIGS.USER_SCANS) DESC
    
      
    


    Guisal

    Thursday, March 19, 2020 2:20 PM

All replies

  • Guisal,

    Analisando esta sua frase: "Entendo que, para criar index no nó secundário eu devo utilizo o nó primário."

    A resposta é depende, depende da maneira que esta configurado o seu ambiente de AlwaysOn, já passei por um cenário parecido com o seu em 2016, a solução foi criar o índice diretamente no nó Secundário.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Thursday, March 19, 2020 9:54 PM
    Moderator
  • Não sei o 2016, mas o 2014 que é o meu caso, não consigo criar os index no nó secundário, ao menos do jeito tradicional.

    O nó secundário não deixa nenhum tipo de insert ou create, está configurado como somente leitura.


    Guisal

    Friday, March 20, 2020 11:49 AM
  • Guisal,

    Quando eu destaquei 2016 não me referia a versão e sim ao ano, momento em que eu tive esta necessidade.

    Faça o seguinte, tente no nó primário criar este índice utilizando outro nome!!!

    Em algum caso, teremos que alterar os papéis entre os nós para tentar realizar a criação.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Friday, March 20, 2020 4:39 PM
    Moderator
  • Eu consigo criar o index com outro nome, porém não entendo porque ele pede para criar o index se ele está lá.

    Não encontrei nenhuma diferença entre o conteúdo das tabelas que o script utiliza para dizer que indexes devem ser criados.

    Não tentei realizar a virada para isso.


    Guisal

    Wednesday, March 25, 2020 5:32 PM
  • Eu consigo criar o index com outro nome, porém não entendo porque ele pede para criar o index se ele está lá.

    Não encontrei nenhuma diferença entre o conteúdo das tabelas que o script utiliza para dizer que indexes devem ser criados.

    Não tentei realizar a virada para isso.


    Guisal

    GuiSal,

    Quem esta pedindo é o Missing Index, recurso adicionado a partir do SQL Server 2008 como uma forma de tentar nos ajudar e implementar recursos relacionados a índices que podem estar ausentes ou faltantes quando determinadas querys são processadas, nem sempre este recurso esta correto.

    Ressalto isso através de um curso sobre Estatísticas realizado pelo meu amigo MVP Fabiano Amorin, o qual justamente destaca em alguns casos uma ligeira confusão para identificação e utilização de missing index no SQL Server, procure no Youtube sobre este curso.

    Outro detalhe, o nome do índice normalmente é um sugestão dada por este recursos, nada impede de você fazer uso de outro nome.

    Mas como eu orientei a criação de um índice com outro nome deu certo!!!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    Wednesday, March 25, 2020 8:45 PM
    Moderator