Holmes 5.0.106

dotnet add package Holmes --version 5.0.106
                    
NuGet\Install-Package Holmes -Version 5.0.106
                    
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.106" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.106" />
                    
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.106
                    
#r "nuget: Holmes, 5.0.106"
                    
#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.106
                    
#: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.106
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.106
                    
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.106 62 1/8/2026
5.0.105 39 1/8/2026
5.0.104 271 12/24/2025
5.0.103 206 12/23/2025
5.0.102 203 12/22/2025
5.0.101 204 12/11/2025
5.0.100 459 12/10/2025
5.0.99 489 12/9/2025
5.0.98 746 12/2/2025
5.0.97 673 12/2/2025
5.0.96 672 12/2/2025
5.0.95 553 11/18/2025
5.0.94 243 11/14/2025
5.0.93 218 11/14/2025
5.0.92 339 11/13/2025
5.0.91 326 11/13/2025
5.0.90 330 11/13/2025
5.0.89 263 11/6/2025
5.0.88 212 10/31/2025
5.0.87 295 10/17/2025
5.0.86 234 10/16/2025
5.0.85 225 10/15/2025
5.0.84 286 10/14/2025
5.0.83 227 10/13/2025
5.0.82 272 10/12/2025
5.0.81 298 9/30/2025
5.0.80 234 9/30/2025
5.0.79 187 9/30/2025
5.0.78 191 9/30/2025
5.0.77 278 9/25/2025
5.0.76 405 9/18/2025
5.0.75 380 9/17/2025
5.0.74 357 9/16/2025
5.0.73 237 9/11/2025
5.0.72 219 9/10/2025
5.0.71 225 9/9/2025
5.0.70 389 8/20/2025
5.0.69 202 8/20/2025
5.0.68 198 8/20/2025
5.0.67 196 8/19/2025
5.0.66 194 8/19/2025
5.0.65 196 8/19/2025
5.0.64 249 8/15/2025
5.0.63 367 8/6/2025
5.0.62 318 8/5/2025
5.0.61 280 8/5/2025
5.0.60 282 8/5/2025
5.0.59 294 8/5/2025
5.0.58 279 8/5/2025
5.0.57 249 8/1/2025
5.0.56 272 7/29/2025
5.0.55 164 7/29/2025
5.0.54 263 7/17/2025
5.0.53 249 7/16/2025
5.0.52 254 7/15/2025
5.0.51 205 7/15/2025
5.0.50 203 7/15/2025
5.0.49 233 7/8/2025
5.0.48 357 7/1/2025
5.0.47 204 7/1/2025
5.0.46 210 7/1/2025
5.0.45 250 6/28/2025
5.0.44 139 6/27/2025
5.0.43 273 6/27/2025
5.0.42 273 6/26/2025
5.0.41 243 6/18/2025
5.0.40 360 6/10/2025
5.0.39 151 5/30/2025
5.0.38 162 5/23/2025
5.0.37 306 5/14/2025
5.0.36 161 5/2/2025
5.0.35 245 4/29/2025
5.0.34 277 4/10/2025
5.0.33 239 3/17/2025
5.0.32 201 2/24/2025
5.0.31 223 2/13/2025
5.0.30 343 2/3/2025
5.0.29 240 1/30/2025
5.0.28 205 1/29/2025
5.0.27 198 1/29/2025
5.0.26 223 1/28/2025
5.0.25 223 1/24/2025
5.0.24 219 1/23/2025
5.0.23 225 1/22/2025
5.0.22 218 1/16/2025
5.0.21 204 1/15/2025
5.0.20 163 1/14/2025
5.0.19 169 1/13/2025
5.0.18 187 1/10/2025
5.0.17 178 1/9/2025
5.0.16 143 1/8/2025
5.0.15 273 12/17/2024
5.0.14 225 12/16/2024
5.0.13 236 12/10/2024
5.0.12 227 12/9/2024
5.0.11 236 12/6/2024
5.0.10 271 11/27/2024
5.0.9 191 11/26/2024
5.0.8 246 11/26/2024
5.0.7 242 11/24/2024
5.0.6 185 11/24/2024
5.0.5 186 11/23/2024
5.0.4 176 11/23/2024
4.0.270 210 11/19/2024
4.0.269 196 11/11/2024
4.0.268 189 11/7/2024
4.0.267 180 11/5/2024
4.0.266 186 11/4/2024
4.0.265 215 11/1/2024
4.0.264 188 11/1/2024
4.0.263 193 10/30/2024
4.0.262 197 10/29/2024
4.0.261 195 10/29/2024
4.0.260 200 10/26/2024
4.0.259 200 10/24/2024
4.0.258 201 10/21/2024
4.0.257 206 10/17/2024
4.0.256 189 10/15/2024
4.0.255 200 10/11/2024
4.0.254 185 10/10/2024
4.0.253 198 10/9/2024
4.0.252 216 10/9/2024
4.0.251 237 10/3/2024
4.0.250 210 10/2/2024
4.0.249 215 9/30/2024
4.0.248 210 9/28/2024
4.0.247 188 9/24/2024
4.0.246 207 9/23/2024
4.0.245 205 9/23/2024
4.0.244 228 9/17/2024
4.0.243 221 9/16/2024
4.0.242 217 9/10/2024
4.0.241 203 9/9/2024
4.0.240 200 9/6/2024
4.0.239 199 9/6/2024
4.0.238 213 9/3/2024
4.0.237 226 9/2/2024
4.0.236 202 8/30/2024
4.0.235 199 8/30/2024
4.0.234 210 8/28/2024
4.0.233 219 8/27/2024
4.0.232 198 8/26/2024
4.0.231 237 8/24/2024
4.0.230 216 8/23/2024
4.0.229 235 8/21/2024
4.0.228 228 8/21/2024
4.0.227 217 8/20/2024
4.0.226 212 8/19/2024
4.0.225 227 8/16/2024
4.0.224 225 8/16/2024
4.0.223 237 8/14/2024
4.0.222 230 8/5/2024
4.0.221 185 8/2/2024
4.0.220 186 8/1/2024
4.0.219 189 7/31/2024
4.0.218 210 7/26/2024
4.0.217 210 7/25/2024
4.0.216 186 7/25/2024
4.0.215 215 7/11/2024
4.0.214 225 7/10/2024
4.0.213 229 7/9/2024
4.0.212 199 7/9/2024
4.0.211 221 7/9/2024
4.0.210 202 7/5/2024
4.0.209 211 7/4/2024
4.0.208 234 7/3/2024
4.0.207 210 7/2/2024
4.0.206 229 6/27/2024
4.0.205 210 6/26/2024
4.0.204 217 6/25/2024
4.0.203 217 6/24/2024
4.0.202 1,338 6/19/2024
4.0.201 225 6/19/2024
4.0.200 213 6/17/2024
4.0.199 214 6/14/2024
4.0.198 206 6/14/2024
4.0.197 209 6/12/2024
4.0.196 223 6/3/2024
4.0.195 208 5/31/2024
4.0.194 182 5/30/2024
4.0.193 213 5/29/2024
4.0.192 201 5/28/2024
4.0.191 204 5/27/2024
4.0.190 202 5/23/2024
4.0.189 212 5/22/2024
4.0.188 215 5/21/2024
4.0.187 229 5/20/2024
4.0.186 227 5/18/2024
4.0.185 216 5/16/2024
4.0.184 218 5/15/2024
4.0.183 228 5/8/2024
4.0.182 234 5/7/2024
4.0.181 239 5/6/2024
4.0.180 210 5/3/2024
4.0.179 932 5/2/2024
4.0.178 194 5/2/2024
4.0.177 211 5/1/2024
4.0.176 226 4/29/2024
4.0.175 210 4/29/2024
4.0.174 230 4/25/2024
4.0.173 229 4/24/2024
4.0.172 224 4/16/2024
4.0.171 216 4/15/2024
4.0.170 237 4/13/2024
4.0.169 197 4/12/2024
4.0.168 216 4/11/2024
4.0.167 222 4/10/2024
4.0.166 214 4/9/2024
4.0.165 235 4/9/2024
4.0.164 219 4/1/2024
4.0.163 214 3/29/2024
4.0.162 230 3/29/2024
4.0.161 226 3/27/2024
4.0.160 208 3/22/2024
4.0.159 225 3/22/2024
4.0.158 246 3/18/2024
4.0.157 233 3/15/2024
4.0.156 225 3/14/2024
4.0.155 220 3/14/2024
4.0.154 216 3/11/2024
4.0.153 234 3/8/2024
4.0.152 226 3/7/2024
4.0.151 245 3/6/2024
4.0.150 264 3/5/2024
4.0.149 242 3/4/2024
4.0.148 1,365 3/2/2024
4.0.147 241 2/29/2024
4.0.146 209 2/29/2024
4.0.145 227 2/27/2024
4.0.144 211 2/26/2024
4.0.143 215 2/23/2024
4.0.142 232 2/22/2024
4.0.141 225 2/22/2024
4.0.140 222 2/21/2024
4.0.139 232 2/20/2024
4.0.138 237 2/19/2024
4.0.137 216 2/19/2024
4.0.136 231 2/16/2024
4.0.135 217 2/16/2024
4.0.134 228 2/15/2024
4.0.133 246 2/14/2024
4.0.132 213 2/14/2024
4.0.131 217 2/13/2024
4.0.130 254 2/9/2024
4.0.129 234 2/9/2024
4.0.128 210 2/7/2024
4.0.127 213 2/6/2024
4.0.126 226 2/6/2024
4.0.125 223 2/5/2024
4.0.124 221 2/3/2024
4.0.123 220 2/1/2024
4.0.122 208 2/1/2024
4.0.121 215 1/31/2024
4.0.120 228 1/29/2024
4.0.119 210 1/25/2024
4.0.118 217 1/24/2024
4.0.117 217 1/23/2024
4.0.116 221 1/22/2024
4.0.115 1,487 1/17/2024
4.0.114 195 1/16/2024
4.0.113 206 1/15/2024
4.0.112 210 1/12/2024
4.0.111 230 1/11/2024
4.0.110 236 1/10/2024
4.0.109 484 1/8/2024
4.0.108 243 1/6/2024
4.0.107 405 12/26/2023
4.0.106 209 12/26/2023
4.0.105 214 12/26/2023
4.0.104 244 12/25/2023
4.0.103 220 12/23/2023
4.0.102 225 12/21/2023
4.0.101 235 12/15/2023
4.0.100 225 12/14/2023
4.0.99 223 12/13/2023
4.0.98 231 12/13/2023
4.0.97 691 12/12/2023
4.0.96 217 12/12/2023
4.0.95 211 12/12/2023
4.0.94 218 12/11/2023
4.0.93 264 12/6/2023
4.0.92 205 12/6/2023
4.0.91 212 12/6/2023
4.0.90 189 12/4/2023
4.0.89 385 11/24/2023
4.0.88 214 11/24/2023
4.0.87 218 11/21/2023
4.0.86 216 11/20/2023
4.0.85 188 11/20/2023
4.0.84 267 11/17/2023
4.0.83 716 11/17/2023
4.0.82 215 11/15/2023
4.0.81 212 11/13/2023
4.0.80 250 11/9/2023
4.0.79 269 11/9/2023
4.0.78 182 11/8/2023
4.0.77 205 11/7/2023
4.0.76 219 11/6/2023
4.0.75 239 11/3/2023
4.0.74 264 11/2/2023
4.0.73 218 11/1/2023
4.0.72 246 10/31/2023
4.0.71 200 10/31/2023
4.0.70 200 10/30/2023
4.0.69 241 10/28/2023
4.0.68 236 10/26/2023
4.0.67 228 10/25/2023
4.0.66 230 10/17/2023
4.0.65 226 10/16/2023
4.0.64 197 10/16/2023
4.0.63 240 10/13/2023
4.0.62 250 10/12/2023
4.0.61 235 10/11/2023
4.0.60 276 10/5/2023
4.0.59 219 10/4/2023
4.0.58 256 9/26/2023
4.0.57 232 9/26/2023
4.0.56 241 9/22/2023
4.0.55 233 9/20/2023
4.0.54 239 9/19/2023
4.0.53 242 9/18/2023
4.0.52 217 9/18/2023
4.0.51 282 9/15/2023
4.0.50 245 9/14/2023
4.0.49 238 9/12/2023
4.0.48 313 9/12/2023
4.0.47 225 9/11/2023
4.0.46 259 9/11/2023
4.0.45 400 9/7/2023
4.0.44 268 9/6/2023
4.0.43 308 9/5/2023
4.0.42 266 9/4/2023
4.0.41 238 9/4/2023
4.0.40 297 9/1/2023
4.0.39 288 8/31/2023
4.0.38 288 8/31/2023
4.0.37 288 8/29/2023
4.0.36 254 8/29/2023
4.0.35 293 8/29/2023
4.0.34 309 8/25/2023
4.0.33 293 8/24/2023
4.0.32 294 8/23/2023
4.0.31 285 8/22/2023
4.0.30 285 8/18/2023
4.0.29 266 8/17/2023
4.0.28 309 8/17/2023
4.0.27 245 8/17/2023
4.0.26 388 8/10/2023
4.0.25 309 8/9/2023
4.0.24 315 8/8/2023
4.0.23 284 8/8/2023
4.0.22 268 8/8/2023
4.0.21 402 8/7/2023
4.0.20 300 8/4/2023
4.0.19 371 8/3/2023
4.0.18 302 8/2/2023
4.0.17 333 7/26/2023
4.0.16 339 7/25/2023
4.0.15 328 7/21/2023
4.0.14 306 7/19/2023
4.0.13 299 7/18/2023
4.0.12 268 7/18/2023
4.0.11 337 7/18/2023
4.0.10 260 7/18/2023
4.0.9 388 7/17/2023
4.0.8 290 7/17/2023
4.0.7 266 7/17/2023
4.0.6 277 7/17/2023
4.0.5 626 1/30/2023
4.0.4 392 1/30/2023
4.0.3 506 1/30/2023
4.0.2 508 1/27/2023
4.0.1 692 12/13/2022
4.0.0 431 12/12/2022
3.0.43 1,685 6/10/2022
3.0.41 1,094 4/20/2022
3.0.40 1,155 1/11/2022
3.0.39 922 1/10/2022
3.0.38 1,212 6/17/2021
3.0.37 904 6/16/2021
3.0.36 859 6/16/2021
3.0.35 634 6/16/2021
3.0.34 610 6/16/2021
3.0.33 1,134 1/7/2021
3.0.32 947 12/16/2020
3.0.31 886 12/14/2020
3.0.29 2,588 9/13/2020
3.0.28 1,053 6/19/2020
3.0.27 1,046 6/8/2020
3.0.26 1,804 5/12/2020
3.0.25 1,590 5/12/2020
3.0.24 1,050 4/28/2020
3.0.23 1,032 4/24/2020
3.0.22 1,036 4/16/2020
3.0.21 1,048 4/16/2020
3.0.20 751 4/15/2020
3.0.19 746 4/15/2020
3.0.18 1,294 4/14/2020
3.0.17 739 4/14/2020
3.0.16 1,095 4/10/2020
3.0.15 1,092 4/10/2020
3.0.14 3,259 3/26/2020
3.0.13 1,023 3/26/2020
3.0.12 768 3/25/2020
3.0.11 733 3/25/2020
3.0.10 737 3/25/2020
3.0.9 783 3/25/2020
3.0.8 776 3/25/2020
3.0.7 1,274 3/25/2020
3.0.6 1,466 3/21/2020
3.0.5 1,785 3/13/2020
3.0.4 792 3/13/2020
3.0.3 1,521 2/28/2020
3.0.2 1,317 2/21/2020
3.0.1 826 2/11/2020
3.0.0 2,016 12/23/2019
2.0.10 1,235 4/17/2019
2.0.9 1,767 2/21/2019
2.0.8 913 2/21/2019
2.0.7 4,307 8/1/2018
2.0.6 1,539 8/1/2018
2.0.5 1,865 6/26/2018
2.0.4 2,128 6/1/2018
2.0.3 2,077 5/22/2018
2.0.2 2,649 5/11/2018
2.0.1 2,687 2/13/2018
2.0.0 2,654 1/2/2018
1.0.10 14,715 6/16/2017
1.0.8 1,405 6/16/2017
1.0.7 1,377 5/30/2017
1.0.6 1,356 5/30/2017
1.0.5 1,358 5/25/2017
1.0.4 1,383 5/24/2017
1.0.0 1,411 5/24/2017