Holmes 4.0.187

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 4.0.187
NuGet\Install-Package Holmes -Version 4.0.187
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Holmes" Version="4.0.187" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Holmes --version 4.0.187
#r "nuget: Holmes, 4.0.187"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Holmes as a Cake Addin
#addin nuget:?package=Holmes&version=4.0.187

// Install Holmes as a Cake Tool
#tool nuget:?package=Holmes&version=4.0.187

Holmes

Build status

Holmes is a database analysis library. It scans a database and returns suggestions for improvement. Supports .Net Core as well as full .Net

Setting Up the Library

In order to use Holmes, you need to start by wiring it up on your ServiceCollection. However this takes just one extension method call:

serviceCollection.AddCanisterModules();
				

When this is done, Holmes is ready to use.

Basic Usage

The main class of interest is the Sherlock class:

var Results = Sherlock.Analyze(new Connection(...));

The Sherlock class contains one function which is Analyze. This function takes a Connection object defining where the library should be pointed. It will then, based on the provider specified in the connection object, run any analysis classes that it has and returns a list of Finding objects. The Finding class looks like this:

public class Finding
{
	public string Fix { get; }
	public IDictionary<string, object> Metrics { get; }
	public string Text { get; }
}

The Text property contains the explination of what was found, the Metrics property contains the data that was returned by the analysis object, and the Fix property contains the SQL command that can be used to remedy the issue. Note that not all analysis classes will contain a suggested fix. This is optional where as the other two properties will always contain some information.

Adding Your Own Analyzer

The system a couple of built in analyzers:

  • SQL Server
    • Recent expensive queries
    • Missing indexes
    • Overlapping indexes
    • Unused indexes

However you can easily add your own analyzer by simply creating a class that inherits from IAnalyzer. The system will then pick it up automatically and run it as well. For simple analyzers there is also an AnalyzerBaseClass that will simplify the process of setting up your analyzer. The IAnalyzer interface itself is rather simple though:

public interface IAnalyzer
{
    /// <summary>
    /// Gets the factory the analyzer supports.
    /// </summary>
    /// <value>Gets the factory the analyzer supports.</value>
    DbProviderFactory SupportedFactory { get; }

    /// <summary>
    /// Adds the query the analyzer needs to the batch.
    /// </summary>
    /// <param name="batch">The batch.</param>
    /// <returns>This.</returns>
    IAnalyzer AddQuery(SQLHelper.SQLHelper batch);

    /// <summary>
    /// Analyzes the specified connection's source database.
    /// </summary>
    /// <param name="results">The results of the analysis.</param>
    /// <returns>The list of suggestions for the database.</returns>
    IEnumerable<Finding> Analyze(IEnumerable<dynamic> results);
}

The SupportedFactory property is the DbProviderFactory that this analyzer should be run against. All analyzer queries are batched together by the system and run at once. As such there is an AddQuery function. With this function the system passes you the SQLHelper object it is using to batch the various queries. The one method on that you will probably use is AddQuery. The only other method is Analyze. This method recieves the results of the query as a list of dynamic objects. The names of each property is the same as the result set of the query you specified previously. In turn you should return a list of Finding objects.

Installation

The library is available via Nuget with the package name "Holmes". To install it run the following command in the Package Manager Console:

Install-Package Holmes

Build Process

In order to build the library you will require the following:

  1. Visual Studio 2022

Other than that, just clone the project and you should be able to load the solution and build without too much effort.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Holmes:

Package Downloads
Inflatable

