Holmes 5.0.104

dotnet add package Holmes --version 5.0.104
                    
NuGet\Install-Package Holmes -Version 5.0.104
                    
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.104" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.104" />
                    
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.104
                    
#r "nuget: Holmes, 5.0.104"
                    
#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.104
                    
#: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.104
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.104
                    
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.104 155 12/24/2025
5.0.103 197 12/23/2025
5.0.102 199 12/22/2025
5.0.101 196 12/11/2025
5.0.100 453 12/10/2025
5.0.99 483 12/9/2025
5.0.98 739 12/2/2025
5.0.97 665 12/2/2025
5.0.96 663 12/2/2025
5.0.95 541 11/18/2025
5.0.94 238 11/14/2025
5.0.93 212 11/14/2025
5.0.92 331 11/13/2025
5.0.91 321 11/13/2025
5.0.90 324 11/13/2025
5.0.89 258 11/6/2025
5.0.88 205 10/31/2025
5.0.87 287 10/17/2025
5.0.86 225 10/16/2025
5.0.85 220 10/15/2025
5.0.84 275 10/14/2025
5.0.83 223 10/13/2025
5.0.82 264 10/12/2025
5.0.81 291 9/30/2025
5.0.80 228 9/30/2025
5.0.79 181 9/30/2025
5.0.78 181 9/30/2025
5.0.77 274 9/25/2025
5.0.76 400 9/18/2025
5.0.75 373 9/17/2025
5.0.74 349 9/16/2025
5.0.73 230 9/11/2025
5.0.72 214 9/10/2025
5.0.71 222 9/9/2025
5.0.70 384 8/20/2025
5.0.69 193 8/20/2025
5.0.68 192 8/20/2025
5.0.67 191 8/19/2025
5.0.66 189 8/19/2025
5.0.65 188 8/19/2025
5.0.64 243 8/15/2025
5.0.63 358 8/6/2025
5.0.62 313 8/5/2025
5.0.61 273 8/5/2025
5.0.60 277 8/5/2025
5.0.59 291 8/5/2025
5.0.58 271 8/5/2025
5.0.57 245 8/1/2025
5.0.56 256 7/29/2025
5.0.55 158 7/29/2025
5.0.54 260 7/17/2025
5.0.53 242 7/16/2025
5.0.52 247 7/15/2025
5.0.51 198 7/15/2025
5.0.50 197 7/15/2025
5.0.49 226 7/8/2025
5.0.48 350 7/1/2025
5.0.47 199 7/1/2025
5.0.46 204 7/1/2025
5.0.45 245 6/28/2025
5.0.44 133 6/27/2025
5.0.43 269 6/27/2025
5.0.42 269 6/26/2025
5.0.41 236 6/18/2025
5.0.40 352 6/10/2025
5.0.39 147 5/30/2025
5.0.38 158 5/23/2025
5.0.37 299 5/14/2025
5.0.36 152 5/2/2025
5.0.35 239 4/29/2025
5.0.34 269 4/10/2025
5.0.33 236 3/17/2025
5.0.32 195 2/24/2025
5.0.31 218 2/13/2025
5.0.30 334 2/3/2025
5.0.29 233 1/30/2025
5.0.28 201 1/29/2025
5.0.27 194 1/29/2025
5.0.26 218 1/28/2025
5.0.25 217 1/24/2025
5.0.24 213 1/23/2025
5.0.23 222 1/22/2025
5.0.22 213 1/16/2025
5.0.21 197 1/15/2025
5.0.20 156 1/14/2025
5.0.19 162 1/13/2025
5.0.18 181 1/10/2025
5.0.17 171 1/9/2025
5.0.16 139 1/8/2025
5.0.15 267 12/17/2024
5.0.14 221 12/16/2024
5.0.13 230 12/10/2024
5.0.12 219 12/9/2024
5.0.11 230 12/6/2024
5.0.10 268 11/27/2024
5.0.9 185 11/26/2024
5.0.8 238 11/26/2024
5.0.7 238 11/24/2024
5.0.6 180 11/24/2024
5.0.5 180 11/23/2024
5.0.4 171 11/23/2024
4.0.270 205 11/19/2024
4.0.269 190 11/11/2024
4.0.268 182 11/7/2024
4.0.267 174 11/5/2024
4.0.266 183 11/4/2024
4.0.265 210 11/1/2024
4.0.264 181 11/1/2024
4.0.263 190 10/30/2024
4.0.262 192 10/29/2024
4.0.261 188 10/29/2024
4.0.260 196 10/26/2024
4.0.259 194 10/24/2024
4.0.258 196 10/21/2024
4.0.257 198 10/17/2024
4.0.256 183 10/15/2024
4.0.255 193 10/11/2024
4.0.254 180 10/10/2024
4.0.253 192 10/9/2024
4.0.252 210 10/9/2024
4.0.251 232 10/3/2024
4.0.250 205 10/2/2024
4.0.249 210 9/30/2024
4.0.248 207 9/28/2024
4.0.247 184 9/24/2024
4.0.246 203 9/23/2024
4.0.245 199 9/23/2024
4.0.244 225 9/17/2024
4.0.243 217 9/16/2024
4.0.242 210 9/10/2024
4.0.241 197 9/9/2024
4.0.240 195 9/6/2024
4.0.239 195 9/6/2024
4.0.238 204 9/3/2024
4.0.237 220 9/2/2024
4.0.236 198 8/30/2024
4.0.235 193 8/30/2024
4.0.234 206 8/28/2024
4.0.233 214 8/27/2024
4.0.232 191 8/26/2024
4.0.231 233 8/24/2024
4.0.230 211 8/23/2024
4.0.229 227 8/21/2024
4.0.228 222 8/21/2024
4.0.227 210 8/20/2024
4.0.226 206 8/19/2024
4.0.225 221 8/16/2024
4.0.224 219 8/16/2024
4.0.223 233 8/14/2024
4.0.222 224 8/5/2024
4.0.221 180 8/2/2024
4.0.220 178 8/1/2024
4.0.219 186 7/31/2024
4.0.218 206 7/26/2024
4.0.217 203 7/25/2024
4.0.216 180 7/25/2024
4.0.215 208 7/11/2024
4.0.214 221 7/10/2024
4.0.213 225 7/9/2024
4.0.212 196 7/9/2024
4.0.211 212 7/9/2024
4.0.210 195 7/5/2024
4.0.209 208 7/4/2024
4.0.208 228 7/3/2024
4.0.207 204 7/2/2024
4.0.206 223 6/27/2024
4.0.205 205 6/26/2024
4.0.204 209 6/25/2024
4.0.203 210 6/24/2024
4.0.202 1,333 6/19/2024
4.0.201 218 6/19/2024
4.0.200 206 6/17/2024
4.0.199 211 6/14/2024
4.0.198 200 6/14/2024
4.0.197 200 6/12/2024
4.0.196 218 6/3/2024
4.0.195 206 5/31/2024
4.0.194 179 5/30/2024
4.0.193 207 5/29/2024
4.0.192 197 5/28/2024
4.0.191 199 5/27/2024
4.0.190 197 5/23/2024
4.0.189 205 5/22/2024
4.0.188 212 5/21/2024
4.0.187 222 5/20/2024
4.0.186 221 5/18/2024
4.0.185 212 5/16/2024
4.0.184 214 5/15/2024
4.0.183 218 5/8/2024
4.0.182 229 5/7/2024
4.0.181 234 5/6/2024
4.0.180 206 5/3/2024
4.0.179 923 5/2/2024
4.0.178 191 5/2/2024
4.0.177 205 5/1/2024
4.0.176 219 4/29/2024
4.0.175 206 4/29/2024
4.0.174 223 4/25/2024
4.0.173 227 4/24/2024
4.0.172 218 4/16/2024
4.0.171 210 4/15/2024
4.0.170 230 4/13/2024
4.0.169 193 4/12/2024
4.0.168 210 4/11/2024
4.0.167 216 4/10/2024
4.0.166 209 4/9/2024
4.0.165 230 4/9/2024
4.0.164 213 4/1/2024
4.0.163 210 3/29/2024
4.0.162 225 3/29/2024
4.0.161 221 3/27/2024
4.0.160 201 3/22/2024
4.0.159 223 3/22/2024
4.0.158 238 3/18/2024
4.0.157 225 3/15/2024
4.0.156 218 3/14/2024
4.0.155 214 3/14/2024
4.0.154 210 3/11/2024
4.0.153 229 3/8/2024
4.0.152 218 3/7/2024
4.0.151 240 3/6/2024
4.0.150 258 3/5/2024
4.0.149 236 3/4/2024
4.0.148 1,362 3/2/2024
4.0.147 234 2/29/2024
4.0.146 206 2/29/2024
4.0.145 223 2/27/2024
4.0.144 206 2/26/2024
4.0.143 210 2/23/2024
4.0.142 224 2/22/2024
4.0.141 219 2/22/2024
4.0.140 217 2/21/2024
4.0.139 229 2/20/2024
4.0.138 232 2/19/2024
4.0.137 211 2/19/2024
4.0.136 224 2/16/2024
4.0.135 212 2/16/2024
4.0.134 222 2/15/2024
4.0.133 242 2/14/2024
4.0.132 210 2/14/2024
4.0.131 211 2/13/2024
4.0.130 250 2/9/2024
4.0.129 230 2/9/2024
4.0.128 205 2/7/2024
4.0.127 207 2/6/2024
4.0.126 219 2/6/2024
4.0.125 215 2/5/2024
4.0.124 216 2/3/2024
4.0.123 215 2/1/2024
4.0.122 202 2/1/2024
4.0.121 211 1/31/2024
4.0.120 218 1/29/2024
4.0.119 207 1/25/2024
4.0.118 209 1/24/2024
4.0.117 213 1/23/2024
4.0.116 218 1/22/2024
4.0.115 1,481 1/17/2024
4.0.114 190 1/16/2024
4.0.113 201 1/15/2024
4.0.112 206 1/12/2024
4.0.111 224 1/11/2024
4.0.110 231 1/10/2024
4.0.109 479 1/8/2024
4.0.108 239 1/6/2024
4.0.107 401 12/26/2023
4.0.106 204 12/26/2023
4.0.105 209 12/26/2023
4.0.104 238 12/25/2023
4.0.103 213 12/23/2023
4.0.102 220 12/21/2023
4.0.101 231 12/15/2023
4.0.100 218 12/14/2023
4.0.99 217 12/13/2023
4.0.98 226 12/13/2023
4.0.97 687 12/12/2023
4.0.96 212 12/12/2023
4.0.95 205 12/12/2023
4.0.94 212 12/11/2023
4.0.93 263 12/6/2023
4.0.92 201 12/6/2023
4.0.91 205 12/6/2023
4.0.90 188 12/4/2023
4.0.89 381 11/24/2023
4.0.88 213 11/24/2023
4.0.87 216 11/21/2023
4.0.86 215 11/20/2023
4.0.85 183 11/20/2023
4.0.84 262 11/17/2023
4.0.83 711 11/17/2023
4.0.82 212 11/15/2023
4.0.81 210 11/13/2023
4.0.80 245 11/9/2023
4.0.79 264 11/9/2023
4.0.78 180 11/8/2023
4.0.77 204 11/7/2023
4.0.76 215 11/6/2023
4.0.75 234 11/3/2023
4.0.74 260 11/2/2023
4.0.73 215 11/1/2023
4.0.72 243 10/31/2023
4.0.71 195 10/31/2023
4.0.70 196 10/30/2023
4.0.69 238 10/28/2023
4.0.68 233 10/26/2023
4.0.67 225 10/25/2023
4.0.66 225 10/17/2023
4.0.65 225 10/16/2023
4.0.64 192 10/16/2023
4.0.63 238 10/13/2023
4.0.62 245 10/12/2023
4.0.61 234 10/11/2023
4.0.60 268 10/5/2023
4.0.59 214 10/4/2023
4.0.58 254 9/26/2023
4.0.57 230 9/26/2023
4.0.56 238 9/22/2023
4.0.55 228 9/20/2023
4.0.54 234 9/19/2023
4.0.53 239 9/18/2023
4.0.52 211 9/18/2023
4.0.51 280 9/15/2023
4.0.50 242 9/14/2023
4.0.49 233 9/12/2023
4.0.48 309 9/12/2023
4.0.47 223 9/11/2023
4.0.46 255 9/11/2023
4.0.45 398 9/7/2023
4.0.44 264 9/6/2023
4.0.43 305 9/5/2023
4.0.42 263 9/4/2023
4.0.41 235 9/4/2023
4.0.40 293 9/1/2023
4.0.39 287 8/31/2023
4.0.38 287 8/31/2023
4.0.37 284 8/29/2023
4.0.36 253 8/29/2023
4.0.35 289 8/29/2023
4.0.34 305 8/25/2023
4.0.33 288 8/24/2023
4.0.32 290 8/23/2023
4.0.31 284 8/22/2023
4.0.30 282 8/18/2023
4.0.29 264 8/17/2023
4.0.28 308 8/17/2023
4.0.27 242 8/17/2023
4.0.26 383 8/10/2023
4.0.25 307 8/9/2023
4.0.24 312 8/8/2023
4.0.23 281 8/8/2023
4.0.22 266 8/8/2023
4.0.21 397 8/7/2023
4.0.20 296 8/4/2023
4.0.19 368 8/3/2023
4.0.18 298 8/2/2023
4.0.17 331 7/26/2023
4.0.16 335 7/25/2023
4.0.15 327 7/21/2023
4.0.14 303 7/19/2023
4.0.13 297 7/18/2023
4.0.12 266 7/18/2023
4.0.11 331 7/18/2023
4.0.10 257 7/18/2023
4.0.9 384 7/17/2023
4.0.8 286 7/17/2023
4.0.7 261 7/17/2023
4.0.6 276 7/17/2023
4.0.5 623 1/30/2023
4.0.4 391 1/30/2023
4.0.3 503 1/30/2023
4.0.2 501 1/27/2023
4.0.1 688 12/13/2022
4.0.0 430 12/12/2022
3.0.43 1,683 6/10/2022
3.0.41 1,087 4/20/2022
3.0.40 1,151 1/11/2022
3.0.39 919 1/10/2022
3.0.38 1,207 6/17/2021
3.0.37 900 6/16/2021
3.0.36 855 6/16/2021
3.0.35 632 6/16/2021
3.0.34 604 6/16/2021
3.0.33 1,127 1/7/2021
3.0.32 941 12/16/2020
3.0.31 881 12/14/2020
3.0.29 2,583 9/13/2020
3.0.28 1,048 6/19/2020
3.0.27 1,040 6/8/2020
3.0.26 1,803 5/12/2020
3.0.25 1,587 5/12/2020
3.0.24 1,047 4/28/2020
3.0.23 1,030 4/24/2020
3.0.22 1,031 4/16/2020
3.0.21 1,044 4/16/2020
3.0.20 750 4/15/2020
3.0.19 742 4/15/2020
3.0.18 1,291 4/14/2020
3.0.17 736 4/14/2020
3.0.16 1,094 4/10/2020
3.0.15 1,089 4/10/2020
3.0.14 3,253 3/26/2020
3.0.13 1,020 3/26/2020
3.0.12 767 3/25/2020
3.0.11 729 3/25/2020
3.0.10 736 3/25/2020
3.0.9 776 3/25/2020
3.0.8 771 3/25/2020
3.0.7 1,269 3/25/2020
3.0.6 1,459 3/21/2020
3.0.5 1,782 3/13/2020
3.0.4 789 3/13/2020
3.0.3 1,519 2/28/2020
3.0.2 1,316 2/21/2020
3.0.1 820 2/11/2020
3.0.0 2,013 12/23/2019
2.0.10 1,231 4/17/2019
2.0.9 1,765 2/21/2019
2.0.8 910 2/21/2019
2.0.7 4,304 8/1/2018
2.0.6 1,537 8/1/2018
2.0.5 1,862 6/26/2018
2.0.4 2,125 6/1/2018
2.0.3 2,074 5/22/2018
2.0.2 2,645 5/11/2018
2.0.1 2,686 2/13/2018
2.0.0 2,652 1/2/2018
1.0.10 14,710 6/16/2017
1.0.8 1,399 6/16/2017
1.0.7 1,373 5/30/2017
1.0.6 1,351 5/30/2017
1.0.5 1,354 5/25/2017
1.0.4 1,374 5/24/2017
1.0.0 1,408 5/24/2017