āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āφāĻŦāĻžāϰ āĻŦā§āϝāĻŦāĻ¸ā§āĻĨāĻžāϰ āĻĨāĻŋāĻŽ āĻ…āĻŦā§āϝāĻžāĻšāϤ āϰāĻžāĻ–āĻž āϜāĻŋāϰ⧋ āϟāĻžāϚ PROD RDS āĻāϰ āĻ…āϧ⧀āύ⧇. āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇āϰ āĻĄāĻŋāĻŦāĻŋāĻāϗ⧁āϞāĻŋ āϏāϰāĻžāϏāϰāĻŋ PROD āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻ‚āϝ⧋āĻ— āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻŦ⧇ āύāĻž, āϤāĻŦ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāĻŦ⧇⧎ āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ āĻāĻ•āϟāĻŋ āϏ⧀āĻŽāĻŋāϤ āϏ⧇āϟ āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϚāĻžāĻ•āϰāĻŋāĨ¤ āĻĄāĻŋāĻŦāĻŋāĻ āĻ•āĻžāϜ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ āĻĒāϰ⧇ āĻāχ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āϏāĻŽāĻžāĻĒā§āϤāĻŋāϰ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āϏāĻš āĻāĻ•āϟāĻŋ āϚāĻŋāĻ āĻŋ āĻĒāĻžāϝāĻŧāĨ¤ āφāϏ⧁āύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āĻāχ āĻĢāϞāĻžāĻĢāϞāϗ⧁āϞāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āωāĻĒāĻžāϝāĻŧāϗ⧁āϞāĻŋ āĻĻ⧇āĻ–āĻŋ⧎

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āϏāĻžāϧāĻžāϰāĻŖ āĻĒāĻžāĻ ā§āϝ

āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϤ⧁āĻšā§āĻ› āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•āĨ¤ āĻĒā§āϰāĻĨāĻŽ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻāϤāχ āϏāĻšāϜ āϝ⧇ āĻāĻ–āĻžāύ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻžāϰ āĻŽāϤ⧋ āĻ•āĻŋāϛ⧁āχ āύ⧇āχ (āϞ⧇āĻ–āĻ• āĻāϰ āĻĒāϰ⧇ āĻĢā§āϰāĻŋāĻ¸ā§āϟāĻžāχāϞ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ):

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

sqlcmd āĻ•āĻŋāϛ⧁ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āϤāĻž āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āφāĻĻāĻ°ā§āĻļ:

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āϝāĻžāχāĻšā§‹āĻ•, āϭ⧁āϞ⧇ āϝāĻžāĻŦ⧇āύ āύāĻž āϝ⧇ RDS āĻŦā§āϝāĻžāĻ•āφāĻĒ/āϰāĻŋāĻ¸ā§āĻŸā§‹āϰ⧇āϰ āĻ…āϧ⧀āύ⧇ āĻ…ā§āϝāĻžāϏāĻŋāĻ™ā§āĻ•ā§āϰ⧋āύāĻžāϏ, āϤāĻžāχ āφāĻĒāύāĻžāϕ⧇ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇:

declare @rds table
  (id int, task_type varchar(128), database_name sysname, pct int, duration int, 
   lifecycle varchar(128), taskinfo varchar(max) null, 
   upd datetime, cre datetime,
   s3 varchar(256), ovr int, KMS varchar(256) null)
waitfor delay '00:00:20' 
insert into @rds exec msdb.dbo.rds_task_status @db_name='{db}'
select @xid=max(id) from @rds

again:
waitfor delay '00:00:02'
delete from @rds
insert into @rds exec msdb.dbo.rds_task_status @db_name='{db}' 
# {db} substituted with db name by powershell
select @stat=lifecycle,@info=taskinfo from @rds where id=@xid
if @stat not in ('ERROR','SUCCESS','CANCELLED') goto again

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻĒāĻĻā§āϧāϤāĻŋ, CSV

