Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions Lite/Controls/ServerTab.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,33 @@
<DataGridTextColumn Binding="{Binding MaxElapsedMs, StringFormat=N2}" ElementStyle="{StaticResource NumericCell}" Width="120">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MaxElapsedMs" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Max Duration (ms)" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MinLogicalReads, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MinLogicalReads" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Min Reads" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MaxLogicalReads, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MaxLogicalReads" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Max Reads" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MinPhysicalReads, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="110">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MinPhysicalReads" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Min Phys Reads" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MaxPhysicalReads, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="110">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MaxPhysicalReads" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Max Phys Reads" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MinLogicalWrites, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MinLogicalWrites" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Min Writes" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MaxLogicalWrites, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MaxLogicalWrites" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Max Writes" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MinSpills, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="90">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MinSpills" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Min Spills" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding MaxSpills, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="90">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="MaxSpills" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Max Spills" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding CachedTimeFormatted}" Width="140">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="CachedTimeFormatted" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Cached Time" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding PlanHandle}" Width="140">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="PlanHandle" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Plan Handle" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
Expand Down Expand Up @@ -546,6 +573,33 @@
<DataGridTextColumn Binding="{Binding PlanForcingType}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="PlanForcingType" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Force Type" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding ExecutionTypeDesc}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="ExecutionTypeDesc" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Exec Type" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding FirstExecutionTimeLocal}" Width="130">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="FirstExecutionTimeLocal" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="First Execution" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AvgClrTimeMs, StringFormat=N2}" ElementStyle="{StaticResource NumericCell}" Width="100">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="AvgClrTimeMs" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Avg CLR (ms)" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AvgTempdbSpaceUsed, StringFormat=N1}" ElementStyle="{StaticResource NumericCell}" Width="120">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="AvgTempdbSpaceUsed" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Avg TempDB Pages" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding AvgLogBytesUsed, StringFormat=N0}" ElementStyle="{StaticResource NumericCell}" Width="110">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="AvgLogBytesUsed" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Avg Log Bytes" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding PlanType}" Width="90">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="PlanType" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Plan Type" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding ForceFailureCount}" ElementStyle="{StaticResource NumericCell}" Width="110">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="ForceFailureCount" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Force Failures" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding LastForceFailureReason}" Width="140">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="LastForceFailureReason" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Force Failure Reason" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding CompatibilityLevel}" ElementStyle="{StaticResource NumericCell}" Width="80">
<DataGridTextColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="CompatibilityLevel" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Compat" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTextColumn.Header>
</DataGridTextColumn>
<DataGridTemplateColumn Width="500">
<DataGridTemplateColumn.Header><StackPanel Orientation="Horizontal"><Button Style="{DynamicResource ColumnFilterButtonStyle}" Tag="QueryText" Click="FilterButton_Click" Margin="0,0,4,0"/><TextBlock Text="Query Text" FontWeight="Bold" VerticalAlignment="Center"/></StackPanel></DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
Expand Down Expand Up @@ -628,10 +682,26 @@
<TextBlock Text="Plan Cache" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="PlanCacheText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
<StackPanel Margin="0,0,24,0">
<TextBlock Text="Available Physical" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="AvailablePhysicalMemoryText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
<StackPanel Margin="0,0,24,0">
<TextBlock Text="Total Page File" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="TotalPageFileText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
<StackPanel Margin="0,0,24,0">
<TextBlock Text="Available Page File" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="AvailablePageFileText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
<StackPanel Margin="0,0,24,0">
<TextBlock Text="System Memory State" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="MemoryStateText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
<StackPanel Margin="0,0,24,0">
<TextBlock Text="Memory Model" Foreground="{StaticResource ForegroundDimBrush}" FontSize="11"/>
<TextBlock x:Name="SqlMemoryModelText" Text="--" FontSize="18" FontWeight="SemiBold"/>
</StackPanel>
</WrapPanel>
</Border>

Expand Down
8 changes: 8 additions & 0 deletions Lite/Controls/ServerTab.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -661,20 +661,28 @@ private void UpdateMemorySummary(MemoryStatsRow? stats)
if (stats == null)
{
PhysicalMemoryText.Text = "--";
AvailablePhysicalMemoryText.Text = "--";
TotalServerMemoryText.Text = "--";
TargetServerMemoryText.Text = "--";
BufferPoolText.Text = "--";
PlanCacheText.Text = "--";
TotalPageFileText.Text = "--";
AvailablePageFileText.Text = "--";
MemoryStateText.Text = "--";
SqlMemoryModelText.Text = "--";
return;
}

