diff --git a/CommandLineOptions.cs b/CommandLineOptions.cs index 5ec6e7c..9ddbdc2 100644 --- a/CommandLineOptions.cs +++ b/CommandLineOptions.cs @@ -4,24 +4,35 @@ public class CommandLineOptions { [JsonProperty(PropertyName = "instances")] - public List Instances { get; set; } + public List Instances { get; set; } [JsonProperty(PropertyName = "port")] public int Port { get; set; } - [JsonProperty(PropertyName = "waitStatsOptions")] - public WaitStatsOptions WaitStatsOptions { get; set; } + [JsonProperty(PropertyName = "waitStats")] + public WaitStats WaitStats { get; set; } + + [JsonProperty(PropertyName = "performanceCounters")] + public PerformanceCounters PerformanceCounters { get; set; } +} + +public class PerformanceCounters +{ + [JsonProperty(PropertyName = "templateFiles")] + public string[] TemplateFiles { get; set; } + + } -public class SQLServerInstanceOptions +public class SQLServerInstance { [JsonProperty(PropertyName = "connectionString")] public string ConnectionString { get; set; } } -public class WaitStatsOptions +public class WaitStats { - [JsonProperty(PropertyName = "waitStatsFiles")] - public string[] WaitStatsFiles { get; set; } + [JsonProperty(PropertyName = "templateFiles")] + public string[] TemplateFiles { get; set; } } \ No newline at end of file diff --git a/Counters/PerformanceCounters.cs b/Counters/PerformanceCounters.cs index 1c3f661..63f2688 100644 --- a/Counters/PerformanceCounters.cs +++ b/Counters/PerformanceCounters.cs @@ -20,10 +20,16 @@ public struct GrafanaPerformanceCounter { public string type; public string name; + + public override string ToString() + { + return $"{this.GetType().Name}[type == {type}, name == {name}]"; + } } public class PerformanceCounters { + private static HashSet EnabledCounters { get; set; } static Dictionary _dGraf; public SQLServerInfo SQLServerInfo; @@ -51,15 +57,44 @@ static PerformanceCounters() } } - private static string KeyFromObjectNameAndCounterName(string objectName, string counterName) - { - return objectName + "_" + counterName; - } - public PerformanceCounters(HttpContext context, SQLServerInfo sqlServerInfo) { this.SQLServerInfo = sqlServerInfo; logger = context.RequestServices.GetRequiredService>(); + + // in theory we should guard this code against concurrent access. It is possibile that + // two or more threads will work on the same HashSet concurrently because the all + // tested Waits == null to be true. In practice this will never happen as long as it's only + // one Prometheus calling our method. For now we will avoid the cost of a mutex, if bugs + // arise it will be included here. + if (EnabledCounters == null) + { + EnabledCounters = new HashSet(); + + foreach (var file in Program.CommandLineOptions.PerformanceCounters.TemplateFiles) + { + System.IO.FileInfo fi = new System.IO.FileInfo(file); + logger.LogInformation($"Loading performance counter template to include from {fi.FullName}..."); + + using (System.IO.StreamReader sr = new System.IO.StreamReader(new System.IO.FileStream(fi.FullName, + System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read))) + { + string str; + while ((str = sr.ReadLine()) != null) + { + if (str.StartsWith("#")) + continue; + + EnabledCounters.Add(str); + } + } + } + } + } + + private static string KeyFromObjectNameAndCounterName(string objectName, string counterName) + { + return objectName + "_" + counterName; } public async Task QueryAndSerializeData() @@ -98,6 +133,14 @@ public async Task QueryAndSerializeData() GrafanaPerformanceCounter gpc; if (_dGraf.TryGetValue(key, out gpc)) { + // skip this is it's not in the enabled performance counters + // as specified by the template files configured. + if (!EnabledCounters.Contains(gpc.name)) + { + logger.LogDebug($"PerformanceCounter {gpc} will be skipped because it's not in any configured template file"); + continue; + } + string gpcName = $"sql_pc_{gpc.name}"; sb.Append($"# TYPE {gpcName} {gpc.type}\n"); diff --git a/Counters/WaitStats.cs b/Counters/WaitStats.cs index d96b656..1faa579 100644 --- a/Counters/WaitStats.cs +++ b/Counters/WaitStats.cs @@ -38,10 +38,10 @@ public WaitStats(HttpContext context, SQLServerInfo sqlServerInfo) { Waits = new HashSet(); - foreach (var file in Program.CommandLineOptions.WaitStatsOptions.WaitStatsFiles) + foreach (var file in Program.CommandLineOptions.WaitStats.TemplateFiles) { System.IO.FileInfo fi = new System.IO.FileInfo(file); - logger.LogInformation($"Loading wait stats to include from {fi.FullName}..."); + logger.LogInformation($"Loading wait stats template to include from {fi.FullName}..."); using (System.IO.StreamReader sr = new System.IO.StreamReader(new System.IO.FileStream(fi.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read))) diff --git a/MindFlavor.SQLServerExporter.csproj b/MindFlavor.SQLServerExporter.csproj index 6034090..bbf7a99 100644 --- a/MindFlavor.SQLServerExporter.csproj +++ b/MindFlavor.SQLServerExporter.csproj @@ -3,6 +3,12 @@ netcoreapp2.2 InProcess + 0.2.0.0 + Francesco Cogno + Apache License Version 2.0 + https://raw.githubusercontent.com/MindFlavor/prometheus_sql_server_exporter/master/LICENSE + https://mindflavor.github.io/prometheus_sql_server_exporter + https://github.com/MindFlavor/prometheus_sql_server_exporter diff --git a/Program.cs b/Program.cs index 8aae81a..dfc313a 100644 --- a/Program.cs +++ b/Program.cs @@ -17,6 +17,10 @@ public class Program public static CommandLineOptions CommandLineOptions { get; private set; } public static void Main(string[] args) { + var assemblyVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; + System.Console.WriteLine($"Prometheus SQL Server Exporter v{assemblyVersion.ToString()}"); + System.Console.WriteLine($"Licensed under Apache License 2.0\n"); + string configFile = null; for (int i = 0; (i < args.Length - 1 && configFile == null); i++) if (args[i].ToLower() == "-c") diff --git a/Templates/PerformanceCounters/Everything.txt b/Templates/PerformanceCounters/Everything.txt new file mode 100644 index 0000000..79ba831 --- /dev/null +++ b/Templates/PerformanceCounters/Everything.txt @@ -0,0 +1,588 @@ +AccessMethods_AUcleanupbatches_over_sec +AccessMethods_AUcleanups_over_sec +AccessMethods_By_referenceLobCreateCount +AccessMethods_By_referenceLobUseCount +AccessMethods_CountLobReadahead +AccessMethods_CountPullInRow +AccessMethods_CountPushOffRow +AccessMethods_DeferreddroppedAUs +AccessMethods_DeferredDroppedrowsets +AccessMethods_Droppedrowsetcleanups_over_sec +AccessMethods_Droppedrowsetsskipped_over_sec +AccessMethods_ExtentDeallocations_over_sec +AccessMethods_ExtentsAllocated_over_sec +AccessMethods_FailedAUcleanupbatches_over_sec +AccessMethods_Failedleafpagecookie +AccessMethods_Failedtreepagecookie +AccessMethods_ForwardedRecords_over_sec +AccessMethods_FreeSpacePageFetches_over_sec +AccessMethods_FreeSpaceScans_over_sec +AccessMethods_FullScans_over_sec +AccessMethods_IndexSearches_over_sec +AccessMethods_InSysXactwaits_over_sec +AccessMethods_LobHandleCreateCount +AccessMethods_LobHandleDestroyCount +AccessMethods_LobSSProviderCreateCount +AccessMethods_LobSSProviderDestroyCount +AccessMethods_LobSSProviderTruncationCount +AccessMethods_Mixedpageallocations_over_sec +AccessMethods_Pagecompressionattempts_over_sec +AccessMethods_PageDeallocations_over_sec +AccessMethods_PageSplits_over_sec +AccessMethods_PagesAllocated_over_sec +AccessMethods_Pagescompressed_over_sec +AccessMethods_ProbeScans_over_sec +AccessMethods_RangeScans_over_sec +AccessMethods_ScanPointRevalidations_over_sec +AccessMethods_SkippedGhostedRecords_over_sec +AccessMethods_TableLockEscalations_over_sec +AccessMethods_Usedleafpagecookie +AccessMethods_Usedtreepagecookie +AccessMethods_WorkfilesCreated_over_sec +AccessMethods_WorktablesCreated_over_sec +AccessMethods_WorktablesFromCacheBase +AccessMethods_WorktablesFromCacheRatio +AdvancedAnalytics_Predictions_over_sec +AvailabilityReplica_BytesReceivedfromReplica_over_sec +AvailabilityReplica_BytesSenttoReplica_over_sec +AvailabilityReplica_BytesSenttoTransport_over_sec +AvailabilityReplica_FlowControlTime_ms_over_sec +AvailabilityReplica_FlowControl_over_sec +AvailabilityReplica_ReceivesfromReplica_over_sec +AvailabilityReplica_ResentMessages_over_sec +AvailabilityReplica_SendstoReplica_over_sec +AvailabilityReplica_SendstoTransport_over_sec +BatchRespStatistics_Batches_ge_000000ms_lt_000001ms +BatchRespStatistics_Batches_ge_000001ms_lt_000002ms +BatchRespStatistics_Batches_ge_000002ms_lt_000005ms +BatchRespStatistics_Batches_ge_000005ms_lt_000010ms +BatchRespStatistics_Batches_ge_000010ms_lt_000020ms +BatchRespStatistics_Batches_ge_000020ms_lt_000050ms +BatchRespStatistics_Batches_ge_000050ms_lt_000100ms +BatchRespStatistics_Batches_ge_000100ms_lt_000200ms +BatchRespStatistics_Batches_ge_000200ms_lt_000500ms +BatchRespStatistics_Batches_ge_000500ms_lt_001000ms +BatchRespStatistics_Batches_ge_001000ms_lt_002000ms +BatchRespStatistics_Batches_ge_002000ms_lt_005000ms +BatchRespStatistics_Batches_ge_005000ms_lt_010000ms +BatchRespStatistics_Batches_ge_010000ms_lt_020000ms +BatchRespStatistics_Batches_ge_020000ms_lt_050000ms +BatchRespStatistics_Batches_ge_050000ms_lt_100000ms +BatchRespStatistics_Batches_ge_100000ms +BrokerActivation_StoredProceduresInvoked_over_sec +BrokerActivation_TaskLimitReached +BrokerActivation_TaskLimitReached_over_sec +BrokerActivation_TasksAborted_over_sec +BrokerActivation_TasksRunning +BrokerActivation_TasksStarted_over_sec +BrokerStatistics_ActivationErrorsTotal +BrokerStatistics_BrokerTransactionRollbacks +BrokerStatistics_CorruptedMessagesTotal +BrokerStatistics_DequeuedTransmissionQMsgs_over_sec +BrokerStatistics_DialogTimerEventCount +BrokerStatistics_DroppedMessagesTotal +BrokerStatistics_EnqueuedLocalMessagesTotal +BrokerStatistics_EnqueuedLocalMessages_over_sec +BrokerStatistics_EnqueuedMessagesTotal +BrokerStatistics_EnqueuedMessages_over_sec +BrokerStatistics_EnqueuedP1Messages_over_sec +BrokerStatistics_EnqueuedP10Messages_over_sec +BrokerStatistics_EnqueuedP2Messages_over_sec +BrokerStatistics_EnqueuedP3Messages_over_sec +BrokerStatistics_EnqueuedP4Messages_over_sec +BrokerStatistics_EnqueuedP5Messages_over_sec +BrokerStatistics_EnqueuedP6Messages_over_sec +BrokerStatistics_EnqueuedP7Messages_over_sec +BrokerStatistics_EnqueuedP8Messages_over_sec +BrokerStatistics_EnqueuedP9Messages_over_sec +BrokerStatistics_EnqueuedTransmissionQMsgs_over_sec +BrokerStatistics_EnqueuedTransportMsgFragTot +BrokerStatistics_EnqueuedTransportMsgFrags_over_sec +BrokerStatistics_EnqueuedTransportMsgsTotal +BrokerStatistics_EnqueuedTransportMsgs_over_sec +BrokerStatistics_ForwardedMessagesTotal +BrokerStatistics_ForwardedMessages_over_sec +BrokerStatistics_ForwardedMsgByteTotal +BrokerStatistics_ForwardedMsgBytes_over_sec +BrokerStatistics_ForwardedMsgDiscardedTotal +BrokerStatistics_ForwardedMsgsDiscarded_over_sec +BrokerStatistics_ForwardedPendingMsgBytes +BrokerStatistics_ForwardedPendingMsgCount +BrokerStatistics_SQLRECEIVETotal +BrokerStatistics_SQLRECEIVEs_over_sec +BrokerStatistics_SQLSENDTotal +BrokerStatistics_SQLSENDs_over_sec +BrokerTOStatistics_Avg_LengthofBatchedWrites +BrokerTOStatistics_Avg_LengthofBatchedWritesBS +BrokerTOStatistics_Avg_TimeBetweenBatches_ms +BrokerTOStatistics_Avg_TimeBetweenBatchesBase +BrokerTOStatistics_Avg_TimetoWriteBatch_ms +BrokerTOStatistics_Avg_TimetoWriteBatchBase +BrokerTOStatistics_TransmissionObjGets_over_Sec +BrokerTOStatistics_TransmissionObjSetDirty_over_Sec +BrokerTOStatistics_TransmissionObjWrites_over_Sec +Broker_over_DBMTransport_CurrentBytesforRecvI_over_O +Broker_over_DBMTransport_CurrentBytesforSendI_over_O +Broker_over_DBMTransport_CurrentMsgFragsforSendI_over_O +Broker_over_DBMTransport_DecryptedI_over_Obytes_over_sec +Broker_over_DBMTransport_DecryptionI_over_Os_over_sec +Broker_over_DBMTransport_EncryptedI_over_Obytes_over_sec +Broker_over_DBMTransport_EncryptionI_over_Os_over_sec +Broker_over_DBMTransport_MessageFragmentP1Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP10Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP2Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP3Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP4Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP5Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP6Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP7Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP8Sends_over_sec +Broker_over_DBMTransport_MessageFragmentP9Sends_over_sec +Broker_over_DBMTransport_MessageFragmentReceives_over_sec +Broker_over_DBMTransport_MessageFragmentSends_over_sec +Broker_over_DBMTransport_MsgFragmentRecvSizeAvg +Broker_over_DBMTransport_MsgFragmentRecvSizeAvgBase +Broker_over_DBMTransport_MsgFragmentSendSizeAvg +Broker_over_DBMTransport_MsgFragmentSendSizeAvgBase +Broker_over_DBMTransport_OpenConnectionCount +Broker_over_DBMTransport_PendingBytesforRecvI_over_O +Broker_over_DBMTransport_PendingBytesforSendI_over_O +Broker_over_DBMTransport_PendingMsgFragsforRecvI_over_O +Broker_over_DBMTransport_PendingMsgFragsforSendI_over_O +Broker_over_DBMTransport_ReceiveFlowControlEnters_over_sec +Broker_over_DBMTransport_ReceiveFlowControlExits_over_sec +Broker_over_DBMTransport_ReceiveFlowControlGate +Broker_over_DBMTransport_ReceiveI_over_Obytes_over_sec +Broker_over_DBMTransport_ReceiveI_over_OLenAvg +Broker_over_DBMTransport_ReceiveI_over_OLenAvgBase +Broker_over_DBMTransport_ReceiveI_over_Os_over_sec +Broker_over_DBMTransport_RecvI_over_OBufferCopiesbytes_over_sec +Broker_over_DBMTransport_RecvI_over_OBufferCopiesCount +Broker_over_DBMTransport_SendFlowControlEnters_over_sec +Broker_over_DBMTransport_SendFlowControlExits_over_sec +Broker_over_DBMTransport_SendFlowControlGate +Broker_over_DBMTransport_SendI_over_Obytes_over_sec +Broker_over_DBMTransport_SendI_over_OLenAvg +Broker_over_DBMTransport_SendI_over_OLenAvgBase +Broker_over_DBMTransport_SendI_over_Os_over_sec +BufferManager_Backgroundwriterpages_over_sec +BufferManager_Buffercachehitratio +BufferManager_Buffercachehitratiobase +BufferManager_Checkpointpages_over_sec +BufferManager_Databasepages +BufferManager_Extensionallocatedpages +BufferManager_Extensionfreepages +BufferManager_Extensioninuseaspercentage +BufferManager_ExtensionoutstandingIOcounter +BufferManager_Extensionpageevictions_over_sec +BufferManager_Extensionpagereads_over_sec +BufferManager_Extensionpageunreferencedtime +BufferManager_Extensionpagewrites_over_sec +BufferManager_Freeliststalls_over_sec +BufferManager_IntegralControllerSlope +BufferManager_Lazywrites_over_sec +BufferManager_Pagelifeexpectancy +BufferManager_Pagelookups_over_sec +BufferManager_Pagereads_over_sec +BufferManager_Pagewrites_over_sec +BufferManager_Readaheadpages_over_sec +BufferManager_Readaheadtime_over_sec +BufferManager_Targetpages +BufferNode_Databasepages +BufferNode_Localnodepagelookups_over_sec +BufferNode_Pagelifeexpectancy +BufferNode_Remotenodepagelookups_over_sec +CatalogMetadata_CacheEntriesCount +CatalogMetadata_CacheEntriesPinnedCount +CatalogMetadata_CacheHitRatio +CatalogMetadata_CacheHitRatioBase +CLR_CLRExecution +Columnstore_DeltaRowgroupsClosed +Columnstore_DeltaRowgroupsCompressed +Columnstore_DeltaRowgroupsCreated +Columnstore_SegmentCacheHitRatio +Columnstore_SegmentCacheHitRatioBase +Columnstore_SegmentReads_over_Sec +Columnstore_TotalDeleteBuffersMigrated +Columnstore_TotalMergePolicyEvaluations +Columnstore_TotalRowgroupsCompressed +Columnstore_TotalRowgroupsFitForMerge +Columnstore_TotalRowgroupsMergeCompressed +Columnstore_TotalSourceRowgroupsMerged +CursorManagerbyType_Activecursors +CursorManagerbyType_CacheHitRatio +CursorManagerbyType_CacheHitRatioBase +CursorManagerbyType_CachedCursorCounts +CursorManagerbyType_CursorCacheUseCounts_over_sec +CursorManagerbyType_Cursormemoryusage +CursorManagerbyType_CursorRequests_over_sec +CursorManagerbyType_Cursorworktableusage +CursorManagerbyType_Numberofactivecursorplans +CursorManagerTotal_Asyncpopulationcount +CursorManagerTotal_Cursorconversionrate +CursorManagerTotal_Cursorflushes +DatabaseReplica_DatabaseFlowControlDelay +DatabaseReplica_DatabaseFlowControls_over_sec +DatabaseReplica_FileBytesReceived_over_sec +DatabaseReplica_GroupCommitTime +DatabaseReplica_GroupCommits_over_Sec +DatabaseReplica_LogApplyPendingQueue +DatabaseReplica_LogApplyReadyQueue +DatabaseReplica_LogBytesCompressed_over_sec +DatabaseReplica_LogBytesDecompressed_over_sec +DatabaseReplica_LogBytesReceived_over_sec +DatabaseReplica_LogCompressionCachehits_over_sec +DatabaseReplica_LogCompressionCachemisses_over_sec +DatabaseReplica_LogCompressions_over_sec +DatabaseReplica_LogDecompressions_over_sec +DatabaseReplica_Logremainingforundo +DatabaseReplica_LogSendQueue +DatabaseReplica_MirroredWriteTransactions_over_sec +DatabaseReplica_RecoveryQueue +DatabaseReplica_Redoblocked_over_sec +DatabaseReplica_RedoBytesRemaining +DatabaseReplica_RedoneBytes_over_sec +DatabaseReplica_Redones_over_sec +DatabaseReplica_TotalLogrequiringundo +DatabaseReplica_TransactionDelay +Databases_ActiveTransactions +Databases_AvgDistFromEOL_over_LPRequest +Databases_Backup_over_RestoreThroughput_over_sec +Databases_BulkCopyRows_over_sec +Databases_BulkCopyThroughput_over_sec +Databases_Committableentries +Databases_DataFile_s_Size_KB +Databases_DBCCLogicalScanBytes_over_sec +Databases_GroupCommitTime_over_sec +Databases_LogBytesFlushed_over_sec +Databases_LogCacheHitRatio +Databases_LogCacheHitRatioBase +Databases_LogCacheReads_over_sec +Databases_LogFile_s_Size_KB +Databases_LogFile_s_UsedSize_KB +Databases_LogFlushWaitTime +Databases_LogFlushWaits_over_sec +Databases_LogFlushWriteTime_ms +Databases_LogFlushes_over_sec +Databases_LogGrowths +Databases_LogPoolCacheMisses_over_sec +Databases_LogPoolDiskReads_over_sec +Databases_LogPoolHashDeletes_over_sec +Databases_LogPoolHashInserts_over_sec +Databases_LogPoolInvalidHashEntry_over_sec +Databases_LogPoolLogScanPushes_over_sec +Databases_LogPoolLogWriterPushes_over_sec +Databases_LogPoolPushEmptyFreePool_over_sec +Databases_LogPoolPushLowMemory_over_sec +Databases_LogPoolPushNoFreeBuffer_over_sec +Databases_LogPoolReq_BehindTrunc_over_sec +Databases_LogPoolRequestsBase +Databases_LogPoolRequestsOldVLF_over_sec +Databases_LogPoolRequests_over_sec +Databases_LogPoolTotalActiveLogSize +Databases_LogPoolTotalSharedPoolSize +Databases_LogShrinks +Databases_LogTruncations +Databases_PercentLogUsed +Databases_Repl_PendingXacts +Databases_Repl_Trans_Rate +Databases_ShrinkDataMovementBytes_over_sec +Databases_Trackedtransactions_over_sec +Databases_Transactions_over_sec +Databases_WriteTransactions_over_sec +Databases_XTPControllerDLCLatencyBase +Databases_XTPControllerDLCLatency_over_Fetch +Databases_XTPControllerDLCPeakLatency +Databases_XTPControllerLogProcessed_over_sec +Databases_XTPMemoryUsed_KB +DeprecatedFeatures_Usage +ExecStatistics_DistributedQuery +ExecStatistics_DTCcalls +ExecStatistics_ExtendedProcedures +ExecStatistics_OLEDBcalls +ExternalScripts_ExecutionErrors +ExternalScripts_ImpliedAuth_Logins +ExternalScripts_ParallelExecutions +ExternalScripts_SQLCCExecutions +ExternalScripts_StreamingExecutions +ExternalScripts_TotalExecutionTime_ms +ExternalScripts_TotalExecutions +FileTable_AvgtimedeleteFileTableitem +FileTable_AvgtimeFileTableenumeration +FileTable_AvgtimeFileTablehandlekill +FileTable_AvgtimemoveFileTableitem +FileTable_AvgtimeperfileI_over_Orequest +FileTable_AvgtimeperfileI_over_Oresponse +FileTable_AvgtimerenameFileTableitem +FileTable_AvgtimetogetFileTableitem +FileTable_AvgtimeupdateFileTableitem +FileTable_FileTabledboperations_over_sec +FileTable_FileTableenumerationreqs_over_sec +FileTable_FileTablefileI_over_Orequests_over_sec +FileTable_FileTablefileI_over_Oresponse_over_sec +FileTable_FileTableitemdeletereqs_over_sec +FileTable_FileTableitemgetrequests_over_sec +FileTable_FileTableitemmovereqs_over_sec +FileTable_FileTableitemrenamereqs_over_sec +FileTable_FileTableitemupdatereqs_over_sec +FileTable_FileTablekillhandleops_over_sec +FileTable_FileTabletableoperations_over_sec +FileTable_TimedeleteFileTableitemBASE +FileTable_TimeFileTableenumerationBASE +FileTable_TimeFileTablehandlekillBASE +FileTable_TimemoveFileTableitemBASE +FileTable_TimeperfileI_over_OrequestBASE +FileTable_TimeperfileI_over_OresponseBASE +FileTable_TimerenameFileTableitemBASE +FileTable_TimetogetFileTableitemBASE +FileTable_TimeupdateFileTableitemBASE +GeneralStatistics_ActiveTempTables +GeneralStatistics_ConnectionReset_over_sec +GeneralStatistics_EventNotificationsDelayedDrop +GeneralStatistics_HTTPAuthenticatedRequests +GeneralStatistics_LogicalConnections +GeneralStatistics_Logins_over_sec +GeneralStatistics_Logouts_over_sec +GeneralStatistics_MarsDeadlocks +GeneralStatistics_Non_atomicyieldrate +GeneralStatistics_Processesblocked +GeneralStatistics_SOAPEmptyRequests +GeneralStatistics_SOAPMethodInvocations +GeneralStatistics_SOAPSessionInitiateRequests +GeneralStatistics_SOAPSessionTerminateRequests +GeneralStatistics_SOAPSQLRequests +GeneralStatistics_SOAPWSDLRequests +GeneralStatistics_SQLTraceIOProviderLockWaits +GeneralStatistics_TempTablesCreationRate +GeneralStatistics_TempTablesForDestruction +GeneralStatistics_Tempdbrecoveryunitid +GeneralStatistics_Tempdbrowsetid +GeneralStatistics_TraceEventNotificationQueue +GeneralStatistics_Transactions +GeneralStatistics_UserConnections +HTTPStorage_Avg_Bytes_over_Read +HTTPStorage_Avg_Bytes_over_ReadBASE +HTTPStorage_Avg_Bytes_over_Transfer +HTTPStorage_Avg_Bytes_over_TransferBASE +HTTPStorage_Avg_Bytes_over_Write +HTTPStorage_Avg_Bytes_over_WriteBASE +HTTPStorage_Avg_microsec_over_Read +HTTPStorage_Avg_microsec_over_ReadBASE +HTTPStorage_Avg_microsec_over_ReadComp +HTTPStorage_Avg_microsec_over_ReadCompBASE +HTTPStorage_Avg_microsec_over_Transfer +HTTPStorage_Avg_microsec_over_TransferBASE +HTTPStorage_Avg_microsec_over_Write +HTTPStorage_Avg_microsec_over_WriteBASE +HTTPStorage_Avg_microsec_over_WriteComp +HTTPStorage_Avg_microsec_over_WriteCompBASE +HTTPStorage_HTTPStorageIOfailed_over_sec +HTTPStorage_HTTPStorageIOretry_over_sec +HTTPStorage_OutstandingHTTPStorageIO +HTTPStorage_ReadBytes_over_Sec +HTTPStorage_Reads_over_Sec +HTTPStorage_TotalBytes_over_Sec +HTTPStorage_Transfers_over_Sec +HTTPStorage_WriteBytes_over_Sec +HTTPStorage_Writes_over_Sec +Latches_AverageLatchWaitTime_ms +Latches_AverageLatchWaitTimeBase +Latches_LatchWaits_over_sec +Latches_NumberofSuperLatches +Latches_SuperLatchDemotions_over_sec +Latches_SuperLatchPromotions_over_sec +Latches_TotalLatchWaitTime_ms +Locks_AverageWaitTime_ms +Locks_AverageWaitTimeBase +Locks_LockRequests_over_sec +Locks_LockTimeouts_timeout_gt_0__over_sec +Locks_LockTimeouts_over_sec +Locks_LockWaitTime_ms +Locks_LockWaits_over_sec +Locks_NumberofDeadlocks_over_sec +LogPoolFreePool_FreeBufferRefills_over_sec +LogPoolFreePool_FreeListLength +MemoryBrokerClerks_Internalbenefit +MemoryBrokerClerks_Memorybrokerclerksize +MemoryBrokerClerks_Periodicevictions_pages +MemoryBrokerClerks_Pressureevictions_pages_over_sec +MemoryBrokerClerks_Simulationbenefit +MemoryBrokerClerks_Simulationsize +MemoryManager_ConnectionMemory_KB +MemoryManager_DatabaseCacheMemory_KB +MemoryManager_Externalbenefitofmemory +MemoryManager_FreeMemory_KB +MemoryManager_GrantedWorkspaceMemory_KB +MemoryManager_LockBlocks +MemoryManager_LockBlocksAllocated +MemoryManager_LockMemory_KB +MemoryManager_LockOwnerBlocks +MemoryManager_LockOwnerBlocksAllocated +MemoryManager_LogPoolMemory_KB +MemoryManager_MaximumWorkspaceMemory_KB +MemoryManager_MemoryGrantsOutstanding +MemoryManager_MemoryGrantsPending +MemoryManager_OptimizerMemory_KB +MemoryManager_ReservedServerMemory_KB +MemoryManager_SQLCacheMemory_KB +MemoryManager_StolenServerMemory_KB +MemoryManager_TargetServerMemory_KB +MemoryManager_TotalServerMemory_KB +MemoryNode_DatabaseNodeMemory_KB +MemoryNode_ForeignNodeMemory_KB +MemoryNode_FreeNodeMemory_KB +MemoryNode_StolenNodeMemory_KB +MemoryNode_TargetNodeMemory_KB +MemoryNode_TotalNodeMemory_KB +PlanCache_CacheHitRatio +PlanCache_CacheHitRatioBase +PlanCache_CacheObjectCounts +PlanCache_CacheObjectsinuse +PlanCache_CachePages +QueryStore_QueryStoreCPUusage +QueryStore_QueryStorelogicalreads +QueryStore_QueryStorelogicalwrites +QueryStore_QueryStorephysicalreads +ResourcePoolStats_Activememorygrantamount_KB +ResourcePoolStats_Activememorygrantscount +ResourcePoolStats_AvgDiskReadIO_ms +ResourcePoolStats_AvgDiskReadIO_ms_Base +ResourcePoolStats_AvgDiskWriteIO_ms +ResourcePoolStats_AvgDiskWriteIO_ms_Base +ResourcePoolStats_Cachememorytarget_KB +ResourcePoolStats_Compilememorytarget_KB +ResourcePoolStats_CPUcontroleffect_perc +ResourcePoolStats_CPUdelayed_perc +ResourcePoolStats_CPUdelayed_perc_base +ResourcePoolStats_CPUeffective_perc +ResourcePoolStats_CPUeffective_perc_base +ResourcePoolStats_CPUusage_perc +ResourcePoolStats_CPUusage_perc_base +ResourcePoolStats_CPUusagetarget_perc +ResourcePoolStats_CPUviolated_perc +ResourcePoolStats_DiskReadBytes_over_sec +ResourcePoolStats_DiskReadIOThrottled_over_sec +ResourcePoolStats_DiskReadIO_over_sec +ResourcePoolStats_DiskWriteBytes_over_sec +ResourcePoolStats_DiskWriteIOThrottled_over_sec +ResourcePoolStats_DiskWriteIO_over_sec +ResourcePoolStats_Maxmemory_KB +ResourcePoolStats_Memorygranttimeouts_over_sec +ResourcePoolStats_Memorygrants_over_sec +ResourcePoolStats_Pendingmemorygrantscount +ResourcePoolStats_Queryexecmemorytarget_KB +ResourcePoolStats_Targetmemory_KB +ResourcePoolStats_Usedmemory_KB +SQLErrors_Errors_over_sec +SQLServer2017XTPCursors_Cursordeletes_over_sec +SQLServer2017XTPCursors_Cursorinserts_over_sec +SQLServer2017XTPCursors_Cursorscansstarted_over_sec +SQLServer2017XTPCursors_Cursoruniqueviolations_over_sec +SQLServer2017XTPCursors_Cursorupdates_over_sec +SQLServer2017XTPCursors_Cursorwriteconflicts_over_sec +SQLServer2017XTPCursors_Dustycornerscanretries_over_sec_user_issued +SQLServer2017XTPCursors_Expiredrowsremoved_over_sec +SQLServer2017XTPCursors_Expiredrowstouched_over_sec +SQLServer2017XTPCursors_Rowsreturned_over_sec +SQLServer2017XTPCursors_Rowstouched_over_sec +SQLServer2017XTPCursors_Tentatively_deletedrowstouched_over_sec +SQLServer2017XTPGarbageCollection_Dustycornerscanretries_over_sec_GC_issued +SQLServer2017XTPGarbageCollection_MainGCworkitems_over_sec +SQLServer2017XTPGarbageCollection_ParallelGCworkitem_over_sec +SQLServer2017XTPGarbageCollection_Rowsprocessed_over_sec +SQLServer2017XTPGarbageCollection_Rowsprocessed_over_sec_firstinbucketandremoved +SQLServer2017XTPGarbageCollection_Rowsprocessed_over_sec_firstinbucket +SQLServer2017XTPGarbageCollection_Rowsprocessed_over_sec_markedforunlink +SQLServer2017XTPGarbageCollection_Rowsprocessed_over_sec_nosweepneeded +SQLServer2017XTPGarbageCollection_Sweepexpiredrowsremoved_over_sec +SQLServer2017XTPGarbageCollection_Sweepexpiredrowstouched_over_sec +SQLServer2017XTPGarbageCollection_Sweepexpiringrowstouched_over_sec +SQLServer2017XTPGarbageCollection_Sweeprowstouched_over_sec +SQLServer2017XTPGarbageCollection_Sweepscansstarted_over_sec +SQLServer2017XTPIOGovernor_InsufficientCreditsWaits_over_sec +SQLServer2017XTPIOGovernor_IoIssued_over_sec +SQLServer2017XTPIOGovernor_LogBlocks_over_sec +SQLServer2017XTPIOGovernor_MissedCreditSlots +SQLServer2017XTPIOGovernor_StaleRateObjectWaits_over_sec +SQLServer2017XTPIOGovernor_TotalRateObjectsPublished +SQLServer2017XTPPhantomProcessor_Dustycornerscanretries_over_sec_Phantom_issued +SQLServer2017XTPPhantomProcessor_Phantomexpiredrowsremoved_over_sec +SQLServer2017XTPPhantomProcessor_Phantomexpiredrowstouched_over_sec +SQLServer2017XTPPhantomProcessor_Phantomexpiringrowstouched_over_sec +SQLServer2017XTPPhantomProcessor_Phantomrowstouched_over_sec +SQLServer2017XTPPhantomProcessor_Phantomscansstarted_over_sec +SQLServer2017XTPStorage_CheckpointsClosed +SQLServer2017XTPStorage_CheckpointsCompleted +SQLServer2017XTPStorage_CoreMergesCompleted +SQLServer2017XTPStorage_MergePolicyEvaluations +SQLServer2017XTPStorage_MergeRequestsOutstanding +SQLServer2017XTPStorage_MergesAbandoned +SQLServer2017XTPStorage_MergesInstalled +SQLServer2017XTPStorage_TotalFilesMerged +SQLServer2017XTPTransactionLog_Logbyteswritten_over_sec +SQLServer2017XTPTransactionLog_Logrecordswritten_over_sec +SQLServer2017XTPTransactions_Cascadingaborts_over_sec +SQLServer2017XTPTransactions_Commitdependenciestaken_over_sec +SQLServer2017XTPTransactions_Read_onlytransactionsprepared_over_sec +SQLServer2017XTPTransactions_Savepointrefreshes_over_sec +SQLServer2017XTPTransactions_Savepointrollbacks_over_sec +SQLServer2017XTPTransactions_Savepointscreated_over_sec +SQLServer2017XTPTransactions_Transactionvalidationfailures_over_sec +SQLServer2017XTPTransactions_Transactionsabortedbyuser_over_sec +SQLServer2017XTPTransactions_Transactionsaborted_over_sec +SQLServer2017XTPTransactions_Transactionscreated_over_sec +SQLStatistics_Auto_ParamAttempts_over_sec +SQLStatistics_BatchRequests_over_sec +SQLStatistics_FailedAuto_Params_over_sec +SQLStatistics_ForcedParameterizations_over_sec +SQLStatistics_Guidedplanexecutions_over_sec +SQLStatistics_Misguidedplanexecutions_over_sec +SQLStatistics_SafeAuto_Params_over_sec +SQLStatistics_SQLAttentionrate +SQLStatistics_SQLCompilations_over_sec +SQLStatistics_SQLRe_Compilations_over_sec +SQLStatistics_UnsafeAuto_Params_over_sec +Transactions_FreeSpaceintempdb_KB +Transactions_LongestTransactionRunningTime +Transactions_NonSnapshotVersionTransactions +Transactions_SnapshotTransactions +Transactions_Transactions +Transactions_Updateconflictratio +Transactions_Updateconflictratiobase +Transactions_UpdateSnapshotTransactions +Transactions_VersionCleanuprate_KB_over_s +Transactions_VersionGenerationrate_KB_over_s +Transactions_VersionStoreSize_KB +Transactions_VersionStoreunitcount +Transactions_VersionStoreunitcreation +Transactions_VersionStoreunittruncation +UserSettable_Query +WaitStatistics_Lockwaits +WaitStatistics_Logbufferwaits +WaitStatistics_Logwritewaits +WaitStatistics_Memorygrantqueuewaits +WaitStatistics_NetworkIOwaits +WaitStatistics_Non_Pagelatchwaits +WaitStatistics_PageIOlatchwaits +WaitStatistics_Pagelatchwaits +WaitStatistics_Thread_safememoryobjectswaits +WaitStatistics_Transactionownershipwaits +WaitStatistics_Waitfortheworker +WaitStatistics_Workspacesynchronizationwaits +WorkloadGroupStats_Activeparallelthreads +WorkloadGroupStats_Activerequests +WorkloadGroupStats_Blockedtasks +WorkloadGroupStats_CPUdelayed_perc +WorkloadGroupStats_CPUdelayed_perc_base +WorkloadGroupStats_CPUeffective_perc +WorkloadGroupStats_CPUeffective_perc_base +WorkloadGroupStats_CPUusage_perc +WorkloadGroupStats_CPUusage_perc_base +WorkloadGroupStats_CPUviolated_perc +WorkloadGroupStats_Maxrequestcputime_ms +WorkloadGroupStats_Maxrequestmemorygrant_KB +WorkloadGroupStats_Queryoptimizations_over_sec +WorkloadGroupStats_Queuedrequests +WorkloadGroupStats_Reducedmemorygrants_over_sec +WorkloadGroupStats_Requestscompleted_over_sec +WorkloadGroupStats_Suboptimalplans_over_sec \ No newline at end of file diff --git a/Templates/PerformanceCounters/SQLStatistics.txt b/Templates/PerformanceCounters/SQLStatistics.txt new file mode 100644 index 0000000..1d46a7c --- /dev/null +++ b/Templates/PerformanceCounters/SQLStatistics.txt @@ -0,0 +1,11 @@ +SQLStatistics_Auto_ParamAttempts_over_sec +SQLStatistics_BatchRequests_over_sec +SQLStatistics_FailedAuto_Params_over_sec +SQLStatistics_ForcedParameterizations_over_sec +SQLStatistics_Guidedplanexecutions_over_sec +SQLStatistics_Misguidedplanexecutions_over_sec +SQLStatistics_SafeAuto_Params_over_sec +SQLStatistics_SQLAttentionrate +SQLStatistics_SQLCompilations_over_sec +SQLStatistics_SQLRe_Compilations_over_sec +SQLStatistics_UnsafeAuto_Params_over_sec \ No newline at end of file diff --git a/Templates/WaitStats/HADRON b/Templates/WaitStats/HADRON.txt similarity index 100% rename from Templates/WaitStats/HADRON rename to Templates/WaitStats/HADRON.txt diff --git a/sample/sample_config.json b/sample/sample_config.json index 2cb78ef..acd0f29 100644 --- a/sample/sample_config.json +++ b/sample/sample_config.json @@ -3,10 +3,16 @@ "instances": [{ "connectionString": "Server=.\\SQL17;Trusted_Connection=True;" }], - "waitStatsOptions": { - "waitStatsFiles": [ + "waitStats": { + "templateFiles": [ "Templates/WaitStats/CPU.txt", "Templates/WaitStats/Locks.txt" ] + }, + "performanceCounters": { + "templateFiles": [ + "Templates/PerformanceCounters/SQLStatistics.txt" + ] } + } \ No newline at end of file