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 185 1/8/2026
5.0.105 88 1/8/2026
5.0.104 274 12/24/2025
5.0.103 210 12/23/2025
5.0.102 207 12/22/2025
5.0.101 209 12/11/2025
5.0.100 463 12/10/2025
5.0.99 492 12/9/2025
5.0.98 748 12/2/2025
5.0.97 676 12/2/2025
5.0.96 674 12/2/2025
5.0.95 557 11/18/2025
5.0.94 247 11/14/2025
5.0.93 221 11/14/2025
5.0.92 339 11/13/2025
5.0.91 330 11/13/2025
5.0.90 336 11/13/2025
5.0.89 265 11/6/2025
5.0.88 216 10/31/2025
5.0.87 298 10/17/2025
5.0.86 236 10/16/2025
5.0.85 227 10/15/2025
5.0.84 289 10/14/2025
5.0.83 232 10/13/2025
5.0.82 274 10/12/2025
5.0.81 300 9/30/2025
5.0.80 237 9/30/2025
5.0.79 188 9/30/2025
5.0.78 192 9/30/2025
5.0.77 279 9/25/2025
5.0.76 410 9/18/2025
5.0.75 384 9/17/2025
5.0.74 359 9/16/2025
5.0.73 241 9/11/2025
5.0.72 222 9/10/2025
5.0.71 226 9/9/2025
5.0.70 391 8/20/2025
5.0.69 204 8/20/2025
5.0.68 199 8/20/2025
5.0.67 199 8/19/2025
5.0.66 198 8/19/2025
5.0.65 199 8/19/2025
5.0.64 251 8/15/2025
5.0.63 369 8/6/2025
5.0.62 319 8/5/2025
5.0.61 283 8/5/2025
5.0.60 287 8/5/2025
5.0.59 297 8/5/2025
5.0.58 281 8/5/2025
5.0.57 253 8/1/2025
5.0.56 281 7/29/2025
5.0.55 168 7/29/2025
5.0.54 266 7/17/2025
5.0.53 251 7/16/2025
5.0.52 255 7/15/2025
5.0.51 207 7/15/2025
5.0.50 205 7/15/2025
5.0.49 236 7/8/2025
5.0.48 362 7/1/2025
5.0.47 208 7/1/2025
5.0.46 213 7/1/2025
5.0.45 253 6/28/2025
5.0.44 143 6/27/2025
5.0.43 273 6/27/2025
5.0.42 276 6/26/2025
5.0.41 245 6/18/2025
5.0.40 365 6/10/2025
5.0.39 154 5/30/2025
5.0.38 164 5/23/2025
5.0.37 307 5/14/2025
5.0.36 164 5/2/2025
5.0.35 247 4/29/2025
5.0.34 280 4/10/2025
5.0.33 241 3/17/2025
5.0.32 202 2/24/2025
5.0.31 225 2/13/2025
5.0.30 343 2/3/2025
5.0.29 241 1/30/2025
5.0.28 207 1/29/2025
5.0.27 200 1/29/2025
5.0.26 224 1/28/2025
5.0.25 223 1/24/2025
5.0.24 221 1/23/2025
5.0.23 228 1/22/2025
5.0.22 219 1/16/2025
5.0.21 207 1/15/2025
5.0.20 165 1/14/2025
5.0.19 172 1/13/2025
5.0.18 191 1/10/2025
5.0.17 179 1/9/2025
5.0.16 145 1/8/2025
5.0.15 276 12/17/2024
5.0.14 229 12/16/2024
5.0.13 236 12/10/2024
5.0.12 229 12/9/2024
5.0.11 236 12/6/2024
5.0.10 272 11/27/2024
5.0.9 194 11/26/2024
5.0.8 248 11/26/2024
5.0.7 243 11/24/2024
5.0.6 185 11/24/2024
5.0.5 190 11/23/2024
5.0.4 178 11/23/2024
4.0.270 212 11/19/2024
4.0.269 197 11/11/2024
4.0.268 192 11/7/2024
4.0.267 185 11/5/2024
4.0.266 187 11/4/2024
4.0.265 216 11/1/2024
4.0.264 192 11/1/2024
4.0.263 195 10/30/2024
4.0.262 198 10/29/2024
4.0.261 197 10/29/2024
4.0.260 203 10/26/2024
4.0.259 201 10/24/2024
4.0.258 204 10/21/2024
4.0.257 208 10/17/2024
4.0.256 190 10/15/2024
4.0.255 202 10/11/2024
4.0.254 187 10/10/2024
4.0.253 201 10/9/2024
4.0.252 219 10/9/2024
4.0.251 240 10/3/2024
4.0.250 211 10/2/2024
4.0.249 218 9/30/2024
4.0.248 211 9/28/2024
4.0.247 191 9/24/2024
4.0.246 209 9/23/2024
4.0.245 208 9/23/2024
4.0.244 231 9/17/2024
4.0.243 221 9/16/2024
4.0.242 220 9/10/2024
4.0.241 210 9/9/2024
4.0.240 204 9/6/2024
4.0.239 201 9/6/2024
4.0.238 215 9/3/2024
4.0.237 231 9/2/2024
4.0.236 204 8/30/2024
4.0.235 203 8/30/2024
4.0.234 212 8/28/2024
4.0.233 220 8/27/2024
4.0.232 199 8/26/2024
4.0.231 238 8/24/2024
4.0.230 221 8/23/2024
4.0.229 235 8/21/2024
4.0.228 232 8/21/2024
4.0.227 218 8/20/2024
4.0.226 216 8/19/2024
4.0.225 228 8/16/2024
4.0.224 229 8/16/2024
4.0.223 241 8/14/2024
4.0.222 234 8/5/2024
4.0.221 185 8/2/2024
4.0.220 189 8/1/2024
4.0.219 191 7/31/2024
4.0.218 212 7/26/2024
4.0.217 213 7/25/2024
4.0.216 188 7/25/2024
4.0.215 218 7/11/2024
4.0.214 228 7/10/2024
4.0.213 229 7/9/2024
4.0.212 200 7/9/2024
4.0.211 223 7/9/2024
4.0.210 206 7/5/2024
4.0.209 216 7/4/2024
4.0.208 237 7/3/2024
4.0.207 212 7/2/2024
4.0.206 229 6/27/2024
4.0.205 214 6/26/2024
4.0.204 219 6/25/2024
4.0.203 219 6/24/2024
4.0.202 1,341 6/19/2024
4.0.201 230 6/19/2024
4.0.200 214 6/17/2024
4.0.199 217 6/14/2024
4.0.198 208 6/14/2024
4.0.197 210 6/12/2024
4.0.196 227 6/3/2024
4.0.195 210 5/31/2024
4.0.194 186 5/30/2024
4.0.193 218 5/29/2024
4.0.192 203 5/28/2024
4.0.191 208 5/27/2024
4.0.190 203 5/23/2024
4.0.189 215 5/22/2024
4.0.188 218 5/21/2024
4.0.187 230 5/20/2024
4.0.186 228 5/18/2024
4.0.185 220 5/16/2024
4.0.184 222 5/15/2024
4.0.183 230 5/8/2024
4.0.182 239 5/7/2024
4.0.181 247 5/6/2024
4.0.180 213 5/3/2024
4.0.179 933 5/2/2024
4.0.178 197 5/2/2024
4.0.177 214 5/1/2024
4.0.176 227 4/29/2024
4.0.175 211 4/29/2024
4.0.174 234 4/25/2024
4.0.173 233 4/24/2024
4.0.172 226 4/16/2024
4.0.171 217 4/15/2024
4.0.170 238 4/13/2024
4.0.169 198 4/12/2024
4.0.168 218 4/11/2024
4.0.167 223 4/10/2024
4.0.166 215 4/9/2024
4.0.165 237 4/9/2024
4.0.164 223 4/1/2024
4.0.163 216 3/29/2024
4.0.162 231 3/29/2024
4.0.161 229 3/27/2024
4.0.160 209 3/22/2024
4.0.159 229 3/22/2024
4.0.158 247 3/18/2024
4.0.157 235 3/15/2024
4.0.156 228 3/14/2024
4.0.155 222 3/14/2024
4.0.154 220 3/11/2024
4.0.153 239 3/8/2024
4.0.152 232 3/7/2024
4.0.151 248 3/6/2024
4.0.150 270 3/5/2024
4.0.149 245 3/4/2024
4.0.148 1,368 3/2/2024
4.0.147 243 2/29/2024
4.0.146 211 2/29/2024
4.0.145 230 2/27/2024
4.0.144 212 2/26/2024
4.0.143 218 2/23/2024
4.0.142 234 2/22/2024
4.0.141 229 2/22/2024
4.0.140 223 2/21/2024
4.0.139 236 2/20/2024
4.0.138 238 2/19/2024
4.0.137 219 2/19/2024
4.0.136 233 2/16/2024
4.0.135 222 2/16/2024
4.0.134 229 2/15/2024
4.0.133 248 2/14/2024
4.0.132 216 2/14/2024
4.0.131 221 2/13/2024
4.0.130 259 2/9/2024
4.0.129 237 2/9/2024
4.0.128 217 2/7/2024
4.0.127 216 2/6/2024
4.0.126 229 2/6/2024
4.0.125 223 2/5/2024
4.0.124 224 2/3/2024
4.0.123 224 2/1/2024
4.0.122 210 2/1/2024
4.0.121 217 1/31/2024
4.0.120 229 1/29/2024
4.0.119 215 1/25/2024
4.0.118 220 1/24/2024
4.0.117 222 1/23/2024
4.0.116 223 1/22/2024
4.0.115 1,490 1/17/2024
4.0.114 200 1/16/2024
4.0.113 208 1/15/2024
4.0.112 210 1/12/2024
4.0.111 232 1/11/2024
4.0.110 241 1/10/2024
4.0.109 488 1/8/2024
4.0.108 245 1/6/2024
4.0.107 410 12/26/2023
4.0.106 213 12/26/2023
4.0.105 219 12/26/2023
4.0.104 246 12/25/2023
4.0.103 225 12/23/2023
4.0.102 229 12/21/2023
4.0.101 240 12/15/2023
4.0.100 229 12/14/2023
4.0.99 228 12/13/2023
4.0.98 233 12/13/2023
4.0.97 694 12/12/2023
4.0.96 219 12/12/2023
4.0.95 213 12/12/2023
4.0.94 220 12/11/2023
4.0.93 266 12/6/2023
4.0.92 206 12/6/2023
4.0.91 214 12/6/2023
4.0.90 194 12/4/2023
4.0.89 388 11/24/2023
4.0.88 215 11/24/2023
4.0.87 222 11/21/2023
4.0.86 219 11/20/2023
4.0.85 192 11/20/2023
4.0.84 268 11/17/2023
4.0.83 718 11/17/2023
4.0.82 218 11/15/2023
4.0.81 214 11/13/2023
4.0.80 251 11/9/2023
4.0.79 270 11/9/2023
4.0.78 184 11/8/2023
4.0.77 208 11/7/2023
4.0.76 221 11/6/2023
4.0.75 243 11/3/2023
4.0.74 264 11/2/2023
4.0.73 219 11/1/2023
4.0.72 248 10/31/2023
4.0.71 201 10/31/2023
4.0.70 200 10/30/2023
4.0.69 243 10/28/2023
4.0.68 237 10/26/2023
4.0.67 230 10/25/2023
4.0.66 232 10/17/2023
4.0.65 228 10/16/2023
4.0.64 198 10/16/2023
4.0.63 243 10/13/2023
4.0.62 252 10/12/2023
4.0.61 237 10/11/2023
4.0.60 277 10/5/2023
4.0.59 219 10/4/2023
4.0.58 261 9/26/2023
4.0.57 236 9/26/2023
4.0.56 245 9/22/2023
4.0.55 236 9/20/2023
4.0.54 243 9/19/2023
4.0.53 245 9/18/2023
4.0.52 218 9/18/2023
4.0.51 284 9/15/2023
4.0.50 248 9/14/2023
4.0.49 239 9/12/2023
4.0.48 314 9/12/2023
4.0.47 230 9/11/2023
4.0.46 260 9/11/2023
4.0.45 402 9/7/2023
4.0.44 271 9/6/2023
4.0.43 309 9/5/2023
4.0.42 266 9/4/2023
4.0.41 240 9/4/2023
4.0.40 297 9/1/2023
4.0.39 291 8/31/2023
4.0.38 291 8/31/2023
4.0.37 291 8/29/2023
4.0.36 257 8/29/2023
4.0.35 296 8/29/2023
4.0.34 314 8/25/2023
4.0.33 294 8/24/2023
4.0.32 295 8/23/2023
4.0.31 287 8/22/2023
4.0.30 286 8/18/2023
4.0.29 267 8/17/2023
4.0.28 310 8/17/2023
4.0.27 249 8/17/2023
4.0.26 389 8/10/2023
4.0.25 310 8/9/2023
4.0.24 317 8/8/2023
4.0.23 287 8/8/2023
4.0.22 271 8/8/2023
4.0.21 404 8/7/2023
4.0.20 301 8/4/2023
4.0.19 371 8/3/2023
4.0.18 304 8/2/2023
4.0.17 335 7/26/2023
4.0.16 342 7/25/2023
4.0.15 332 7/21/2023
4.0.14 309 7/19/2023
4.0.13 301 7/18/2023
4.0.12 271 7/18/2023
4.0.11 341 7/18/2023
4.0.10 263 7/18/2023
4.0.9 393 7/17/2023
4.0.8 292 7/17/2023
4.0.7 273 7/17/2023
4.0.6 280 7/17/2023
4.0.5 630 1/30/2023
4.0.4 393 1/30/2023
4.0.3 508 1/30/2023
4.0.2 510 1/27/2023
4.0.1 693 12/13/2022
4.0.0 438 12/12/2022
3.0.43 1,687 6/10/2022
3.0.41 1,096 4/20/2022
3.0.40 1,158 1/11/2022
3.0.39 926 1/10/2022
3.0.38 1,213 6/17/2021
3.0.37 909 6/16/2021
3.0.36 863 6/16/2021
3.0.35 637 6/16/2021
3.0.34 611 6/16/2021
3.0.33 1,135 1/7/2021
3.0.32 951 12/16/2020
3.0.31 889 12/14/2020
3.0.29 2,594 9/13/2020
3.0.28 1,055 6/19/2020
3.0.27 1,048 6/8/2020
3.0.26 1,811 5/12/2020
3.0.25 1,594 5/12/2020
3.0.24 1,053 4/28/2020
3.0.23 1,035 4/24/2020
3.0.22 1,039 4/16/2020
3.0.21 1,050 4/16/2020
3.0.20 755 4/15/2020
3.0.19 749 4/15/2020
3.0.18 1,296 4/14/2020
3.0.17 744 4/14/2020
3.0.16 1,099 4/10/2020
3.0.15 1,095 4/10/2020
3.0.14 3,261 3/26/2020
3.0.13 1,026 3/26/2020
3.0.12 769 3/25/2020
3.0.11 737 3/25/2020
3.0.10 741 3/25/2020
3.0.9 787 3/25/2020
3.0.8 779 3/25/2020
3.0.7 1,276 3/25/2020
3.0.6 1,467 3/21/2020
3.0.5 1,790 3/13/2020
3.0.4 794 3/13/2020
3.0.3 1,523 2/28/2020
3.0.2 1,320 2/21/2020
3.0.1 830 2/11/2020
3.0.0 2,023 12/23/2019
2.0.10 1,240 4/17/2019
2.0.9 1,774 2/21/2019
2.0.8 918 2/21/2019
2.0.7 4,312 8/1/2018
2.0.6 1,541 8/1/2018
2.0.5 1,872 6/26/2018
2.0.4 2,133 6/1/2018
2.0.3 2,083 5/22/2018
2.0.2 2,654 5/11/2018
2.0.1 2,693 2/13/2018
2.0.0 2,661 1/2/2018
1.0.10 14,716 6/16/2017
1.0.8 1,406 6/16/2017
1.0.7 1,380 5/30/2017
1.0.6 1,358 5/30/2017
1.0.5 1,363 5/25/2017
1.0.4 1,385 5/24/2017
1.0.0 1,417 5/24/2017