PhysicalMemoryText.Text = FormatMb(stats.TotalPhysicalMemoryMb);
AvailablePhysicalMemoryText.Text = FormatMb(stats.AvailablePhysicalMemoryMb);
TotalServerMemoryText.Text = FormatMb(stats.TotalServerMemoryMb);
TargetServerMemoryText.Text = FormatMb(stats.TargetServerMemoryMb);
BufferPoolText.Text = FormatMb(stats.BufferPoolMb);
PlanCacheText.Text = FormatMb(stats.PlanCacheMb);
TotalPageFileText.Text = FormatMb(stats.TotalPageFileMb);
AvailablePageFileText.Text = FormatMb(stats.AvailablePageFileMb);
MemoryStateText.Text = stats.SystemMemoryState;
SqlMemoryModelText.Text = stats.SqlMemoryModel;
}

private static string FormatMb(double mb)
Expand Down
32 changes: 30 additions & 2 deletions Lite/Services/LocalDataService.QueryStats.cs
Original file line number Diff line number Diff line change
Expand Up @@ -387,6 +387,15 @@ public async Task<List<ProcedureStatsRow>> GetTopProceduresByCpuAsync(int server
MIN(min_elapsed_time) AS min_elapsed_time,
MAX(max_elapsed_time) AS max_elapsed_time,
SUM(total_spills) AS total_spills,
MIN(min_logical_reads) AS min_logical_reads,
MAX(max_logical_reads) AS max_logical_reads,
MIN(min_physical_reads) AS min_physical_reads,
MAX(max_physical_reads) AS max_physical_reads,
MIN(min_logical_writes) AS min_logical_writes,
MAX(max_logical_writes) AS max_logical_writes,
MIN(min_spills) AS min_spills,
MAX(max_spills) AS max_spills,
MAX(cached_time) AS cached_time,
MAX(sql_handle) AS sql_handle,
MAX(plan_handle) AS plan_handle
FROM v_procedure_stats
Expand Down Expand Up @@ -426,8 +435,17 @@ ORDER BY SUM(delta_elapsed_time) DESC
MinElapsedTimeUs = reader.IsDBNull(12) ? 0 : reader.GetInt64(12),
MaxElapsedTimeUs = reader.IsDBNull(13) ? 0 : reader.GetInt64(13),
TotalSpills = reader.IsDBNull(14) ? 0 : reader.GetInt64(14),
SqlHandle = reader.IsDBNull(15) ? "" : reader.GetString(15),
PlanHandle = reader.IsDBNull(16) ? "" : reader.GetString(16)
MinLogicalReads = reader.IsDBNull(15) ? 0 : reader.GetInt64(15),
MaxLogicalReads = reader.IsDBNull(16) ? 0 : reader.GetInt64(16),
MinPhysicalReads = reader.IsDBNull(17) ? 0 : reader.GetInt64(17),
MaxPhysicalReads = reader.IsDBNull(18) ? 0 : reader.GetInt64(18),
MinLogicalWrites = reader.IsDBNull(19) ? 0 : reader.GetInt64(19),
MaxLogicalWrites = reader.IsDBNull(20) ? 0 : reader.GetInt64(20),
MinSpills = reader.IsDBNull(21) ? 0 : reader.GetInt64(21),
MaxSpills = reader.IsDBNull(22) ? 0 : reader.GetInt64(22),
CachedTime = reader.IsDBNull(23) ? (DateTime?)null : reader.GetDateTime(23),
SqlHandle = reader.IsDBNull(24) ? "" : reader.GetString(24),
PlanHandle = reader.IsDBNull(25) ? "" : reader.GetString(25)
});
}

Expand Down Expand Up @@ -637,6 +655,15 @@ public class ProcedureStatsRow
public long MinElapsedTimeUs { get; set; }
public long MaxElapsedTimeUs { get; set; }
public long TotalSpills { get; set; }
public long MinLogicalReads { get; set; }
public long MaxLogicalReads { get; set; }
public long MinPhysicalReads { get; set; }
public long MaxPhysicalReads { get; set; }
public long MinLogicalWrites { get; set; }
public long MaxLogicalWrites { get; set; }
public long MinSpills { get; set; }
public long MaxSpills { get; set; }
public DateTime? CachedTime { get; set; }
public string SqlHandle { get; set; } = "";
public string PlanHandle { get; set; } = "";
public string FullName => string.IsNullOrEmpty(SchemaName) ? ObjectName : $"{SchemaName}.{ObjectName}";
Expand All @@ -649,6 +676,7 @@ public class ProcedureStatsRow
public double MaxCpuMs => MaxWorkerTimeUs / 1000.0;
public double MinElapsedMs => MinElapsedTimeUs / 1000.0;
public double MaxElapsedMs => MaxElapsedTimeUs / 1000.0;
public string CachedTimeFormatted => CachedTime?.ToString("yyyy-MM-dd HH:mm:ss") ?? "";
}

public class QueryStatsHistoryRow
Expand Down
Loading
Loading