Inflatable is a simple ORM.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.198 28 6/14/2024
4.0.197 35 6/12/2024
4.0.196 82 6/3/2024
4.0.195 76 5/31/2024
4.0.194 63 5/30/2024
4.0.193 80 5/29/2024
4.0.192 70 5/28/2024
4.0.191 72 5/27/2024
4.0.190 81 5/23/2024
4.0.189 79 5/22/2024
4.0.188 87 5/21/2024
4.0.187 95 5/20/2024
4.0.186 89 5/18/2024
4.0.185 87 5/16/2024
4.0.184 85 5/15/2024
4.0.183 76 5/8/2024
4.0.182 96 5/7/2024
4.0.181 102 5/6/2024
4.0.180 75 5/3/2024
4.0.179 379 5/2/2024
4.0.178 64 5/2/2024
4.0.177 83 5/1/2024
4.0.176 95 4/29/2024
4.0.175 82 4/29/2024
4.0.174 88 4/25/2024
4.0.173 95 4/24/2024
4.0.172 90 4/16/2024
4.0.171 77 4/15/2024
4.0.170 99 4/13/2024
4.0.169 83 4/12/2024
4.0.168 89 4/11/2024
4.0.167 85 4/10/2024
4.0.166 77 4/9/2024
4.0.165 91 4/9/2024
4.0.164 91 4/1/2024
4.0.163 91 3/29/2024
4.0.162 91 3/29/2024
4.0.161 93 3/27/2024
4.0.160 88 3/22/2024
4.0.159 91 3/22/2024
4.0.158 98 3/18/2024
4.0.157 98 3/15/2024
4.0.156 89 3/14/2024
4.0.155 85 3/14/2024
4.0.154 99 3/11/2024
4.0.153 101 3/8/2024
4.0.152 100 3/7/2024
4.0.151 99 3/6/2024
4.0.150 114 3/5/2024
4.0.149 102 3/4/2024
4.0.148 773 3/2/2024
4.0.147 99 2/29/2024
4.0.146 83 2/29/2024
4.0.145 96 2/27/2024
4.0.144 89 2/26/2024
4.0.143 86 2/23/2024
4.0.142 95 2/22/2024
4.0.141 88 2/22/2024
4.0.140 94 2/21/2024
4.0.139 96 2/20/2024
4.0.138 84 2/19/2024
4.0.137 88 2/19/2024
4.0.136 88 2/16/2024
4.0.135 86 2/16/2024
4.0.134 85 2/15/2024
4.0.133 103 2/14/2024
4.0.132 89 2/14/2024
4.0.131 95 2/13/2024
4.0.130 109 2/9/2024
4.0.129 94 2/9/2024
4.0.128 89 2/7/2024
4.0.127 83 2/6/2024
4.0.126 83 2/6/2024
4.0.125 83 2/5/2024
4.0.124 88 2/3/2024
4.0.123 86 2/1/2024
4.0.122 77 2/1/2024
4.0.121 81 1/31/2024
4.0.120 88 1/29/2024
4.0.119 85 1/25/2024
4.0.118 82 1/24/2024
4.0.117 81 1/23/2024
4.0.116 91 1/22/2024
4.0.115 804 1/17/2024
4.0.114 87 1/16/2024
4.0.113 81 1/15/2024
4.0.112 94 1/12/2024
4.0.111 90 1/11/2024
4.0.110 100 1/10/2024
4.0.109 249 1/8/2024
4.0.108 108 1/6/2024
4.0.107 223 12/26/2023
4.0.106 81 12/26/2023
4.0.105 104 12/26/2023
4.0.104 116 12/25/2023
4.0.103 102 12/23/2023
4.0.102 101 12/21/2023
4.0.101 117 12/15/2023
4.0.100 109 12/14/2023
4.0.99 103 12/13/2023
4.0.98 102 12/13/2023
4.0.97 364 12/12/2023
4.0.96 94 12/12/2023
4.0.95 103 12/12/2023
4.0.94 91 12/11/2023
4.0.93 163 12/6/2023
4.0.92 112 12/6/2023
4.0.91 121 12/6/2023
4.0.90 102 12/4/2023
4.0.89 220 11/24/2023
4.0.88 116 11/24/2023
4.0.87 108 11/21/2023
4.0.86 113 11/20/2023
4.0.85 98 11/20/2023
4.0.84 131 11/17/2023
4.0.83 303 11/17/2023
4.0.82 118 11/15/2023
4.0.81 109 11/13/2023
4.0.80 122 11/9/2023
4.0.79 135 11/9/2023
4.0.78 93 11/8/2023
4.0.77 104 11/7/2023
4.0.76 109 11/6/2023
4.0.75 110 11/3/2023
4.0.74 139 11/2/2023
4.0.73 123 11/1/2023
4.0.72 124 10/31/2023
4.0.71 112 10/31/2023
4.0.70 108 10/30/2023
4.0.69 128 10/28/2023
4.0.68 120 10/26/2023
4.0.67 117 10/25/2023
4.0.66 122 10/17/2023
4.0.65 111 10/16/2023
4.0.64 96 10/16/2023
4.0.63 130 10/13/2023
4.0.62 131 10/12/2023
4.0.61 126 10/11/2023
4.0.60 142 10/5/2023
4.0.59 135 10/4/2023
4.0.58 131 9/26/2023
4.0.57 123 9/26/2023
4.0.56 128 9/22/2023
4.0.55 128 9/20/2023
4.0.54 136 9/19/2023
4.0.53 127 9/18/2023
4.0.52 115 9/18/2023
4.0.51 158 9/15/2023
4.0.50 130 9/14/2023
4.0.49 129 9/12/2023
4.0.48 195 9/12/2023
4.0.47 122 9/11/2023
4.0.46 141 9/11/2023
4.0.45 234 9/7/2023
4.0.44 160 9/6/2023
4.0.43 175 9/5/2023
4.0.42 146 9/4/2023
4.0.41 124 9/4/2023
4.0.40 160 9/1/2023
4.0.39 162 8/31/2023
4.0.38 156 8/31/2023
4.0.37 163 8/29/2023
4.0.36 142 8/29/2023
4.0.35 166 8/29/2023
4.0.34 170 8/25/2023
4.0.33 168 8/24/2023
4.0.32 164 8/23/2023
4.0.31 172 8/22/2023
4.0.30 148 8/18/2023
4.0.29 151 8/17/2023
4.0.28 157 8/17/2023
4.0.27 134 8/17/2023
4.0.26 221 8/10/2023
4.0.25 173 8/9/2023
4.0.24 179 8/8/2023
4.0.23 161 8/8/2023
4.0.22 142 8/8/2023
4.0.21 251 8/7/2023
4.0.20 171 8/4/2023
4.0.19 224 8/3/2023
4.0.18 166 8/2/2023
4.0.17 196 7/26/2023
4.0.16 189 7/25/2023
4.0.15 204 7/21/2023
4.0.14 167 7/19/2023
4.0.13 164 7/18/2023
4.0.12 142 7/18/2023
4.0.11 181 7/18/2023
4.0.10 143 7/18/2023
4.0.9 219 7/17/2023
4.0.8 163 7/17/2023
4.0.7 150 7/17/2023
4.0.6 156 7/17/2023
4.0.5 447 1/30/2023
4.0.4 254 1/30/2023
4.0.3 356 1/30/2023
4.0.2 341 1/27/2023
4.0.1 523 12/13/2022
4.0.0 291 12/12/2022
3.0.43 1,460 6/10/2022
3.0.41 904 4/20/2022
3.0.40 936 1/11/2022
3.0.39 725 1/10/2022
3.0.38 974 6/17/2021
3.0.37 710 6/16/2021
3.0.36 654 6/16/2021
3.0.35 443 6/16/2021
3.0.34 432 6/16/2021
3.0.33 880 1/7/2021
3.0.32 715 12/16/2020
3.0.31 674 12/14/2020
3.0.29 2,190 9/13/2020
3.0.28 805 6/19/2020
3.0.27 811 6/8/2020
3.0.26 1,533 5/12/2020
3.0.25 1,304 5/12/2020
3.0.24 815 4/28/2020
3.0.23 822 4/24/2020
3.0.22 788 4/16/2020
3.0.21 806 4/16/2020
3.0.20 554 4/15/2020
3.0.19 530 4/15/2020
3.0.18 1,058 4/14/2020
3.0.17 531 4/14/2020
3.0.16 847 4/10/2020
3.0.15 885 4/10/2020
3.0.14 2,917 3/26/2020
3.0.13 809 3/26/2020
3.0.12 556 3/25/2020
3.0.11 539 3/25/2020
3.0.10 527 3/25/2020
3.0.9 565 3/25/2020
3.0.8 553 3/25/2020
3.0.7 1,036 3/25/2020
3.0.6 1,205 3/21/2020
3.0.5 1,530 3/13/2020
3.0.4 582 3/13/2020
3.0.3 1,261 2/28/2020
3.0.2 1,080 2/21/2020
3.0.1 609 2/11/2020
3.0.0 1,732 12/23/2019
2.0.10 1,009 4/17/2019
2.0.9 1,498 2/21/2019
2.0.8 697 2/21/2019
2.0.7 3,736 8/1/2018
2.0.6 1,158 8/1/2018
2.0.5 1,478 6/26/2018
2.0.4 1,555 6/1/2018
2.0.3 1,524 5/22/2018
2.0.2 2,064 5/11/2018
2.0.1 2,120 2/13/2018
2.0.0 2,029 1/2/2018
1.0.10 13,541 6/16/2017
1.0.8 1,016 6/16/2017
1.0.7 989 5/30/2017
1.0.6 966 5/30/2017
1.0.5 963 5/25/2017
1.0.4 996 5/24/2017
1.0.0 980 5/24/2017