Partilhar via


Usar o SQL Server Profiler para criar um conjunto de rastreamento SQL

Aplica-se a:SQL Server

No SQL Server, você pode explorar os recursos de rastreamento do lado do servidor do SQL Server Profiler para exportar uma definição de rastreamento que pode ser usada para criar um conjunto de coleta que usa o tipo de coletor Rastreamento SQL Genérico. Este processo divide-se em duas partes:

  1. Crie e exporte um rastreamento do SQL Server Profiler.
  2. Crie um script para um novo conjunto de coleções com base em um rastreamento exportado.

O cenário para os procedimentos a seguir envolve a coleta de dados sobre qualquer procedimento armazenado que exija 80 milissegundos ou mais para ser concluído. Para concluir estes procedimentos, deverá ser capaz de:

  • Use o SQL Server Profiler para criar e configurar um rastreamento.
  • Use o SQL Server Management Studio para abrir, editar e executar uma consulta.

Criar e exportar um rastreamento do SQL Server Profiler

  1. No SQL Server Management Studio, abra o SQL Server Profiler. (No menu Ferramentas, selecione SQL Server Profiler.)

  2. Na caixa de diálogo Conectar ao Servidor, selecione Cancelar.

  3. Para esse cenário, verifique se os valores de duração estão configurados para exibição em milissegundos (o padrão). Para fazer isso, execute as seguintes etapas:

    1. No menu Ferramentas, selecione Opções .

    2. Na área Opções de Exibição, verifique se a caixa de seleção Mostrar valores na coluna Duração em microssegundos está desmarcada.

    3. Selecione OK para fechar a caixa de diálogo Opções Gerais .

  4. No menu Arquivo, selecione Novode Rastreamento .

  5. Na caixa de diálogo Ligar ao Servidor, selecione o servidor ao qual pretende ligar e, em seguida, selecione Ligar.

    A caixa de diálogo Propriedades de Rastreamento é exibida.

  6. Na guia Geral , faça o seguinte:

    1. Na caixa Nome do rastreamento, digite o nome que você deseja usar para o rastreamento. Neste exemplo, o nome do rastreamento é SPgt140.

    2. Na lista Usar o modelo, selecione o modelo a ser usado para o rastreamento. Para este exemplo, selecione TSQL_SPs.

  7. Na guia Seleção de Eventos, faça o seguinte:

    1. Identifique os eventos a serem usados para o rastreamento. Neste exemplo, desmarque todas as caixas de seleção na coluna Eventos , exceto ExistingConnection e SP:Completed.

    2. No canto inferior direito, selecione a caixa de seleção Mostrar todas as colunas .

    3. Selecione a linha SP:Completed .

    4. Desloque-se ao longo da linha até à coluna Duração e, em seguida, selecione a caixa de verificação Duração.

  8. No canto inferior direito, selecione Filtros de Coluna para abrir a caixa de diálogo Editar Filtro. Na caixa de diálogo Editar Filtro, faça o seguinte:

    1. Na lista de filtros, selecione Duração.

    2. Na janela do operador booleano, expanda o nó Maior ou igual, digite 80 como o valor e selecione OK.

  9. Selecione Executar para iniciar o rastreamento.

  10. Na barra de ferramentas, selecione Parar Rastreamento Selecionado ou Pausar Rastreamento Selecionado.

  11. No menu Arquivo, aponte para Exportar, aponte para Definição de Rastreamento de Scripte selecione Para Conjunto de Coleta de Rastreamento SQL.

  12. Na caixa de diálogo Salvar como, digite o nome que deseja usar para a definição de rastreamento na caixa Nome do arquivo e salve-o no local desejado. Neste exemplo, o nome do arquivo é o mesmo que o nome do rastreamento (SPgt140).

  13. Selecione OK quando receber uma mensagem informando que o arquivo foi salvo com êxito e feche o SQL Server Profiler.

