āĻāĻŦāĻžāϰ . āĻāĻŦāĻŋāώā§āϝāϤā§āϰ āĻĄāĻŋāĻŦāĻŋāĻāĻā§āϞāĻŋ āϏāϰāĻžāϏāϰāĻŋ 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
