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 / 108332
Accepted
sebeid
sebeid
Asked: 2015-07-29 06:19:15 +0800 CST2015-07-29 06:19:15 +0800 CST 2015-07-29 06:19:15 +0800 CST

Índice perdido durante o Orientador de Otimização do Mecanismo de Banco de Dados

  • 772

Eu estava analisando uma consulta usando o "Database Engine Tuning Advisor". Durante esse tempo, o banco de dados começou a receber bloqueios, consultas de execução longa e acabou reiniciando a instância. Quando verifiquei depois disso, descobri que alguns drop indexcomandos foram executados.

drop index [dbo].[Profile].[_dta_index_Profile_7_1563152614__K15_K1]

Por quê isso aconteceu? A consulta que eu estava ajustando não estava na tabela de perfil! Como posso verificar se esse índice já estava no sistema antes ou foi criado durante a análise?

sql-server index
  • 1 1 respostas
  • 1024 Views

1 respostas

  • Voted
  1. Best Answer
    LowlyDBA - John M
    2015-07-29T06:30:23+08:002015-07-29T06:30:23+08:00

    Os índices que foram criados e descartados pelo DTA eram provavelmente índices hipotéticos - aqueles que o DTA cria durante a execução para executar sua análise e deve (mas nem sempre) excluir uma vez feito.

    Esses índices hipotéticos podem ser criados mesmo se você não estiver procurando ajustar essa tabela específica! Eu recomendo que você consulte alguns dos DMVs do sistema diretamente para descobrir os índices ausentes. Isso evita o comportamento irritante do DTA e fornece alguns insights mais granulares sobre seus problemas de índice.

    Você pode usar a consulta abaixo do SQL Server Central para detectar quaisquer índices hipotéticos restantes do DTA que devem ser removidos.

    /*
          -----------------------------------------------------------------
          Hypothetical Indexes
          -----------------------------------------------------------------
    
          For more SQL resources, check out SQLServer365.blogspot.com
    
          -----------------------------------------------------------------
    
          You may alter this code for your own purposes.
          You may republish altered code as long as you give due credit.
          You must obtain prior permission before blogging this code.
    
          THIS CODE AND INFORMATION ARE PROVIDED "AS IS"
    
          -----------------------------------------------------------------
    */
    -- Set database context
    USE master;
    GO
    
    -- Declare variables
    DECLARE@EmailProfile VARCHAR(255)
    DECLARE@EmailRecipient VARCHAR(255)
    DECLARE@EmailSubject VARCHAR(255)
    
    -- Set variables
    SET@EmailProfile = 'DBA'
    SET@EmailRecipient = '[email protected]'
    SET@EmailSubject = 'ALERT - Hypothetical Indexes found on ' + @@SERVERNAME
    
    -- Drop temporary table if exists
    IF OBJECT_ID('tempDB.dbo.#HypotheticalIndexDropScript') IS NOT NULL
        DROP TABLE #HypotheticalIndexDropScript;
    
    -- Create Temporary Table
    CREATE TABLE #HypotheticalIndexDropScript
        (
          DatabaseName VARCHAR(255) ,
          HypotheticalIndexDropScript VARCHAR(4000)
        );
    
    INSERT  INTO#HypotheticalIndexDropScript
            EXEC sp_msforeachdb 'USE [?]; SELECT  DB_NAME(DB_ID()), ''USE '' + ''['' + DB_NAME(DB_ID()) + ''];'' + '' IF  EXISTS (SELECT 1 FROM sys.indexes  AS i WHERE i.[object_id] = '' + ''object_id('' + + '''''''' + ''['' + SCHEMA_NAME(o.[schema_id]) + ''].'' + ''['' +  OBJECT_NAME(i.[object_id]) + '']'' + '''''''' + '')'' + '' AND name = '' + '''''''' + i.NAME + '''''''' + '') ''    
           + '' DROP INDEX '' + ''['' + i.name + '']'' + '' ON '' + ''['' + SCHEMA_NAME(o.[schema_id]) + ''].'' + ''['' + OBJECT_NAME(o.[object_id]) + ''];'' AS HypotheticalIndexDropScript
    FROM    sys.indexes i
            INNER JOIN sys.objects o ON o.[object_id] = i.[object_id]
    WHERE is_hypothetical = 1'
    
    -- Check for hypothetical indexes
    IF EXISTS ( SELECT  1
                FROM    #HypotheticalIndexDropScript )
        BEGIN
            DECLARE@tableHTML NVARCHAR(MAX);
            SET@tableHTML = N'<style type="text/css">'
                + N'.h1 {font-family: Arial, verdana;font-size:16px;border:0px;background-color:white;} '
                + N'.h2 {font-family: Arial, verdana;font-size:12px;border:0px;background-color:white;} '
                + N'body {font-family: Arial, verdana;} '
                + N'table{font-size:12px; border-collapse:collapse;border:1px solid black; padding:3px;} '
                + N'td{background-color:#F1F1F1; border:1px solid black; padding:3px;} '
                + N'th{background-color:#99CCFF; border:1px solid black; padding:3px;}'
                + N'</style>' + N'<table border="1">' + N'<tr>'
                + N'<th>DatabaseName</th>'
                + N'<th>HypotheticalIndexDropScript</th>' + N'</tr>'
                + CAST(( SELECT td =DatabaseName ,
                                '' ,
                                td = HypotheticalIndexDropScript ,
                                ''
                         FROM   #HypotheticalIndexDropScript
                       FOR
                         XMLPATH('tr') ,
                             TYPE
                       ) AS NVARCHAR(MAX)) + N'</table>';
    
                -- Email results
            EXECmsdb.dbo.sp_send_dbmail @profile_name = @EmailProfile,
                @recipients = @EmailRecipient, @subject = @EmailSubject,
                @body =@tableHTML, @body_format = 'HTML';
        END
        GO
    
    • 8

relate perguntas

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

  • Quanto "Padding" coloco em meus índices?

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

  • O que significa "índice" em RDBMSs? [fechado]

  • Como criar um índice condicional no MySQL?

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