Holmes 4.0.134

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 4.0.134
NuGet\Install-Package Holmes -Version 4.0.134
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.134" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Holmes --version 4.0.134
#r "nuget: Holmes, 4.0.134"
#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.134

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

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.208 59 7/3/2024
4.0.207 66 7/2/2024
4.0.206 70 6/27/2024
4.0.205 72 6/26/2024
4.0.204 68 6/25/2024
4.0.203 66 6/24/2024
4.0.202 156 6/19/2024
4.0.201 78 6/19/2024
4.0.200 86 6/17/2024
4.0.199 83 6/14/2024
4.0.198 71 6/14/2024
4.0.197 66 6/12/2024
4.0.196 85 6/3/2024
4.0.195 78 5/31/2024
4.0.194 65 5/30/2024
4.0.193 82 5/29/2024
4.0.192 72 5/28/2024
4.0.191 74 5/27/2024
4.0.190 83 5/23/2024
4.0.189 81 5/22/2024
4.0.188 89 5/21/2024
4.0.187 97 5/20/2024
4.0.186 91 5/18/2024
4.0.185 89 5/16/2024
4.0.184 87 5/15/2024
4.0.183 78 5/8/2024
4.0.182 98 5/7/2024
4.0.181 104 5/6/2024
4.0.180 78 5/3/2024
4.0.179 521 5/2/2024
4.0.178 67 5/2/2024
4.0.177 86 5/1/2024
4.0.176 97 4/29/2024
4.0.175 84 4/29/2024
4.0.174 90 4/25/2024
4.0.173 97 4/24/2024
4.0.172 92 4/16/2024
4.0.171 79 4/15/2024
4.0.170 106 4/13/2024
4.0.169 84 4/12/2024
4.0.168 90 4/11/2024
4.0.167 86 4/10/2024
4.0.166 78 4/9/2024
4.0.165 92 4/9/2024
4.0.164 92 4/1/2024
4.0.163 92 3/29/2024
4.0.162 92 3/29/2024
4.0.161 94 3/27/2024
4.0.160 89 3/22/2024
4.0.159 92 3/22/2024
4.0.158 99 3/18/2024
4.0.157 99 3/15/2024
4.0.156 90 3/14/2024
4.0.155 86 3/14/2024
4.0.154 100 3/11/2024
4.0.153 102 3/8/2024
4.0.152 101 3/7/2024
4.0.151 100 3/6/2024
4.0.150 115 3/5/2024
4.0.149 103 3/4/2024
4.0.148 774 3/2/2024
4.0.147 100 2/29/2024
4.0.146 84 2/29/2024
4.0.145 97 2/27/2024
4.0.144 90 2/26/2024
4.0.143 89 2/23/2024
4.0.142 98 2/22/2024
4.0.141 91 2/22/2024
4.0.140 97 2/21/2024
4.0.139 99 2/20/2024
4.0.138 87 2/19/2024
4.0.137 91 2/19/2024
4.0.136 91 2/16/2024
4.0.135 88 2/16/2024
4.0.134 86 2/15/2024
4.0.133 104 2/14/2024
4.0.132 91 2/14/2024
4.0.131 97 2/13/2024
4.0.130 111 2/9/2024
4.0.129 96 2/9/2024
4.0.128 91 2/7/2024
4.0.127 85 2/6/2024
4.0.126 85 2/6/2024
4.0.125 85 2/5/2024
4.0.124 90 2/3/2024
4.0.123 88 2/1/2024
4.0.122 79 2/1/2024
4.0.121 83 1/31/2024
4.0.120 92 1/29/2024
4.0.119 89 1/25/2024
4.0.118 86 1/24/2024
4.0.117 85 1/23/2024
4.0.116 95 1/22/2024
4.0.115 808 1/17/2024
4.0.114 91 1/16/2024
4.0.113 85 1/15/2024
4.0.112 98 1/12/2024
4.0.111 92 1/11/2024
4.0.110 102 1/10/2024
4.0.109 253 1/8/2024
4.0.108 112 1/6/2024
4.0.107 224 12/26/2023
4.0.106 82 12/26/2023
4.0.105 105 12/26/2023
4.0.104 117 12/25/2023
4.0.103 103 12/23/2023
4.0.102 102 12/21/2023
4.0.101 118 12/15/2023
4.0.100 110 12/14/2023
4.0.99 104 12/13/2023
4.0.98 103 12/13/2023
4.0.97 365 12/12/2023
4.0.96 95 12/12/2023
4.0.95 104 12/12/2023
4.0.94 92 12/11/2023
4.0.93 164 12/6/2023
4.0.92 113 12/6/2023
4.0.91 122 12/6/2023
4.0.90 103 12/4/2023
4.0.89 221 11/24/2023
4.0.88 117 11/24/2023
4.0.87 109 11/21/2023
4.0.86 114 11/20/2023
4.0.85 99 11/20/2023
4.0.84 132 11/17/2023
4.0.83 310 11/17/2023
4.0.82 119 11/15/2023
4.0.81 110 11/13/2023
4.0.80 123 11/9/2023
4.0.79 136 11/9/2023
4.0.78 94 11/8/2023
4.0.77 105 11/7/2023
4.0.76 110 11/6/2023
4.0.75 111 11/3/2023
4.0.74 140 11/2/2023
4.0.73 124 11/1/2023
4.0.72 125 10/31/2023
4.0.71 113 10/31/2023
4.0.70 109 10/30/2023
4.0.69 129 10/28/2023
4.0.68 121 10/26/2023
4.0.67 118 10/25/2023
4.0.66 123 10/17/2023
4.0.65 112 10/16/2023
4.0.64 97 10/16/2023
4.0.63 131 10/13/2023
4.0.62 132 10/12/2023
4.0.61 127 10/11/2023
4.0.60 143 10/5/2023
4.0.59 136 10/4/2023
4.0.58 132 9/26/2023
4.0.57 124 9/26/2023
4.0.56 129 9/22/2023
4.0.55 129 9/20/2023
4.0.54 137 9/19/2023
4.0.53 134 9/18/2023
4.0.52 116 9/18/2023
4.0.51 159 9/15/2023
4.0.50 131 9/14/2023
4.0.49 130 9/12/2023
4.0.48 196 9/12/2023
4.0.47 123 9/11/2023
4.0.46 142 9/11/2023
4.0.45 235 9/7/2023
4.0.44 161 9/6/2023
4.0.43 176 9/5/2023
4.0.42 147 9/4/2023
4.0.41 125 9/4/2023
4.0.40 161 9/1/2023
4.0.39 163 8/31/2023
4.0.38 157 8/31/2023
4.0.37 164 8/29/2023
4.0.36 143 8/29/2023
4.0.35 167 8/29/2023
4.0.34 177 8/25/2023
4.0.33 169 8/24/2023
4.0.32 165 8/23/2023
4.0.31 173 8/22/2023
4.0.30 149 8/18/2023
4.0.29 152 8/17/2023
4.0.28 158 8/17/2023
4.0.27 135 8/17/2023
4.0.26 222 8/10/2023
4.0.25 174 8/9/2023
4.0.24 180 8/8/2023
4.0.23 162 8/8/2023
4.0.22 143 8/8/2023
4.0.21 252 8/7/2023
4.0.20 172 8/4/2023
4.0.19 225 8/3/2023
4.0.18 167 8/2/2023
4.0.17 197 7/26/2023
4.0.16 190 7/25/2023
4.0.15 205 7/21/2023
4.0.14 168 7/19/2023
4.0.13 165 7/18/2023
4.0.12 143 7/18/2023
4.0.11 182 7/18/2023
4.0.10 144 7/18/2023
4.0.9 220 7/17/2023
4.0.8 164 7/17/2023
4.0.7 151 7/17/2023
4.0.6 157 7/17/2023
4.0.5 449 1/30/2023
4.0.4 255 1/30/2023
4.0.3 357 1/30/2023
4.0.2 342 1/27/2023
4.0.1 524 12/13/2022
4.0.0 292 12/12/2022
3.0.43 1,461 6/10/2022
3.0.41 905 4/20/2022
3.0.40 937 1/11/2022
3.0.39 726 1/10/2022
3.0.38 975 6/17/2021
3.0.37 711 6/16/2021
3.0.36 655 6/16/2021
3.0.35 444 6/16/2021
3.0.34 433 6/16/2021
3.0.33 882 1/7/2021
3.0.32 717 12/16/2020
3.0.31 676 12/14/2020
3.0.29 2,193 9/13/2020
3.0.28 806 6/19/2020
3.0.27 812 6/8/2020
3.0.26 1,534 5/12/2020
3.0.25 1,305 5/12/2020
3.0.24 816 4/28/2020
3.0.23 823 4/24/2020
3.0.22 795 4/16/2020
3.0.21 807 4/16/2020
3.0.20 555 4/15/2020
3.0.19 531 4/15/2020
3.0.18 1,059 4/14/2020
3.0.17 532 4/14/2020
3.0.16 848 4/10/2020
3.0.15 886 4/10/2020
3.0.14 2,918 3/26/2020
3.0.13 810 3/26/2020
3.0.12 557 3/25/2020
3.0.11 540 3/25/2020
3.0.10 528 3/25/2020
3.0.9 566 3/25/2020
3.0.8 554 3/25/2020
3.0.7 1,037 3/25/2020
3.0.6 1,208 3/21/2020
3.0.5 1,531 3/13/2020
3.0.4 583 3/13/2020
3.0.3 1,262 2/28/2020
3.0.2 1,081 2/21/2020
3.0.1 610 2/11/2020
3.0.0 1,733 12/23/2019
2.0.10 1,010 4/17/2019
2.0.9 1,499 2/21/2019
2.0.8 698 2/21/2019
2.0.7 3,737 8/1/2018
2.0.6 1,159 8/1/2018
2.0.5 1,479 6/26/2018
2.0.4 1,556 6/1/2018
2.0.3 1,525 5/22/2018
2.0.2 2,065 5/11/2018
2.0.1 2,121 2/13/2018
2.0.0 2,030 1/2/2018
1.0.10 13,542 6/16/2017
1.0.8 1,017 6/16/2017
1.0.7 990 5/30/2017
1.0.6 967 5/30/2017
1.0.5 964 5/25/2017
1.0.4 997 5/24/2017
1.0.0 981 5/24/2017