Holmes 4.0.237

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

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

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.247 36 9/24/2024
4.0.246 67 9/23/2024
4.0.245 51 9/23/2024
4.0.244 110 9/17/2024
4.0.243 74 9/16/2024
4.0.242 96 9/10/2024
4.0.241 81 9/9/2024
4.0.240 86 9/6/2024
4.0.239 81 9/6/2024
4.0.238 91 9/3/2024
4.0.237 88 9/2/2024
4.0.236 82 8/30/2024
4.0.235 95 8/30/2024
4.0.234 90 8/28/2024
4.0.233 103 8/27/2024
4.0.232 92 8/26/2024
4.0.231 119 8/24/2024
4.0.230 117 8/23/2024
4.0.229 107 8/21/2024
4.0.228 117 8/21/2024
4.0.227 99 8/20/2024
4.0.226 93 8/19/2024
4.0.225 114 8/16/2024
4.0.224 108 8/16/2024
4.0.223 115 8/14/2024
4.0.222 93 8/5/2024
4.0.221 52 8/2/2024
4.0.220 65 8/1/2024
4.0.219 72 7/31/2024
4.0.218 96 7/26/2024
4.0.217 82 7/25/2024
4.0.216 70 7/25/2024
4.0.215 90 7/11/2024
4.0.214 81 7/10/2024
4.0.213 100 7/9/2024
4.0.212 80 7/9/2024
4.0.211 105 7/9/2024
4.0.210 95 7/5/2024
4.0.209 98 7/4/2024
4.0.208 123 7/3/2024
4.0.207 98 7/2/2024
4.0.206 93 6/27/2024
4.0.205 107 6/26/2024
4.0.204 102 6/25/2024
4.0.203 87 6/24/2024
4.0.202 767 6/19/2024
4.0.201 105 6/19/2024
4.0.200 98 6/17/2024
4.0.199 94 6/14/2024
4.0.198 83 6/14/2024
4.0.197 83 6/12/2024
4.0.196 97 6/3/2024
4.0.195 97 5/31/2024
4.0.194 85 5/30/2024
4.0.193 104 5/29/2024
4.0.192 93 5/28/2024
4.0.191 82 5/27/2024
4.0.190 104 5/23/2024
4.0.189 90 5/22/2024
4.0.188 110 5/21/2024
4.0.187 117 5/20/2024
4.0.186 111 5/18/2024
4.0.185 96 5/16/2024
4.0.184 101 5/15/2024
4.0.183 101 5/8/2024
4.0.182 112 5/7/2024
4.0.181 110 5/6/2024
4.0.180 102 5/3/2024
4.0.179 634 5/2/2024
4.0.178 71 5/2/2024
4.0.177 103 5/1/2024
4.0.176 103 4/29/2024
4.0.175 91 4/29/2024
4.0.174 95 4/25/2024
4.0.173 124 4/24/2024
4.0.172 98 4/16/2024
4.0.171 85 4/15/2024
4.0.170 127 4/13/2024
4.0.169 102 4/12/2024
4.0.168 115 4/11/2024
4.0.167 95 4/10/2024
4.0.166 91 4/9/2024
4.0.165 120 4/9/2024
4.0.164 99 4/1/2024
4.0.163 98 3/29/2024
4.0.162 111 3/29/2024
4.0.161 115 3/27/2024
4.0.160 108 3/22/2024
4.0.159 114 3/22/2024
4.0.158 105 3/18/2024
4.0.157 105 3/15/2024
4.0.156 99 3/14/2024
4.0.155 102 3/14/2024
4.0.154 107 3/11/2024
4.0.153 123 3/8/2024
4.0.152 121 3/7/2024
4.0.151 112 3/6/2024
4.0.150 142 3/5/2024
4.0.149 119 3/4/2024
4.0.148 951 3/2/2024
4.0.147 130 2/29/2024
4.0.146 88 2/29/2024
4.0.145 114 2/27/2024
4.0.144 96 2/26/2024
4.0.143 96 2/23/2024
4.0.142 105 2/22/2024
4.0.141 117 2/22/2024
4.0.140 104 2/21/2024
4.0.139 120 2/20/2024
4.0.138 92 2/19/2024
4.0.137 96 2/19/2024
4.0.136 100 2/16/2024
4.0.135 95 2/16/2024
4.0.134 102 2/15/2024
4.0.133 110 2/14/2024
4.0.132 97 2/14/2024
4.0.131 103 2/13/2024
4.0.130 132 2/9/2024
4.0.129 124 2/9/2024
4.0.128 116 2/7/2024
4.0.127 94 2/6/2024
4.0.126 92 2/6/2024
4.0.125 109 2/5/2024
4.0.124 117 2/3/2024
4.0.123 112 2/1/2024
4.0.122 96 2/1/2024
4.0.121 98 1/31/2024
4.0.120 110 1/29/2024
4.0.119 104 1/25/2024
4.0.118 91 1/24/2024
4.0.117 99 1/23/2024
4.0.116 100 1/22/2024
4.0.115 1,007 1/17/2024
4.0.114 102 1/16/2024
4.0.113 88 1/15/2024
4.0.112 115 1/12/2024
4.0.111 108 1/11/2024
4.0.110 120 1/10/2024
4.0.109 296 1/8/2024
4.0.108 120 1/6/2024
4.0.107 265 12/26/2023
4.0.106 104 12/26/2023
4.0.105 111 12/26/2023
4.0.104 126 12/25/2023
4.0.103 119 12/23/2023
4.0.102 119 12/21/2023
4.0.101 133 12/15/2023
4.0.100 115 12/14/2023
4.0.99 124 12/13/2023
4.0.98 130 12/13/2023
4.0.97 457 12/12/2023
4.0.96 106 12/12/2023
4.0.95 110 12/12/2023
4.0.94 108 12/11/2023
4.0.93 195 12/6/2023
4.0.92 137 12/6/2023
4.0.91 127 12/6/2023
4.0.90 108 12/4/2023
4.0.89 272 11/24/2023
4.0.88 141 11/24/2023
4.0.87 124 11/21/2023
4.0.86 138 11/20/2023
4.0.85 117 11/20/2023
4.0.84 170 11/17/2023
4.0.83 392 11/17/2023
4.0.82 141 11/15/2023
4.0.81 128 11/13/2023
4.0.80 145 11/9/2023
4.0.79 166 11/9/2023
4.0.78 122 11/8/2023
4.0.77 127 11/7/2023
4.0.76 126 11/6/2023
4.0.75 148 11/3/2023
4.0.74 178 11/2/2023
4.0.73 139 11/1/2023
4.0.72 141 10/31/2023
4.0.71 128 10/31/2023
4.0.70 125 10/30/2023
4.0.69 160 10/28/2023
4.0.68 136 10/26/2023
4.0.67 151 10/25/2023
4.0.66 139 10/17/2023
4.0.65 138 10/16/2023
4.0.64 117 10/16/2023
4.0.63 163 10/13/2023
4.0.62 160 10/12/2023
4.0.61 142 10/11/2023
4.0.60 167 10/5/2023
4.0.59 153 10/4/2023
4.0.58 165 9/26/2023
4.0.57 148 9/26/2023
4.0.56 155 9/22/2023
4.0.55 159 9/20/2023
4.0.54 152 9/19/2023
4.0.53 150 9/18/2023
4.0.52 134 9/18/2023
4.0.51 180 9/15/2023
4.0.50 146 9/14/2023
4.0.49 144 9/12/2023
4.0.48 219 9/12/2023
4.0.47 142 9/11/2023
4.0.46 158 9/11/2023
4.0.45 259 9/7/2023
4.0.44 173 9/6/2023
4.0.43 200 9/5/2023
4.0.42 163 9/4/2023
4.0.41 144 9/4/2023
4.0.40 191 9/1/2023
4.0.39 194 8/31/2023
4.0.38 179 8/31/2023
4.0.37 178 8/29/2023
4.0.36 166 8/29/2023
4.0.35 196 8/29/2023
4.0.34 199 8/25/2023
4.0.33 184 8/24/2023
4.0.32 179 8/23/2023
4.0.31 185 8/22/2023
4.0.30 184 8/18/2023
4.0.29 173 8/17/2023
4.0.28 193 8/17/2023
4.0.27 153 8/17/2023
4.0.26 270 8/10/2023
4.0.25 189 8/9/2023
4.0.24 208 8/8/2023
4.0.23 178 8/8/2023
4.0.22 148 8/8/2023
4.0.21 290 8/7/2023
4.0.20 194 8/4/2023
4.0.19 239 8/3/2023
4.0.18 187 8/2/2023
4.0.17 229 7/26/2023
4.0.16 211 7/25/2023
4.0.15 218 7/21/2023
4.0.14 182 7/19/2023
4.0.13 189 7/18/2023
4.0.12 164 7/18/2023
4.0.11 216 7/18/2023
4.0.10 167 7/18/2023
4.0.9 249 7/17/2023
4.0.8 178 7/17/2023
4.0.7 166 7/17/2023
4.0.6 171 7/17/2023
4.0.5 483 1/30/2023
4.0.4 261 1/30/2023
4.0.3 368 1/30/2023
4.0.2 365 1/27/2023
4.0.1 551 12/13/2022
4.0.0 297 12/12/2022
3.0.43 1,500 6/10/2022
3.0.41 925 4/20/2022
3.0.40 964 1/11/2022
3.0.39 744 1/10/2022
3.0.38 1,022 6/17/2021
3.0.37 731 6/16/2021
3.0.36 677 6/16/2021
3.0.35 473 6/16/2021
3.0.34 438 6/16/2021
3.0.33 909 1/7/2021
3.0.32 742 12/16/2020
3.0.31 697 12/14/2020
3.0.29 2,262 9/13/2020
3.0.28 824 6/19/2020
3.0.27 840 6/8/2020
3.0.26 1,592 5/12/2020
3.0.25 1,349 5/12/2020
3.0.24 832 4/28/2020
3.0.23 838 4/24/2020
3.0.22 814 4/16/2020
3.0.21 826 4/16/2020
3.0.20 559 4/15/2020
3.0.19 551 4/15/2020
3.0.18 1,097 4/14/2020
3.0.17 549 4/14/2020
3.0.16 888 4/10/2020
3.0.15 916 4/10/2020
3.0.14 3,010 3/26/2020
3.0.13 830 3/26/2020
3.0.12 575 3/25/2020
3.0.11 555 3/25/2020
3.0.10 548 3/25/2020
3.0.9 589 3/25/2020
3.0.8 581 3/25/2020
3.0.7 1,067 3/25/2020
3.0.6 1,243 3/21/2020
3.0.5 1,576 3/13/2020
3.0.4 594 3/13/2020
3.0.3 1,308 2/28/2020
3.0.2 1,126 2/21/2020
3.0.1 624 2/11/2020
3.0.0 1,790 12/23/2019
2.0.10 1,030 4/17/2019
2.0.9 1,539 2/21/2019
2.0.8 710 2/21/2019
2.0.7 3,828 8/1/2018
2.0.6 1,187 8/1/2018
2.0.5 1,497 6/26/2018
2.0.4 1,592 6/1/2018
2.0.3 1,532 5/22/2018
2.0.2 2,106 5/11/2018
2.0.1 2,168 2/13/2018
2.0.0 2,076 1/2/2018
1.0.10 13,920 6/16/2017
1.0.8 1,030 6/16/2017
1.0.7 993 5/30/2017
1.0.6 981 5/30/2017
1.0.5 966 5/25/2017
1.0.4 1,013 5/24/2017
1.0.0 989 5/24/2017