āĻāĻ–āĻžāύ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āϖ⧁āĻŦ āϏāĻšāϜ:

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āϝāĻžāχāĻšā§‹āĻ•, āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āϤāĻ–āύāχ āĻ•āĻžāϜ āĻ•āϰ⧇ āϝāĻ–āύ CSV āϤ⧇ āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻĄā§‡āϟāĻž "āϏāĻšāϜ" āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāχāĻ­āĻžāĻŦ⧇ TOP N CPU āύāĻŋāĻŦāĻŋāĻĄāĻŧ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻĢ⧇āϰāϤ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇āύ, āϤāĻžāĻšāϞ⧇ āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀ āĻŸā§‡āĻ•ā§āϏāĻŸā§‡ āϝ⧇āϕ⧋āύ āĻ…āĻ•ā§āώāϰ - āĻ•āĻŽāĻž, āωāĻĻā§āϧ⧃āϤāĻŋ āĻāĻŦāĻ‚ āĻāĻŽāύāĻ•āĻŋ āϞāĻžāχāύ āĻŦāĻŋāϰāϤāĻŋ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻāχ āĻ•āĻžāϰāϪ⧇ CSV "āĻ•āϰ⧋āĻĄ" āĻšāĻŦ⧇āĨ¤ āĻ…āϤāĻāĻŦ, āφāĻŽāĻžāĻĻ⧇āϰ āφāϰāĻ“ āϜāϟāĻŋāϞ āĻ•āĻŋāϛ⧁ āĻĻāϰāĻ•āĻžāϰāĨ¤

HTML āĻ āϏ⧁āĻ¨ā§āĻĻāϰ āϚāĻŋāĻšā§āύ

āφāĻŽāĻŋ āĻāĻ–āύāχ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āϕ⧋āĻĄ āĻ¸ā§āύāĻŋāĻĒ⧇āϟ āĻĻ⧇āĻŦ

$Header = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #6495ED;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@
  
$Result = invoke-Sqlcmd -ConnectionString $jstr -Query "select * from DbInv" `
  | Select-Object -Property * -ExcludeProperty "ItemArray", "RowError", "RowState", "Table", "HasErrors"
if ($Result -eq $null) { $cnt = 0; }
elseif ($Result.getType().FullName -eq "System.Management.Automation.PSCustomObject") { $cnt = 1; }
else { $cnt = $Result.Rows.Count; } 
if ($cnt -gt 0) {
  $body = "<h2>My table</h2>"
  $Result | ConvertTo-HTML -Title "Rows" -Head $header -body $body `
    | Out-File "res.log" -Append -Encoding UTF8
  } else {
    "<h3>No data</h3>" | Out-File "res.log" -Append -Encoding UTF8
  }

āϝāĻžāχāĻšā§‹āĻ•, System.Management.Automation.PSCustomObject-āĻāϰ āϏāĻžāĻĨ⧇ āϞāĻžāχāύ⧇ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāύ, āĻāϟāĻŋ āϜāĻžāĻĻ⧁āĻ•āϰ; āϝāĻĻāĻŋ āĻ—ā§āϰāĻŋāĻĄā§‡ āĻ āĻŋāĻ• āĻāĻ•āϟāĻŋ āϞāĻžāχāύ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āĻ•āĻŋāϛ⧁ āϏāĻŽāĻ¸ā§āϝāĻž āĻĻ⧇āĻ–āĻž āĻĻ⧇āϝāĻŧāĨ¤ āĻ…āύ⧇āĻ• āύāĻž āĻŦ⧁āĻā§‡āχ āϏāĻŽāĻžāϧāĻžāύāϟāĻž āχāĻ¨ā§āϟāĻžāϰāύ⧇āϟ āĻĨ⧇āϕ⧇ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āĻāχ āĻŽāϤ āĻ•āĻŋāϛ⧁ āφāωāϟāĻĒ⧁āϟ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻĒāĻžāĻŦ⧇āύ:

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āĻ—ā§āϰāĻžāĻĢ āĻ…āĻ™ā§āĻ•āύ

