From 7f7bb96ce8d47ad58438c1b52581af6feb6d6060 Mon Sep 17 00:00:00 2001 From: mstuefer Date: Wed, 15 Apr 2015 15:04:01 +0200 Subject: [PATCH 1/2] Add ResourceStats, queries sys.dm_db_resource_stats to get percentage of the maximum allowed DTU limits for the used sevice tier/performance level --- .../Queries/ResourceStats.AzureSql.sql | 15 ++++++ .../QueryTypes/ResourceStats.cs | 52 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/NewRelic.Microsoft.SqlServer.Plugin/Queries/ResourceStats.AzureSql.sql create mode 100644 src/NewRelic.Microsoft.SqlServer.Plugin/QueryTypes/ResourceStats.cs diff --git a/src/NewRelic.Microsoft.SqlServer.Plugin/Queries/ResourceStats.AzureSql.sql b/src/NewRelic.Microsoft.SqlServer.Plugin/Queries/ResourceStats.AzureSql.sql new file mode 100644 index 0000000..27ab9fb --- /dev/null +++ b/src/NewRelic.Microsoft.SqlServer.Plugin/Queries/ResourceStats.AzureSql.sql @@ -0,0 +1,15 @@ +-- sys.dm_db_resource_stats exposes 'fine-grained', near real-time resource consumption data, +-- expressed as a percentage of the maximum allowed DTU limits for the service tier/performance +-- level that the db is running (https://msdn.microsoft.com/en-us/library/dn800981.aspx) + +SELECT + AVG(avg_cpu_percent) AS [AvgCpuPercent], + MAX(avg_cpu_percent) AS [MaxCpuPercent], + AVG(avg_data_io_percent) AS [AvgDataIoPercent], + MAX(avg_data_io_percent) AS [MaxDataIoPercent], + AVG(avg_log_write_percent) AS [AvgLogWritePercent], + MAX(avg_log_write_percent) AS [MaxLogWritePercent], + AVG(avg_memory_usage_percent) AS [AvgMemoryUsagePercent], + MAX(avg_memory_usage_percent) AS [MaxMemoryUsagePercent] +FROM (SELECT TOP 4 * FROM sys.dm_db_resource_stats) t +-- TOP 4 since plugin works in 1min interval, table is filled in 15sec interval \ No newline at end of file diff --git a/src/NewRelic.Microsoft.SqlServer.Plugin/QueryTypes/ResourceStats.cs b/src/NewRelic.Microsoft.SqlServer.Plugin/QueryTypes/ResourceStats.cs new file mode 100644 index 0000000..22d9525 --- /dev/null +++ b/src/NewRelic.Microsoft.SqlServer.Plugin/QueryTypes/ResourceStats.cs @@ -0,0 +1,52 @@ +using NewRelic.Microsoft.SqlServer.Plugin.Core; + +using System; + +namespace NewRelic.Microsoft.SqlServer.Plugin.QueryTypes +{ + [AzureSqlQuery("ResourceStats.AzureSql.sql", "ResourceStats/{MetricName}", QueryName = "Resource Stats", Enabled = true)] + public class ResourceStats + { + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Avg_Cpu")] + public decimal AvgCpuPercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Max_Cpu")] + public decimal MaxCpuPercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Avg_Data_Io")] + public decimal AvgDataIoPercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Max_Data_Io")] + public decimal MaxDataIoPercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Avg_Log_Write")] + public decimal AvgLogWritePercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Max_Log_Write")] + public decimal MaxLogWritePercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Avg_Memory_Usage")] + public decimal AvgMemoryUsagePercent { get; set; } + + [Metric(MetricValueType = MetricValueType.Value, Units = "%_Max_Memory_Usage")] + public decimal MaxMemoryUsagePercent { get; set; } + + public override string ToString() + { + return string.Format( "AvgCpuPercent: {0},\t" + + "MaxCpuPercent: {1},\t" + + "AvgDataIoPercent: {2},\t" + + "MaxDataIoPercent: {3},\t" + + "AvgLogWritePercent: {4},\t" + + "MaxLogWritePercent: {5},\t" + + "AvgMemoryUsagePercent: {6},\t" + + "MaxMemoryUsagePercent: {7},\t", + AvgCpuPercent, MaxCpuPercent, + AvgDataIoPercent, MaxDataIoPercent, + AvgLogWritePercent, MaxLogWritePercent, + AvgMemoryUsagePercent, MaxMemoryUsagePercent); + } + + } +} From 8e8b348871dc781cee4e4a9f1673bf9037136863 Mon Sep 17 00:00:00 2001 From: mstuefer Date: Wed, 15 Apr 2015 16:11:16 +0200 Subject: [PATCH 2/2] Add files to csproj --- .../NewRelic.Microsoft.SqlServer.Plugin.csproj | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/NewRelic.Microsoft.SqlServer.Plugin/NewRelic.Microsoft.SqlServer.Plugin.csproj b/src/NewRelic.Microsoft.SqlServer.Plugin/NewRelic.Microsoft.SqlServer.Plugin.csproj index d097816..975abf2 100644 --- a/src/NewRelic.Microsoft.SqlServer.Plugin/NewRelic.Microsoft.SqlServer.Plugin.csproj +++ b/src/NewRelic.Microsoft.SqlServer.Plugin/NewRelic.Microsoft.SqlServer.Plugin.csproj @@ -83,6 +83,7 @@ + @@ -172,7 +173,9 @@ - + + +