Menggunakan SQL Server Profiler untuk membuat kumpulan kumpulan SQL Trace

Berlaku untuk:SQL Server

Di SQL Server Anda dapat mengeksploitasi kemampuan pelacakan sisi server SQL Server Profiler untuk mengekspor definisi pelacakan yang dapat Anda gunakan untuk membuat kumpulan koleksi yang menggunakan jenis pengumpul Jejak SQL Generik. Ada dua bagian untuk proses ini:

  1. Membuat dan mengekspor jejak SQL Server Profiler.
  2. Buat skrip kumpulan koleksi baru berdasarkan jejak yang diekspor.

Skenario untuk prosedur berikut melibatkan pengumpulan data tentang prosedur tersimpan yang memerlukan 80 milidetik atau lebih lama untuk diselesaikan. Untuk menyelesaikan prosedur ini, Anda harus dapat:

  • Gunakan SQL Server Profiler untuk membuat dan mengonfigurasi jejak.
  • Gunakan SQL Server Management Studio untuk membuka, mengedit, dan menjalankan kueri.

Membuat dan mengekspor jejak SQL Server Profiler

  1. Di SQL Server Management Studio, buka SQL Server Profiler. (Pada Menu Alat , pilih SQL Server Profiler.)

  2. Dalam kotak dialog Koneksi ke Server, pilih Batal.

  3. Untuk skenario ini, pastikan bahwa nilai durasi dikonfigurasi untuk ditampilkan dalam milidetik (default). Untuk melakukan ini, ikuti langkah-langkah berikut:

    1. Pada menu Alat, pilih Opsi.

    2. Di area Opsi Tampilan, pastikan bahwa kotak centang Perlihatkan nilai dalam kolom Durasi dalam mikro detik dikosongkan.

    3. Pilih OK untuk menutup kotak dialog Opsi Umum.

  4. Pada menu File , pilih Jejak Baru.

  5. Dalam kotak dialog Koneksi ke Server, pilih server yang ingin Anda sambungkan, lalu pilih Koneksi.

    Kotak dialog Properti Pelacakan muncul.

  6. Pada tab Umum , lakukan hal berikut:

    1. Dalam kotak Nama pelacakan, ketik nama yang ingin Anda gunakan untuk pelacakan. Untuk contoh ini, nama pelacakannya adalah SPgt140.

    2. Di daftar Gunakan templat, pilih templat yang akan digunakan untuk pelacakan. Untuk contoh ini, pilih TSQL_SPs.

  7. Pada tab Pemilihan Acara, lakukan hal berikut:

    1. Identifikasi peristiwa yang akan digunakan untuk pelacakan. Untuk contoh ini, kosongkan semua kotak centang di kolom Peristiwa, kecuali untuk Yang Ada Koneksi ion dan SP:Selesai.

    2. Di sudut kanan bawah, pilih kotak centang Perlihatkan semua kolom .

    3. Pilih baris SP:Completed.

    4. Gulir di seluruh baris ke kolom Durasi , lalu pilih kotak centang Durasi .

  8. Di sudut kanan bawah, pilih Filter Kolom untuk membuka kotak dialog Edit Filter . Dalam kotak dialog Edit Filter , lakukan hal berikut ini:

    1. Di daftar filter, pilih Durasi.

    2. Di jendela operator Boolean, perluas simpul Yang lebih besar dari atau sama dengan , ketik 80 sebagai nilai, lalu pilih OK.

  9. Pilih Jalankan untuk memulai jejak.

  10. Pada toolbar, pilih Hentikan Pelacakan yang Dipilih atau Jeda Pelacakan yang Dipilih.

  11. Pada menu File, arahkan ke Ekspor, arahkan ke Definisi Pelacakan Skrip, lalu pilih Untuk Kumpulan Kumpulan Jejak SQL.

  12. Dalam kotak dialog Simpan Sebagai , ketik nama yang ingin Anda gunakan untuk definisi pelacakan dalam kotak Nama file, lalu simpan di lokasi yang Anda inginkan. Untuk contoh ini, nama file sama dengan nama pelacakan (SPgt140).

  13. Pilih OK saat Anda menerima pesan bahwa file berhasil disimpan, lalu tutup SQL Server Profiler.

Membuat skrip kumpulan koleksi baru dari jejak Profiler SQL Server

  1. Di SQL Server Management Studio, pada menu File , arahkan ke Buka, lalu pilih File.

  2. Dalam kotak dialog Buka File , temukan lalu buka file yang Anda buat di prosedur sebelumnya (SPgt140).

    Informasi pelacakan yang Anda simpan dibuka di jendela Kueri dan digabungkan ke dalam skrip yang bisa Anda jalankan untuk membuat kumpulan koleksi baru.

  3. Gulir melalui skrip dan buat penggantian berikut, yang dicatat dalam teks komentar skrip:

    • Ganti Nama Kumpulan Koleksi SQLTrace Di Sini dengan nama yang ingin Anda gunakan untuk kumpulan koleksi. Untuk contoh ini, beri nama kumpulan SPROC_CollectionSet.

    • Ganti Nama Item Koleksi SQLTrace Di Sini dengan nama yang ingin Anda gunakan untuk item koleksi. Untuk contoh ini, beri nama item koleksi SPROC_Collection_Item.

  4. Pilih Jalankan untuk menjalankan kueri dan untuk membuat kumpulan koleksi.

  5. Di Object Explorer, verifikasi bahwa kumpulan telah dibuat. Untuk melakukan ini, ikuti langkah-langkah berikut:

    1. Klik kanan Manajemen, lalu pilih Refresh.

    2. Perluas Manajemen, lalu perluas Pengumpulan Data.

    Kumpulan kumpulan SPROC_CollectionSet muncul pada tingkat yang sama dengan simpul Kumpulan Kumpulan Data Sistem. Secara default, kumpulan koleksi dinonaktifkan.

  6. Gunakan Object Explorer untuk mengedit properti SPROC_CollectionSet, seperti mode pengumpulan dan jadwal pengunggahan. Ikuti prosedur yang sama dengan yang Anda lakukan untuk kumpulan pengumpulan Data Sistem yang disediakan dengan pengumpul data.

Contoh

Sampel kode berikut adalah skrip akhir yang dihasilkan dari langkah-langkah yang didokumenkan dalam prosedur sebelumnya.

/*************************************************************/
-- 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