Holmes 5.0.20

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

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

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 net8.0 is compatible.  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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.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
5.0.33 56 3/17/2025
5.0.32 95 2/24/2025
5.0.31 118 2/13/2025
5.0.30 163 2/3/2025
5.0.29 124 1/30/2025
5.0.28 94 1/29/2025
5.0.27 93 1/29/2025
5.0.26 108 1/28/2025
5.0.25 103 1/24/2025
5.0.24 101 1/23/2025
5.0.23 104 1/22/2025
5.0.22 107 1/16/2025
5.0.21 98 1/15/2025
5.0.20 40 1/14/2025
5.0.19 62 1/13/2025
5.0.18 83 1/10/2025
5.0.17 65 1/9/2025
5.0.16 46 1/8/2025
5.0.15 171 12/17/2024
5.0.14 116 12/16/2024
5.0.13 123 12/10/2024
5.0.12 110 12/9/2024
5.0.11 115 12/6/2024
5.0.10 161 11/27/2024
5.0.9 95 11/26/2024
5.0.8 130 11/26/2024
5.0.7 122 11/24/2024
5.0.6 94 11/24/2024
5.0.5 89 11/23/2024
5.0.4 93 11/23/2024
4.0.270 113 11/19/2024
4.0.269 102 11/11/2024
4.0.268 88 11/7/2024
4.0.267 91 11/5/2024
4.0.266 90 11/4/2024
4.0.265 98 11/1/2024
4.0.264 92 11/1/2024
4.0.263 95 10/30/2024
4.0.262 100 10/29/2024
4.0.261 93 10/29/2024
4.0.260 100 10/26/2024
4.0.259 101 10/24/2024
4.0.258 107 10/21/2024
4.0.257 117 10/17/2024
4.0.256 105 10/15/2024
4.0.255 105 10/11/2024
4.0.254 102 10/10/2024
4.0.253 97 10/9/2024
4.0.252 106 10/9/2024
4.0.251 140 10/3/2024
4.0.250 116 10/2/2024
4.0.249 119 9/30/2024
4.0.248 109 9/28/2024
4.0.247 99 9/24/2024
4.0.246 103 9/23/2024
4.0.245 100 9/23/2024
4.0.244 145 9/17/2024
4.0.243 124 9/16/2024
4.0.242 124 9/10/2024
4.0.241 110 9/9/2024
4.0.240 112 9/6/2024
4.0.239 108 9/6/2024
4.0.238 117 9/3/2024
4.0.237 125 9/2/2024
4.0.236 112 8/30/2024
4.0.235 115 8/30/2024
4.0.234 113 8/28/2024
4.0.233 125 8/27/2024
4.0.232 113 8/26/2024
4.0.231 142 8/24/2024
4.0.230 137 8/23/2024
4.0.229 137 8/21/2024
4.0.228 136 8/21/2024
4.0.227 130 8/20/2024
4.0.226 126 8/19/2024
4.0.225 135 8/16/2024
4.0.224 131 8/16/2024
4.0.223 136 8/14/2024
4.0.222 122 8/5/2024
4.0.221 84 8/2/2024
4.0.220 86 8/1/2024
4.0.219 96 7/31/2024
4.0.218 116 7/26/2024
4.0.217 101 7/25/2024
4.0.216 87 7/25/2024
4.0.215 117 7/11/2024
4.0.214 124 7/10/2024
4.0.213 136 7/9/2024
4.0.212 106 7/9/2024
4.0.211 121 7/9/2024
4.0.210 114 7/5/2024
4.0.209 114 7/4/2024
4.0.208 139 7/3/2024
4.0.207 115 7/2/2024
4.0.206 125 6/27/2024
4.0.205 122 6/26/2024
4.0.204 120 6/25/2024
4.0.203 117 6/24/2024
4.0.202 990 6/19/2024
4.0.201 126 6/19/2024
4.0.200 127 6/17/2024
4.0.199 125 6/14/2024
4.0.198 116 6/14/2024
4.0.197 103 6/12/2024
4.0.196 124 6/3/2024
4.0.195 116 5/31/2024
4.0.194 100 5/30/2024
4.0.193 119 5/29/2024
4.0.192 107 5/28/2024
4.0.191 114 5/27/2024
4.0.190 123 5/23/2024
4.0.189 121 5/22/2024
4.0.188 129 5/21/2024
4.0.187 138 5/20/2024
4.0.186 127 5/18/2024
4.0.185 127 5/16/2024
4.0.184 127 5/15/2024
4.0.183 122 5/8/2024
4.0.182 142 5/7/2024
4.0.181 145 5/6/2024
4.0.180 122 5/3/2024
4.0.179 653 5/2/2024
4.0.178 105 5/2/2024
4.0.177 127 5/1/2024
4.0.176 135 4/29/2024
4.0.175 118 4/29/2024
4.0.174 124 4/25/2024
4.0.173 139 4/24/2024
4.0.172 129 4/16/2024
4.0.171 123 4/15/2024
4.0.170 145 4/13/2024
4.0.169 120 4/12/2024
4.0.168 135 4/11/2024
4.0.167 132 4/10/2024
4.0.166 122 4/9/2024
4.0.165 140 4/9/2024
4.0.164 129 4/1/2024
4.0.163 125 3/29/2024
4.0.162 129 3/29/2024
4.0.161 131 3/27/2024
4.0.160 124 3/22/2024
4.0.159 133 3/22/2024
4.0.158 137 3/18/2024
4.0.157 138 3/15/2024
4.0.156 125 3/14/2024
4.0.155 132 3/14/2024
4.0.154 136 3/11/2024
4.0.153 139 3/8/2024
4.0.152 135 3/7/2024
4.0.151 143 3/6/2024
4.0.150 157 3/5/2024
4.0.149 153 3/4/2024
4.0.148 976 3/2/2024
4.0.147 147 2/29/2024
4.0.146 121 2/29/2024
4.0.145 134 2/27/2024
4.0.144 124 2/26/2024
4.0.143 126 2/23/2024
4.0.142 137 2/22/2024
4.0.141 139 2/22/2024
4.0.140 134 2/21/2024
4.0.139 139 2/20/2024
4.0.138 129 2/19/2024
4.0.137 135 2/19/2024
4.0.136 133 2/16/2024
4.0.135 130 2/16/2024
4.0.134 130 2/15/2024
4.0.133 152 2/14/2024
4.0.132 133 2/14/2024
4.0.131 133 2/13/2024
4.0.130 152 2/9/2024
4.0.129 141 2/9/2024
4.0.128 138 2/7/2024
4.0.127 124 2/6/2024
4.0.126 132 2/6/2024
4.0.125 128 2/5/2024
4.0.124 132 2/3/2024
4.0.123 137 2/1/2024
4.0.122 115 2/1/2024
4.0.121 124 1/31/2024
4.0.120 132 1/29/2024
4.0.119 120 1/25/2024
4.0.118 121 1/24/2024
4.0.117 129 1/23/2024
4.0.116 131 1/22/2024
4.0.115 1,036 1/17/2024
4.0.114 125 1/16/2024
4.0.113 125 1/15/2024
4.0.112 129 1/12/2024
4.0.111 135 1/11/2024
4.0.110 134 1/10/2024
4.0.109 324 1/8/2024
4.0.108 151 1/6/2024
4.0.107 289 12/26/2023
4.0.106 121 12/26/2023
4.0.105 124 12/26/2023
4.0.104 157 12/25/2023
4.0.103 135 12/23/2023
4.0.102 137 12/21/2023
4.0.101 148 12/15/2023
4.0.100 131 12/14/2023
4.0.99 138 12/13/2023
4.0.98 143 12/13/2023
4.0.97 479 12/12/2023
4.0.96 133 12/12/2023
4.0.95 124 12/12/2023
4.0.94 126 12/11/2023
4.0.93 213 12/6/2023
4.0.92 155 12/6/2023
4.0.91 155 12/6/2023
4.0.90 136 12/4/2023
4.0.89 290 11/24/2023
4.0.88 155 11/24/2023
4.0.87 150 11/21/2023
4.0.86 152 11/20/2023
4.0.85 133 11/20/2023
4.0.84 187 11/17/2023
4.0.83 585 11/17/2023
4.0.82 165 11/15/2023
4.0.81 151 11/13/2023
4.0.80 177 11/9/2023
4.0.79 192 11/9/2023
4.0.78 139 11/8/2023
4.0.77 151 11/7/2023
4.0.76 160 11/6/2023
4.0.75 162 11/3/2023
4.0.74 194 11/2/2023
4.0.73 167 11/1/2023
4.0.72 170 10/31/2023
4.0.71 146 10/31/2023
4.0.70 141 10/30/2023
4.0.69 176 10/28/2023
4.0.68 160 10/26/2023
4.0.67 167 10/25/2023
4.0.66 164 10/17/2023
4.0.65 153 10/16/2023
4.0.64 133 10/16/2023
4.0.63 180 10/13/2023
4.0.62 180 10/12/2023
4.0.61 168 10/11/2023
4.0.60 197 10/5/2023
4.0.59 169 10/4/2023
4.0.58 181 9/26/2023
4.0.57 165 9/26/2023
4.0.56 171 9/22/2023
4.0.55 176 9/20/2023
4.0.54 179 9/19/2023
4.0.53 174 9/18/2023
4.0.52 151 9/18/2023
4.0.51 212 9/15/2023
4.0.50 171 9/14/2023
4.0.49 173 9/12/2023
4.0.48 238 9/12/2023
4.0.47 158 9/11/2023
4.0.46 189 9/11/2023
4.0.45 296 9/7/2023
4.0.44 191 9/6/2023
4.0.43 224 9/5/2023
4.0.42 188 9/4/2023
4.0.41 169 9/4/2023
4.0.40 208 9/1/2023
4.0.39 210 8/31/2023
4.0.38 203 8/31/2023
4.0.37 205 8/29/2023
4.0.36 184 8/29/2023
4.0.35 213 8/29/2023
4.0.34 216 8/25/2023
4.0.33 202 8/24/2023
4.0.32 206 8/23/2023
4.0.31 212 8/22/2023
4.0.30 202 8/18/2023
4.0.29 190 8/17/2023
4.0.28 218 8/17/2023
4.0.27 170 8/17/2023
4.0.26 287 8/10/2023
4.0.25 215 8/9/2023
4.0.24 224 8/8/2023
4.0.23 196 8/8/2023
4.0.22 182 8/8/2023
4.0.21 308 8/7/2023
4.0.20 213 8/4/2023
4.0.19 265 8/3/2023
4.0.18 215 8/2/2023
4.0.17 246 7/26/2023
4.0.16 238 7/25/2023
4.0.15 245 7/21/2023
4.0.14 205 7/19/2023
4.0.13 207 7/18/2023
4.0.12 182 7/18/2023
4.0.11 236 7/18/2023
4.0.10 183 7/18/2023
4.0.9 284 7/17/2023
4.0.8 201 7/17/2023
4.0.7 184 7/17/2023
4.0.6 189 7/17/2023
4.0.5 505 1/30/2023
4.0.4 290 1/30/2023
4.0.3 389 1/30/2023
4.0.2 393 1/27/2023
4.0.1 573 12/13/2022
4.0.0 332 12/12/2022
3.0.43 1,526 6/10/2022
3.0.41 962 4/20/2022
3.0.40 999 1/11/2022
3.0.39 782 1/10/2022
3.0.38 1,052 6/17/2021
3.0.37 770 6/16/2021
3.0.36 716 6/16/2021
3.0.35 501 6/16/2021
3.0.34 479 6/16/2021
3.0.33 950 1/7/2021
3.0.32 781 12/16/2020
3.0.31 724 12/14/2020
3.0.29 2,314 9/13/2020
3.0.28 866 6/19/2020
3.0.27 872 6/8/2020
3.0.26 1,625 5/12/2020
3.0.25 1,390 5/12/2020
3.0.24 865 4/28/2020
3.0.23 870 4/24/2020
3.0.22 870 4/16/2020
3.0.21 876 4/16/2020
3.0.20 601 4/15/2020
3.0.19 584 4/15/2020
3.0.18 1,130 4/14/2020
3.0.17 579 4/14/2020
3.0.16 920 4/10/2020
3.0.15 947 4/10/2020
3.0.14 3,041 3/26/2020
3.0.13 861 3/26/2020
3.0.12 608 3/25/2020
3.0.11 588 3/25/2020
3.0.10 580 3/25/2020
3.0.9 621 3/25/2020
3.0.8 612 3/25/2020
3.0.7 1,104 3/25/2020
3.0.6 1,275 3/21/2020
3.0.5 1,613 3/13/2020
3.0.4 645 3/13/2020
3.0.3 1,338 2/28/2020
3.0.2 1,158 2/21/2020
3.0.1 664 2/11/2020
3.0.0 1,834 12/23/2019
2.0.10 1,065 4/17/2019
2.0.9 1,584 2/21/2019
2.0.8 762 2/21/2019
2.0.7 3,906 8/1/2018
2.0.6 1,266 8/1/2018
2.0.5 1,577 6/26/2018
2.0.4 1,693 6/1/2018
2.0.3 1,653 5/22/2018
2.0.2 2,214 5/11/2018
2.0.1 2,287 2/13/2018
2.0.0 2,200 1/2/2018
1.0.10 14,000 6/16/2017
1.0.8 1,123 6/16/2017
1.0.7 1,088 5/30/2017
1.0.6 1,062 5/30/2017
1.0.5 1,074 5/25/2017
1.0.4 1,095 5/24/2017
1.0.0 1,123 5/24/2017