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 / 206863
Accepted
Razvan Zoitanu
Razvan Zoitanu
Asked: 2018-05-17 01:51:08 +0800 CST2018-05-17 01:51:08 +0800 CST 2018-05-17 01:51:08 +0800 CST

Qual é a ferramenta certa para processar arquivos .xel grandes (logs de eventos estendidos do SQL Server)?

  • 772

Meu objetivo é auditar todas as consultas em uma instância, quem as está executando e de onde, quantas leituras, para consolidar/migrar em outra instância.

Descobri que a melhor maneira é através de eventos estendidos para arquivos .xel, ao longo de 2 semanas, copiá-los e analisá-los no meu desktop bem especificado. Configure a captura com o número mínimo de detalhes (campos), então realmente não pode torná-la menor que isso - aproximadamente 12 GB em 12 arquivos. Usou "Mesclar arquivos de eventos estendidos" no SSMS para carregar os arquivos .xel e processar conforme detalhado em https://learn.microsoft.com/en-us/sql/relational-databases/extended-events/advanced-viewing-of- target-data-from-extended-events-in-sql-server?view=sql-server-2017

Esta é realmente a melhor maneira de fazê-lo? Existe uma ferramenta melhor para carregar os arquivos? É muito lento com o SSMS 17.7 - exemplo: com apenas 4 filtros até agora (antes de entrar em agrupamento e agregados), levou mais de 12h para processar 50% dos logs.

sql-server ssms
  • 2 2 respostas
  • 5872 Views

2 respostas

  • Voted
  1. Best Answer
    Dan Guzman
    2018-05-17T04:28:42+08:002018-05-17T04:28:42+08:00

    Para arquivos de rastreamento XE grandes, uso ferramentas personalizadas com QueryableXEventData . Descobri que isso é muito mais rápido do que a análise XML no T-SQL.

    Abaixo está um PowerShell básico que importa campos e ações selecionados de um rpc_completedrastreamento de evento para uma tabela em lotes de 10 mil. Você precisará incluir um Add-Typecomando para os assemblies Microsoft.SqlServer.XE.Core.dlle Microsoft.SqlServer.XEvent.Linq.dll, que estará na pasta de instalação do SQL Server com o local exato variando dependendo da versão do SQL e do local de instalação escolhido.

    $SharedPath = "C:\Program Files\Microsoft SQL Server\140\Shared";
    $SqlInstanceName = "";
    
    $xeCore = [System.IO.Path]::Combine($SharedPath, "Microsoft.SqlServer.XE.Core.dll");
    $xeLinq = [System.IO.Path]::Combine($SharedPath, "Microsoft.SqlServer.XEvent.Linq.dll");
    Add-Type -Path $xeLinq;
    
    if( [System.IO.File]::Exists($xeCore) )
    {
        Add-Type -Path $xeCore;
    }
    

    Observe que há coleções separadas de Campos e Ações na PublishedEventclasse, portanto, você precisará extrair valores da conexão apropriada.

    # create target table
    $connectionString = "Data Source=.;Initial Catalog=tempdb;Integrated Security=SSPI"
    $connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
    $command = New-Object System.Data.SqlClient.SqlCommand(@"
    CREATE TABLE dbo.rpc_completed(
          event_name sysname
        , timestamp datetimeoffset
        , statement nvarchar(MAX)
        , username nvarchar(256)
    );
    "@, $connection)
    $connection.Open()
    [void]$command.ExecuteNonQuery()
    $connection.Close()
    
    # data table for SqlBulkCopy
    $dt = New-Object System.Data.DataTable
    [void]$dt.Columns.Add("event_name", [System.Type]::GetType("System.String"))
    $dt.Columns["event_name"].MaxLength = 256
    [void]$dt.Columns.Add("timestamp", [System.Type]::GetType("System.DateTimeOffset"))
    [void]$dt.Columns.Add("statement", [System.Type]::GetType("System.String"))
    [void]$dt.Columns.Add("username", [System.Type]::GetType("System.String"))
    $dt.Columns["username"].MaxLength = 128
    $dt.Columns["statement"].MaxLength = -1
    
    $events = new-object Microsoft.SqlServer.XEvent.Linq.QueryableXEventData("D:\TraceFiles\Log\rpc_completed*.xel")
    
    # import XE events from file(s)
    $bcp = New-Object System.Data.SqlClient.SqlBulkCopy($connectionString)
    $bcp.DestinationTableName = "dbo.rpc_completed"
    $eventCount = 0
    foreach($event in $events) {
        $eventCount += 1
        $row = $dt.NewRow()
        $dt.Rows.Add($row)
        $row["event_name"] = $event.Name
        $row["timestamp"] = $event.Timestamp
        $row["statement"] = $event.Fields["statement"].Value
        # username is a collected action
        $row["username"] = $event.Actions["username"].Value
        if($eventCount % 10000 -eq 0) {
            $bcp.WriteToServer($dt)
            $dt.Rows.Clear()
        }
    }
    $bcp.WriteToServer($dt) # write last batch
    Write-Host "$eventCount records imported"
    
    • 8
  2. Tomer - MSFT
    2019-06-05T00:45:55+08:002019-06-05T00:45:55+08:00

    A maneira mais rápida de ler e analisar XEvents atualmente é usando a nova biblioteca XELite da Microsoft. Você pode encontrá-lo aqui: XELite no NuGet.org Se você é um cara do PowerShell, pode usar o módulo SQLServer atualizado que é baseado na biblioteca XELite. Você pode encontrá-lo na galeria: SQLServer .

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

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

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