āϏāϤāĻ°ā§āϕ⧀āĻ•āϰāĻŖ: āύāĻŋāĻšā§‡āϰ āϕ⧋āĻĄ!
āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻŽāϜāĻžāϰ āĻĒā§āϰāĻļā§āύ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻļ⧇āώ āĻāύ āĻŽāĻŋāύāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ CPU āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰ⧇ - āĻĻ⧇āĻ–āĻž āϝāĻžāĻšā§āϛ⧇ āϝ⧇ āĻ•āĻŽāϰ⧇āĻĄ āĻŽā§‡āϜāϰ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻŽāύ⧇ āϰ⧇āϖ⧇āϛ⧇āύ! āĻāχ āĻ•ā§āϝ⧁āχāϜ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ:

DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) 
  FROM sys.dm_os_sys_info WITH (NOLOCK)); 
SELECT TOP(256) 
  DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [EventTime],
  SQLProcessUtilization AS [SQLCPU], 
  100 - SystemIdle - SQLProcessUtilization AS [OtherCPU]
FROM (SELECT record.value('(./Record/@id)[1]', 'int') AS record_id, 
  record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') 
    AS [SystemIdle], 
  record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int') 
    AS [SQLProcessUtilization], [timestamp] 
  FROM (SELECT [timestamp], CONVERT(xml, record) AS [record] 
  FROM sys.dm_os_ring_buffers WITH (NOLOCK)
  WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' 
    AND record LIKE N'%<SystemHealth>%') AS x) AS y 
ORDER BY 1 DESC OPTION (RECOMPILE);

āĻāĻ–āύ, āĻāχ āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ ($Fragment āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ)

<table style="width: 100%"><tbody><tr style="background-color: white; height: 2pt;">
  <td style="width: SQLCPU%; background-color: green;"></td>
  <td style="width: OtherCPU%; background-color: blue;"></td>
  <td style="width: REST%; background-color: #C0C0C0;"></td></tr></tbody>
</table>

āφāĻŽāϰāĻž āϚāĻŋāĻ āĻŋāϰ āĻļāϰ⧀āϰ āĻ—āĻ āύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ:

$Result = invoke-Sqlcmd -ConnectionString $connstr -Query $Query `
  | Select-Object -Property * -ExcludeProperty `
  "ItemArray", "RowError", "RowState", "Table", "HasErrors"