Crie um novo conjunto de coleções a partir de um rastreamento do SQL Server Profiler

  1. No SQL Server Management Studio, no menu Arquivo, aponte para Abrir, e selecione Arquivo.

  2. Na caixa de diálogo Abrir Ficheiro, localize e abra o ficheiro que criou no procedimento anterior (SPgt140).

    As informações de rastreamento salvas são abertas em uma janela Consulta e mescladas em um script que pode ser executado para criar o novo conjunto de coleções.

  3. Percorra o script e faça as seguintes substituições, que são anotadas no texto do comentário do script:

    • Substitua SQLTrace Collection set Name Here pelo nome que você deseja usar para o conjunto de coleção. Neste exemplo, nomeie o conjunto de coleções SPROC_CollectionSet.

    • Substitua SQLTrace Collection Item Name Here pelo nome que você deseja usar para o item de coleção. Neste exemplo, nomeie o item de coleção SPROC_Collection_Item.

  4. Selecione Executar para executar a consulta e criar o conjunto de coleções.

  5. No Pesquisador de Objetos, verifique se o conjunto de coleta foi criado. Para fazer isso, execute as seguintes etapas:

    1. Clique com o botão direito do rato Managemente, em seguida, selecione Atualizar.

    2. Expanda Managemente, em seguida, expanda Data Collection.

    O conjunto de coleta SPROC_CollectionSet aparece no mesmo nível que o nó Conjuntos de Coleta de Dados do Sistema. Por padrão, o conjunto de coleta está desativado.

  6. Use o Pesquisador de Objetos para editar as propriedades do SPROC_CollectionSet, como o modo de coleta e a agenda de carregamento. Siga os mesmos procedimentos que você faria para os conjuntos de coleta de Dados do Sistema fornecidos com o coletor de dados.

Exemplos

O exemplo de código a seguir é o script final resultante das etapas documentadas nos procedimentos anteriores.

/*************************************************************/
-- SQL Trace collection set generated from SQL Server Profiler
-- Date: 11/19/2022  12:55:31 AM
/*************************************************************/
USE msdb;
GO

BEGIN TRANSACTION

BEGIN TRY
    -- Define collection set
    -- ***
    -- *** Replace 'SqlTrace Collection Set Name Here' in the
    -- *** following script with the name you want
    -- *** to use for the collection set.
    -- ***
    DECLARE @collection_set_id INT;

    EXEC [dbo].[sp_syscollector_create_collection_set] @name = N'SPROC_CollectionSet',
        @schedule_name = N'CollectorSchedule_Every_15min',
        @collection_mode = 0, -- cached mode needed for Trace collections
        @logging_level = 0, -- minimum logging
        @days_until_expiration = 5,
        @description = N'Collection set generated by SQL Server Profiler',
        @collection_set_id = @collection_set_id OUTPUT;

    SELECT @collection_set_id;

    -- Define input and output variables for the collection item.
    DECLARE @trace_definition XML;
    DECLARE @collection_item_id INT;

    -- Define the trace parameters as an XML variable
    SELECT @trace_definition = convert(XML, N'<ns:SqlTraceCollector xmlns:ns"DataCollectorType" use_default="0">
<Events>
  <EventType name="Sessions">
    <Event id="17" name="ExistingConnection" columnslist="1,2,14,26,3,35,12" />
  </EventType>
  <EventType name="Stored Procedures">
    <Event id="43" name="SP:Completed" columnslist="1,2,26,34,3,35,12,13,14,22" />
  </EventType>
</Events>
<Filters>
  <Filter columnid="13" columnname="Duration" logical_operator="AND" comparison_operator="GE" value="80000L" />
</Filters>
</ns:SqlTraceCollector>
');

    -- Retrieve the collector type GUID for the trace collector type.
    DECLARE @collector_type_GUID UNIQUEIDENTIFIER;

    SELECT @collector_type_GUID = collector_type_uid
    FROM [dbo].[syscollector_collector_types]
    WHERE name = N'Generic SQL Trace Collector Type';

    -- Create the trace collection item.
    -- ***
    -- *** Replace 'SqlTrace Collection Item Name Here' in
    -- *** the following script with the name you want to
    -- *** use for the collection item.
    -- ***
    EXEC [dbo].[sp_syscollector_create_collection_item] @collection_set_id = @collection_set_id,
        @collector_type_uid = @collector_type_GUID,
        @name = N'SPROC_Collection_Item',
        @frequency = 900, -- specified the frequency for checking to see if trace is still running
        @parameters = @trace_definition,
        @collection_item_id = @collection_item_id OUTPUT;

    SELECT @collection_item_id;

    COMMIT TRANSACTION;
END TRY

BEGIN CATCH
    ROLLBACK TRANSACTION;

    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;
    DECLARE @ErrorNumber INT;
    DECLARE @ErrorLine INT;
    DECLARE @ErrorProcedure NVARCHAR(200);

    SELECT @ErrorLine = ERROR_LINE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE(),
        @ErrorNumber = ERROR_NUMBER(),
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');

    RAISERROR (
            14684,
            @ErrorSeverity,
            1,
            @ErrorNumber,
            @ErrorSeverity,
            @ErrorState,
            @ErrorProcedure,
            @ErrorLine,
            @ErrorMessage
            );
END CATCH;
GO