Holmes 5.0.73

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 5.0.73
                    
NuGet\Install-Package Holmes -Version 5.0.73
                    
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.73" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.73" />
                    
Directory.Packages.props
<PackageReference Include="Holmes" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Holmes --version 5.0.73
                    
#r "nuget: Holmes, 5.0.73"
                    
#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.
#:package Holmes@5.0.73
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Holmes&version=5.0.73
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.73
                    
Install as a Cake Tool

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.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.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.74 0 9/16/2025
5.0.73 137 9/11/2025
5.0.72 139 9/10/2025
5.0.71 149 9/9/2025
5.0.70 300 8/20/2025
5.0.69 138 8/20/2025
5.0.68 135 8/20/2025
5.0.67 138 8/19/2025
5.0.66 137 8/19/2025
5.0.65 136 8/19/2025
5.0.64 146 8/15/2025
5.0.63 293 8/6/2025
5.0.62 249 8/5/2025
5.0.61 224 8/5/2025
5.0.60 228 8/5/2025
5.0.59 229 8/5/2025
5.0.58 213 8/5/2025
5.0.57 134 8/1/2025
5.0.56 125 7/29/2025
5.0.55 104 7/29/2025
5.0.54 187 7/17/2025
5.0.53 174 7/16/2025
5.0.52 179 7/15/2025
5.0.51 151 7/15/2025
5.0.50 146 7/15/2025
5.0.49 175 7/8/2025
5.0.48 273 7/1/2025
5.0.47 150 7/1/2025
5.0.46 154 7/1/2025
5.0.45 159 6/28/2025
5.0.44 82 6/27/2025
5.0.43 197 6/27/2025
5.0.42 197 6/26/2025
5.0.41 163 6/18/2025
5.0.40 303 6/10/2025
5.0.39 94 5/30/2025
5.0.38 102 5/23/2025
5.0.37 247 5/14/2025
5.0.36 99 5/2/2025
5.0.35 186 4/29/2025
5.0.34 213 4/10/2025
5.0.33 185 3/17/2025
5.0.32 142 2/24/2025
5.0.31 168 2/13/2025
5.0.30 279 2/3/2025
5.0.29 179 1/30/2025
5.0.28 139 1/29/2025
5.0.27 148 1/29/2025
5.0.26 159 1/28/2025
5.0.25 153 1/24/2025
5.0.24 145 1/23/2025
5.0.23 153 1/22/2025
5.0.22 155 1/16/2025
5.0.21 142 1/15/2025
5.0.20 91 1/14/2025
5.0.19 107 1/13/2025
5.0.18 126 1/10/2025
5.0.17 112 1/9/2025
5.0.16 90 1/8/2025
5.0.15 216 12/17/2024
5.0.14 162 12/16/2024
5.0.13 168 12/10/2024
5.0.12 152 12/9/2024
5.0.11 158 12/6/2024
5.0.10 204 11/27/2024
5.0.9 142 11/26/2024
5.0.8 175 11/26/2024
5.0.7 172 11/24/2024
5.0.6 140 11/24/2024
5.0.5 134 11/23/2024
5.0.4 136 11/23/2024
4.0.270 158 11/19/2024
4.0.269 149 11/11/2024
4.0.268 133 11/7/2024
4.0.267 137 11/5/2024
4.0.266 133 11/4/2024
4.0.265 148 11/1/2024
4.0.264 134 11/1/2024
4.0.263 138 10/30/2024
4.0.262 145 10/29/2024
4.0.261 138 10/29/2024
4.0.260 143 10/26/2024
4.0.259 148 10/24/2024
4.0.258 150 10/21/2024
4.0.257 155 10/17/2024
4.0.256 145 10/15/2024
4.0.255 146 10/11/2024
4.0.254 142 10/10/2024
4.0.253 138 10/9/2024
4.0.252 149 10/9/2024
4.0.251 188 10/3/2024
4.0.250 161 10/2/2024
4.0.249 163 9/30/2024
4.0.248 155 9/28/2024
4.0.247 141 9/24/2024
4.0.246 147 9/23/2024
4.0.245 145 9/23/2024
4.0.244 188 9/17/2024
4.0.243 168 9/16/2024
4.0.242 164 9/10/2024
4.0.241 150 9/9/2024
4.0.240 153 9/6/2024
4.0.239 151 9/6/2024
4.0.238 160 9/3/2024
4.0.237 164 9/2/2024
4.0.236 152 8/30/2024
4.0.235 156 8/30/2024
4.0.234 160 8/28/2024
4.0.233 167 8/27/2024
4.0.232 157 8/26/2024
4.0.231 186 8/24/2024
4.0.230 177 8/23/2024
4.0.229 185 8/21/2024
4.0.228 182 8/21/2024
4.0.227 170 8/20/2024
4.0.226 165 8/19/2024
4.0.225 179 8/16/2024
4.0.224 172 8/16/2024
4.0.223 180 8/14/2024
4.0.222 173 8/5/2024
4.0.221 124 8/2/2024
4.0.220 127 8/1/2024
4.0.219 137 7/31/2024
4.0.218 153 7/26/2024
4.0.217 152 7/25/2024
4.0.216 130 7/25/2024
4.0.215 160 7/11/2024
4.0.214 172 7/10/2024
4.0.213 178 7/9/2024
4.0.212 149 7/9/2024
4.0.211 162 7/9/2024
4.0.210 156 7/5/2024
4.0.209 160 7/4/2024
4.0.208 182 7/3/2024
4.0.207 158 7/2/2024
4.0.206 167 6/27/2024
4.0.205 164 6/26/2024
4.0.204 163 6/25/2024
4.0.203 157 6/24/2024
4.0.202 1,030 6/19/2024
4.0.201 168 6/19/2024
4.0.200 164 6/17/2024
4.0.199 165 6/14/2024
4.0.198 156 6/14/2024
4.0.197 141 6/12/2024
4.0.196 167 6/3/2024
4.0.195 157 5/31/2024
4.0.194 140 5/30/2024
4.0.193 161 5/29/2024
4.0.192 148 5/28/2024
4.0.191 156 5/27/2024
4.0.190 164 5/23/2024
4.0.189 163 5/22/2024
4.0.188 168 5/21/2024
4.0.187 177 5/20/2024
4.0.186 171 5/18/2024
4.0.185 168 5/16/2024
4.0.184 167 5/15/2024
4.0.183 166 5/8/2024
4.0.182 183 5/7/2024
4.0.181 183 5/6/2024
4.0.180 160 5/3/2024
4.0.179 695 5/2/2024
4.0.178 145 5/2/2024
4.0.177 165 5/1/2024
4.0.176 174 4/29/2024
4.0.175 159 4/29/2024
4.0.174 167 4/25/2024
4.0.173 180 4/24/2024
4.0.172 173 4/16/2024
4.0.171 166 4/15/2024
4.0.170 184 4/13/2024
4.0.169 158 4/12/2024
4.0.168 175 4/11/2024
4.0.167 171 4/10/2024
4.0.166 160 4/9/2024
4.0.165 180 4/9/2024
4.0.164 165 4/1/2024
4.0.163 163 3/29/2024
4.0.162 169 3/29/2024
4.0.161 173 3/27/2024
4.0.160 164 3/22/2024
4.0.159 172 3/22/2024
4.0.158 183 3/18/2024
4.0.157 176 3/15/2024
4.0.156 165 3/14/2024
4.0.155 174 3/14/2024
4.0.154 174 3/11/2024
4.0.153 182 3/8/2024
4.0.152 174 3/7/2024
4.0.151 185 3/6/2024
4.0.150 195 3/5/2024
4.0.149 196 3/4/2024
4.0.148 1,020 3/2/2024
4.0.147 187 2/29/2024
4.0.146 158 2/29/2024
4.0.145 171 2/27/2024
4.0.144 162 2/26/2024
4.0.143 167 2/23/2024
4.0.142 177 2/22/2024
4.0.141 175 2/22/2024
4.0.140 175 2/21/2024
4.0.139 178 2/20/2024
4.0.138 170 2/19/2024
4.0.137 175 2/19/2024
4.0.136 171 2/16/2024
4.0.135 166 2/16/2024
4.0.134 174 2/15/2024
4.0.133 191 2/14/2024
4.0.132 173 2/14/2024
4.0.131 174 2/13/2024
4.0.130 194 2/9/2024
4.0.129 183 2/9/2024
4.0.128 174 2/7/2024
4.0.127 160 2/6/2024
4.0.126 171 2/6/2024
4.0.125 167 2/5/2024
4.0.124 168 2/3/2024
4.0.123 177 2/1/2024
4.0.122 153 2/1/2024
4.0.121 165 1/31/2024
4.0.120 172 1/29/2024
4.0.119 161 1/25/2024
4.0.118 164 1/24/2024
4.0.117 168 1/23/2024
4.0.116 174 1/22/2024
4.0.115 1,075 1/17/2024
4.0.114 163 1/16/2024
4.0.113 165 1/15/2024
4.0.112 167 1/12/2024
4.0.111 176 1/11/2024
4.0.110 181 1/10/2024
4.0.109 363 1/8/2024
4.0.108 190 1/6/2024
4.0.107 324 12/26/2023
4.0.106 156 12/26/2023
4.0.105 163 12/26/2023
4.0.104 195 12/25/2023
4.0.103 173 12/23/2023
4.0.102 176 12/21/2023
4.0.101 186 12/15/2023
4.0.100 171 12/14/2023
4.0.99 174 12/13/2023
4.0.98 179 12/13/2023
4.0.97 521 12/12/2023
4.0.96 168 12/12/2023
4.0.95 161 12/12/2023
4.0.94 167 12/11/2023
4.0.93 228 12/6/2023
4.0.92 169 12/6/2023
4.0.91 170 12/6/2023
4.0.90 155 12/4/2023
4.0.89 303 11/24/2023
4.0.88 169 11/24/2023
4.0.87 165 11/21/2023
4.0.86 166 11/20/2023
4.0.85 145 11/20/2023
4.0.84 201 11/17/2023
4.0.83 671 11/17/2023
4.0.82 182 11/15/2023
4.0.81 166 11/13/2023
4.0.80 194 11/9/2023
4.0.79 207 11/9/2023
4.0.78 153 11/8/2023
4.0.77 164 11/7/2023
4.0.76 173 11/6/2023
4.0.75 180 11/3/2023
4.0.74 208 11/2/2023
4.0.73 182 11/1/2023
4.0.72 187 10/31/2023
4.0.71 163 10/31/2023
4.0.70 155 10/30/2023
4.0.69 194 10/28/2023
4.0.68 181 10/26/2023
4.0.67 187 10/25/2023
4.0.66 184 10/17/2023
4.0.65 174 10/16/2023
4.0.64 157 10/16/2023
4.0.63 201 10/13/2023
4.0.62 199 10/12/2023
4.0.61 190 10/11/2023
4.0.60 221 10/5/2023
4.0.59 191 10/4/2023
4.0.58 205 9/26/2023
4.0.57 187 9/26/2023
4.0.56 193 9/22/2023
4.0.55 196 9/20/2023
4.0.54 205 9/19/2023
4.0.53 197 9/18/2023
4.0.52 179 9/18/2023
4.0.51 239 9/15/2023
4.0.50 195 9/14/2023
4.0.49 195 9/12/2023
4.0.48 267 9/12/2023
4.0.47 192 9/11/2023
4.0.46 221 9/11/2023
4.0.45 332 9/7/2023
4.0.44 223 9/6/2023
4.0.43 256 9/5/2023
4.0.42 220 9/4/2023
4.0.41 202 9/4/2023
4.0.40 242 9/1/2023
4.0.39 244 8/31/2023
4.0.38 236 8/31/2023
4.0.37 239 8/29/2023
4.0.36 217 8/29/2023
4.0.35 246 8/29/2023
4.0.34 252 8/25/2023
4.0.33 237 8/24/2023
4.0.32 240 8/23/2023
4.0.31 248 8/22/2023
4.0.30 237 8/18/2023
4.0.29 226 8/17/2023
4.0.28 252 8/17/2023
4.0.27 204 8/17/2023
4.0.26 329 8/10/2023
4.0.25 253 8/9/2023
4.0.24 263 8/8/2023
4.0.23 236 8/8/2023
4.0.22 222 8/8/2023
4.0.21 347 8/7/2023
4.0.20 250 8/4/2023
4.0.19 305 8/3/2023
4.0.18 252 8/2/2023
4.0.17 284 7/26/2023
4.0.16 276 7/25/2023
4.0.15 288 7/21/2023
4.0.14 246 7/19/2023
4.0.13 247 7/18/2023
4.0.12 227 7/18/2023
4.0.11 277 7/18/2023
4.0.10 223 7/18/2023
4.0.9 325 7/17/2023
4.0.8 244 7/17/2023
4.0.7 224 7/17/2023
4.0.6 234 7/17/2023
4.0.5 551 1/30/2023
4.0.4 340 1/30/2023
4.0.3 437 1/30/2023
4.0.2 440 1/27/2023
4.0.1 618 12/13/2022
4.0.0 377 12/12/2022
3.0.43 1,582 6/10/2022
3.0.41 1,021 4/20/2022
3.0.40 1,059 1/11/2022
3.0.39 844 1/10/2022
3.0.38 1,124 6/17/2021
3.0.37 837 6/16/2021
3.0.36 782 6/16/2021
3.0.35 569 6/16/2021
3.0.34 545 6/16/2021
3.0.33 1,026 1/7/2021
3.0.32 857 12/16/2020
3.0.31 803 12/14/2020
3.0.29 2,392 9/13/2020
3.0.28 945 6/19/2020
3.0.27 949 6/8/2020
3.0.26 1,707 5/12/2020
3.0.25 1,472 5/12/2020
3.0.24 950 4/28/2020
3.0.23 951 4/24/2020
3.0.22 952 4/16/2020
3.0.21 958 4/16/2020
3.0.20 683 4/15/2020
3.0.19 668 4/15/2020
3.0.18 1,215 4/14/2020
3.0.17 668 4/14/2020
3.0.16 1,004 4/10/2020
3.0.15 1,029 4/10/2020
3.0.14 3,125 3/26/2020
3.0.13 945 3/26/2020
3.0.12 689 3/25/2020
3.0.11 671 3/25/2020
3.0.10 664 3/25/2020
3.0.9 704 3/25/2020
3.0.8 698 3/25/2020
3.0.7 1,184 3/25/2020
3.0.6 1,360 3/21/2020
3.0.5 1,697 3/13/2020
3.0.4 729 3/13/2020
3.0.3 1,423 2/28/2020
3.0.2 1,241 2/21/2020
3.0.1 748 2/11/2020
3.0.0 1,917 12/23/2019
2.0.10 1,150 4/17/2019
2.0.9 1,672 2/21/2019
2.0.8 849 2/21/2019
2.0.7 4,072 8/1/2018
2.0.6 1,433 8/1/2018
2.0.5 1,744 6/26/2018
2.0.4 1,945 6/1/2018
2.0.3 1,903 5/22/2018
2.0.2 2,476 5/11/2018
2.0.1 2,537 2/13/2018
2.0.0 2,455 1/2/2018
1.0.10 14,171 6/16/2017
1.0.8 1,293 6/16/2017
1.0.7 1,258 5/30/2017
1.0.6 1,230 5/30/2017
1.0.5 1,242 5/25/2017
1.0.4 1,264 5/24/2017
1.0.0 1,295 5/24/2017