if ($Result.HasRows) {
  foreach($item in $Result) 
    { 
    $time = $itemEventTime 
    $sqlcpu = $item.SQLCPU
    $other = $itemOtherCPU
    $rest = 100 - $sqlcpu - $other
    $f = $fragment -replace "SQLCPU", $sqlcpu
    $f = $f -replace "OtherCPU", $other
    $f = $f -replace "REST", $rest
    $f | Out-File "res.log" -Append -Encoding UTF8
    }

āϝāĻž āĻāχ āĻŽāϤ āĻĻ⧇āĻ–āĻžāĻŦ⧇:

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āĻšā§āϝāĻžāρ, āĻŽāĻšāĻžāĻļāϝāĻŧ āĻŦāĻŋāĻ•ā§ƒāϤāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āϜāĻžāύ⧇āύ! āĻāϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āϝ⧇ āĻāχ āϕ⧋āĻĄāϟāĻŋāϤ⧇ āϰāϝāĻŧ⧇āϛ⧇: āĻĒāĻžāĻ“āϝāĻŧāĻžāϰāĻļ⧇āϞ (āĻāϟāĻŋāϤ⧇ āϞ⧇āĻ–āĻž), SQL, Xquery, HTMLāĨ¤ āĻāϟāĻž āĻĻ⧁āσāϖ⧇āϰ āĻŦāĻŋāώāϝāĻŧ āϝ⧇ āφāĻŽāϰāĻž HTML āĻ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž (āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āϞ⧇āĻ–āĻžāϰ āϜāĻ¨ā§āϝ), āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒāĻžāχāĻĨāύ āϕ⧋āĻĄ āĻĒāĻžāϞāĻŋāĻļ āĻ•āϰāĻž (āϝāĻž āĻāϏāĻ•āĻŋāωāĻāϞ-āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇) āĻĒā§āϰāĻ¤ā§āϝ⧇āϕ⧇āϰ āĻ•āĻ°ā§āϤāĻŦā§āϝ!

āĻāϏāĻ•āĻŋāωāĻāϞ āĻĒā§āϰ⧋āĻĢāĻžāχāϞāĻžāϰ āĻŸā§āϰ⧇āϏ āφāωāϟāĻĒ⧁āϟ

āĻāϟāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āϝ⧇ āĻŸā§‡āĻ•ā§āϏāϟāĻĄā§‡āϟāĻž āĻĢāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ•āĻžāϰāϪ⧇ āĻŸā§āϰ⧇āϏāϟāĻŋ CSV-āϤ⧇ āĻĢāĻŋāϟ āĻšāĻŦ⧇ āύāĻžāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āϚāĻŋāĻ āĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϰ⧇āϏ āĻ—ā§āϰāĻŋāĻĄ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻžāĻ“ āĻ…āĻĻā§āϭ⧁āϤ - āφāĻ•āĻžāϰ⧇āϰ āĻ•āĻžāϰāϪ⧇ āĻāĻŦāĻ‚ āĻāχ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āφāϰāĻ“ āĻŦāĻŋāĻļā§āϞ⧇āώāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āĻ…āϤāĻāĻŦ, āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤāϗ⧁āϞāĻŋ āĻ•āϰāĻŋ: āφāĻŽāϰāĻž āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ•āϞ āĻ•āϰāĻŋ invoke-SqlCmd āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ, āϝāĻžāϰ āĻ—āĻ­ā§€āϰāϤāĻžāϝāĻŧ āĻāϟāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ

select 
  SPID,EventClass,TextData,
  Duration,Reads,Writes,CPU,
  StartTime,EndTime,DatabaseName,HostName,
  ApplicationName,LoginName
   from ::fn_trace_gettable ( @filename , default )  

āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻŦāĻ¨ā§āϧ⧁ āϏāĻžāĻ°ā§āĻ­āĻžāϰ, DBA-āϤ⧇ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏāϝ⧋āĻ—ā§āϝ, āĻāĻ•āϟāĻŋ āĻ–āĻžāϞāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϏāĻš āĻāĻ•āϟāĻŋ Traces āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āφāϛ⧇, āĻāĻ•āϟāĻŋ Model āĻŸā§‡āĻŦāĻŋāϞ, āϝāĻž āϏāĻŽāĻ¸ā§āϤ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϞāĻžāĻŽ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĨ¤ āφāĻŽāϰāĻž āĻāχ āĻŽāĻĄā§‡āϞāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ…āύāĻ¨ā§āϝ āύāĻžāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŸā§‡āĻŦāĻŋāϞ⧇ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰāĻŋ:

$dt = Get-Date -format "yyyyMMdd"
$tm = Get-Date -format "hhmmss"
$tableName = $srv + "_" + $dt + "_" + $tm
$copytab = "select * into " + $tableName + " from Model"
invoke-SqlCmd -ConnectionString $tstr -Query $copytab 

āĻāĻŦāĻ‚ āĻāĻ–āύ āφāĻŽāϰāĻž āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻŸā§āϰ⧇āϏ āϞāĻŋāĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ Data.SqlClient.SqlBulkCopy - āφāĻŽāĻŋ āωāĻĒāϰ⧇ āĻāϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ āφāϗ⧇āχ āĻĻāĻŋāϝāĻŧ⧇āĻ›āĻŋāĨ¤ āĻšā§āϝāĻžāρ, TextData-āĻ āĻ§ā§āϰ⧁āĻŦāĻ• āĻŽāĻžāĻ¸ā§āĻ• āĻ•āϰāĻžāĻ“ āĻ­āĻžāϞ⧋ āĻšāĻŦ⧇:

# mask data
foreach ($Row in $Result)
{ 
  $v = $Row["TextData"]
  $v = $v -replace "'([^']{2,})'", "'str'" -replace "[0-9][0-9]+", '999'
  $Row["TextData"] = $v
}

āφāĻŽāϰāĻž 999 āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ• āĻ…āĻ•ā§āώāϰ⧇āϰ āĻŦ⧇āĻļāĻŋ āϞāĻŽā§āĻŦāĻž āϏāĻ‚āĻ–ā§āϝāĻž āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž 'str' āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ• āĻ…āĻ•ā§āώāϰ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻĻā§€āĻ°ā§āϘ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋāĨ¤ 0 āĻĨ⧇āϕ⧇ 9 āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϏāĻ‚āĻ–ā§āϝāĻžāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻĒāϤāĻžāĻ•āĻž āĻšāĻŋāϏāĻžāĻŦ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āϤāĻžāĻĻ⧇āϰ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāĻŋ āύāĻž, āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻ–āĻžāϞāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻ•-āĻ…āĻ•ā§āώāϰ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ - 'Y', 'N', āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧāĨ¤

āφāϏ⧁āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻœā§€āĻŦāύ⧇ āĻ•āĻŋāϛ⧁ āϰāĻ™ āϝ⧋āĻ— āĻ•āϰāĻŋ (āĻ•āĻ ā§‹āϰāĻ­āĻžāĻŦ⧇ 18+)

āϏāĻžāϰāĻŖāĻŋāϤ⧇, āφāĻĒāύāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻāĻŽāύ āĻ•āĻ•ā§āώāϗ⧁āϞāĻŋāϕ⧇ āĻšāĻžāχāϞāĻžāχāϟ āĻ•āϰāϤ⧇ āϚāĻžāύ āϝāĻžāϰ āϜāĻ¨ā§āϝ āĻŽāύ⧋āϝ⧋āĻ— āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž, āωāĻšā§āϚ āĻ¸ā§āϤāϰ⧇āϰ āĻŦāĻŋāĻ­āĻ•ā§āϤāĻ•āϰāĻŖ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ āĻ…āĻŦāĻļā§āϝāχ, āĻāϟāĻŋ āĻ–āĻžāϞāĻŋ āĻāϏāĻ•āĻŋāωāĻāϞ-āĻ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāχāϚāϟāĻŋāĻāĻŽāĻāϞ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāχāϚāϟāĻŋāĻāĻŽāĻāϞ āĻĢāĻžāχāϞ⧇āϰ āϧāϰāύ āϏ⧇āϟ āĻ•āϰāĻž:

declare @body varchar(max), @chunk varchar(max)
set @body='<font face="Lucida Console" size="3">'
set @body=@body+'<b>Server name: '+@@servername+'</b><br>'
set @body=@body+'<br><br>'
set @body=@body+'<table><tr><th>Job</th><th>Last Run</th><th>Avg Duration, sec</th><th>Last Run, Sec</th><th>Last Status</th></tr>'
print @body

DECLARE tab CURSOR FOR SELECT '<tr><td>'+name+'</td><td>'+
  LastRun+'</td><td>'+
  convert(varchar,AvgDuration)+'</td><td>'+
  convert(varchar,LastDuration)+'</td><td>'+
    case when LastStatus<>'Succeeded' then '<font color="red">' else '' end+
      LastStatus+
      case when LastStatus<>'Succeeded' then '</font>' else '' end+
     +'</td><td>'
  from #j2
OPEN tab;  
FETCH NEXT FROM tab into @chunk
WHILE @@FETCH_STATUS = 0  
BEGIN
  print @chunk
  FETCH NEXT FROM tab into @chunk;  
END  
CLOSE tab;  
DEALLOCATE tab;
print '</table>'

āϕ⧇āύ āφāĻŽāĻŋ āĻāχ āϧāϰāύ⧇āϰ āϕ⧋āĻĄ āϞāĻŋāĻ–āϞāĻžāĻŽ?

āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϰ⧋ āϏ⧁āĻ¨ā§āĻĻāϰ āϏāĻŽāĻžāϧāĻžāύ āφāϛ⧇āĨ¤ āĻ•āύāĻ­āĻžāĻ°ā§āϟ āϟ⧁-āĻāχāϚāϟāĻŋāĻāĻŽāĻāϞ āφāĻŽāĻžāĻĻ⧇āϰ āϕ⧋āώāϗ⧁āϞāĻŋāϕ⧇ āϰāĻ™ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āύāĻž, āϤāĻŦ⧇ āφāĻŽāϰāĻž āϏāĻ¤ā§āϝ⧇āϰ āĻĒāϰ⧇ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻŽāϰāĻž 80-āĻāϰ āĻŦ⧇āĻļāĻŋ āĻāĻŦāĻ‚ 90-āĻāϰ āĻŦ⧇āĻļāĻŋ āĻĢā§āĻ°ā§āϝāĻžāĻ—āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āϞ⧇āϭ⧇āϞ āϏāĻš āϏ⧇āϞ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāϤ⧇ āϚāĻžāχāĨ¤ āφāϏ⧁āύ āĻļ⧈āϞ⧀ āϝ⧋āĻ— āĻ•āϰāĻŋ:

<style>
.SQLmarkup-red { color: red; background-color: yellow; }
.SQLmarkup-yellow { color: black; background-color: #FFFFE0; }
.SQLmarkup-default { color: black; background-color: white; }
</style>

āĻ•ā§āϝ⧋āϝāĻŧāĻžāϰ⧀āϤ⧇āχ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĄāĻžāĻŽāĻŋ āĻ•āϞāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰāĻŦ āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āφāϗ⧇ āĻ•āϞāĻžāĻŽ āφāĻŽāϰāĻž āϰāĻ™ āĻ•āϰāϤ⧇ āϚāĻžāχ. āĻ•āϞāĻžāĻŽ āĻŦāϞāĻž āωāϚāĻŋāϤ āĻāϏāĻ•āĻŋāωāĻāϞāĻŽāĻžāĻ°ā§āĻ•āφāĻĒ-āĻ•āĻŋāϛ⧁:

case  
  when ps.avg_fragmentation_in_percent>=90.0 then 'SQLmarkup-red'
  when ps.avg_fragmentation_in_percent>=80.0 then 'SQLmarkup-yellow'
  else 'SQLmarkup-default' 
  end as [SQLmarkup-1], 
ps.avg_fragmentation_in_percent, 

āĻāĻ–āύ, āĻĒāĻžāĻ“āϝāĻŧāĻžāϰāĻļ⧇āϞ āĻĻā§āĻŦāĻžāϰāĻž āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āĻāχāϚāϟāĻŋāĻāĻŽāĻāϞ āĻĒāĻžāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ⧇, āφāĻŽāϰāĻž āĻšā§‡āĻĄāĻžāϰ āĻĨ⧇āϕ⧇ āĻĄāĻžāĻŽāĻŋ āĻ•āϞāĻžāĻŽāϟāĻŋ āϏāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻŦ āĻāĻŦāĻ‚ āĻĄā§‡āϟāĻžāϰ āĻŦāĻĄāĻŋāϤ⧇ āφāĻŽāϰāĻž āĻ•āϞāĻžāĻŽ āĻĨ⧇āϕ⧇ āĻ¸ā§āϟāĻžāχāϞ⧇ āĻŽāĻžāύ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻŦāĨ¤ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āϰāĻž āĻšāϝāĻŧ:

$html = $html `
  -replace "<th>SQLmarkup[^<]*</th>", "" `
  -replace "<td>SQLmarkup-(.+?)</td><td>",'<td class="SQLmarkup-$1">'

āĻĢāϞāĻžāĻĢāϞ:
āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āĻāϟāĻž āĻŽāĻžāĻ°ā§āϜāĻŋāϤ āύāĻž? āϝāĻĻāĻŋāĻ“ āύāĻž, āĻāχ āϰāĻ™ āφāĻŽāĻžāϕ⧇ āĻ•āĻŋāϛ⧁ āĻŽāύ⧇ āĻ•āϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āϝāĻŧ
āĻœā§‡āύāĻ•āĻŋāĻ¨ā§āϏ⧇ āĻāϏāĻ•āĻŋāωāĻāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύ: āĻĢāϞāĻžāĻĢāϞāϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰāĻ­āĻžāĻŦ⧇ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster