.xel ファイルを取り込み、dba-tools モジュールを使用してカスタム オブジェクトに変換し、それらを単一行の JSON に変換してファイルにエクスポートし、どこにでも送信するという小さなプロセスがあります。ここ:
$path = 'C:\temp\big_xe_file.xel'
#Read in file
$xes = Read-DbaXEFile -Path $path
#Output Variable
$file = ""
foreach ($xe in $xes) {
#format date column
$xe.timestamp = ($xe.timestamp.DateTime).ToString("yyyy-MM-ddThh:mm:ss.ffff")
# convert to JSON and change escaped unicode characters back
$xe = (($xe | ConvertTo-Json -compress)) | % { #| % { [System.Text.RegularExpressions.Regex]::Unescape($_) }
[Regex]::Replace($_,
"\\u(?<Value>[a-zA-Z0-9]{4})", {
param($m) ([char]([int]::Parse($m.Groups['Value'].Value,
[System.Globalization.NumberStyles]::HexNumber))).ToString() } )}
#Write line to file
Add-Content -Value "$($xe)`n" -Path 'C:\temp\myevents.json' -Encoding utf8 -NoNewline
}
これは法案に適合し、まさに私が必要とすることを行います。中間の厄介な正規表現は、json に変換すると、すべての Unicode 文字を簡単にエスケープし、正規表現が魔法のように、私たちが知っている大好きな文字に戻すためです。
ただし、すべてが少し遅すぎます。大量の .xel ファイル (通常は 500 MB のサイズ) を生成します。トレースが書き込まれてから取り込まれるまでの遅延を短くしたいと考えています。現状では、この方法でファイルを連続して処理するには、最大 35 分かかります。遅れをとった場合、遅延が大きくなる可能性がありますが、その速度では可能性が高いようです.
私はすでにこれをかなりスピードアップしました。私が持っている正規表現コードの代わりに [System.Text.RegularExpressions.Regex]::Unescape を使用してみましたが、わずかに高速であり、とにかく必要な正しい書式設定を提供しません。私の次のステップは、ファイルを小さな断片に分割し、それらを並行して処理することですが、これは CPU の負荷が大幅に高くなるため、可能であれば避けたいと考えています。
これを最適化するための助けは大歓迎です!