Holmes 5.0.95

dotnet add package Holmes --version 5.0.95
                    
NuGet\Install-Package Holmes -Version 5.0.95
                    
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.95" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.95" />
                    
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.95
                    
#r "nuget: Holmes, 5.0.95"
                    
#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.95
                    
#: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.95
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.95
                    
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.95 413 11/18/2025
5.0.94 217 11/14/2025
5.0.93 184 11/14/2025
5.0.92 310 11/13/2025
5.0.91 295 11/13/2025
5.0.90 302 11/13/2025
5.0.89 238 11/6/2025
5.0.88 184 10/31/2025
5.0.87 268 10/17/2025
5.0.86 206 10/16/2025
5.0.85 203 10/15/2025
5.0.84 257 10/14/2025
5.0.83 209 10/13/2025
5.0.82 247 10/12/2025
5.0.81 280 9/30/2025
5.0.80 209 9/30/2025
5.0.79 168 9/30/2025
5.0.78 164 9/30/2025
5.0.77 253 9/25/2025
5.0.76 387 9/18/2025
5.0.75 357 9/17/2025
5.0.74 336 9/16/2025
5.0.73 215 9/11/2025
5.0.72 200 9/10/2025
5.0.71 207 9/9/2025
5.0.70 367 8/20/2025
5.0.69 176 8/20/2025
5.0.68 173 8/20/2025
5.0.67 175 8/19/2025
5.0.66 175 8/19/2025
5.0.65 172 8/19/2025
5.0.64 222 8/15/2025
5.0.63 343 8/6/2025
5.0.62 299 8/5/2025
5.0.61 261 8/5/2025
5.0.60 264 8/5/2025
5.0.59 279 8/5/2025
5.0.58 254 8/5/2025
5.0.57 231 8/1/2025
5.0.56 229 7/29/2025
5.0.55 145 7/29/2025
5.0.54 241 7/17/2025
5.0.53 226 7/16/2025
5.0.52 231 7/15/2025
5.0.51 186 7/15/2025
5.0.50 180 7/15/2025
5.0.49 211 7/8/2025
5.0.48 338 7/1/2025
5.0.47 188 7/1/2025
5.0.46 193 7/1/2025
5.0.45 229 6/28/2025
5.0.44 118 6/27/2025
5.0.43 249 6/27/2025
5.0.42 252 6/26/2025
5.0.41 222 6/18/2025
5.0.40 339 6/10/2025
5.0.39 135 5/30/2025
5.0.38 139 5/23/2025
5.0.37 283 5/14/2025
5.0.36 136 5/2/2025
5.0.35 224 4/29/2025
5.0.34 250 4/10/2025
5.0.33 221 3/17/2025
5.0.32 182 2/24/2025
5.0.31 201 2/13/2025
5.0.30 320 2/3/2025
5.0.29 219 1/30/2025
5.0.28 182 1/29/2025
5.0.27 181 1/29/2025
5.0.26 202 1/28/2025
5.0.25 198 1/24/2025
5.0.24 196 1/23/2025
5.0.23 206 1/22/2025
5.0.22 198 1/16/2025
5.0.21 177 1/15/2025
5.0.20 139 1/14/2025
5.0.19 145 1/13/2025
5.0.18 166 1/10/2025
5.0.17 155 1/9/2025
5.0.16 123 1/8/2025
5.0.15 248 12/17/2024
5.0.14 205 12/16/2024
5.0.13 211 12/10/2024
5.0.12 200 12/9/2024
5.0.11 212 12/6/2024
5.0.10 252 11/27/2024
5.0.9 168 11/26/2024
5.0.8 227 11/26/2024
5.0.7 223 11/24/2024
5.0.6 167 11/24/2024
5.0.5 169 11/23/2024
5.0.4 160 11/23/2024
4.0.270 192 11/19/2024
4.0.269 175 11/11/2024
4.0.268 167 11/7/2024
4.0.267 159 11/5/2024
4.0.266 164 11/4/2024
4.0.265 188 11/1/2024
4.0.264 160 11/1/2024
4.0.263 169 10/30/2024
4.0.262 173 10/29/2024
4.0.261 173 10/29/2024
4.0.260 177 10/26/2024
4.0.259 182 10/24/2024
4.0.258 185 10/21/2024
4.0.257 186 10/17/2024
4.0.256 170 10/15/2024
4.0.255 180 10/11/2024
4.0.254 169 10/10/2024
4.0.253 180 10/9/2024
4.0.252 196 10/9/2024
4.0.251 220 10/3/2024
4.0.250 195 10/2/2024
4.0.249 199 9/30/2024
4.0.248 192 9/28/2024
4.0.247 167 9/24/2024
4.0.246 182 9/23/2024
4.0.245 181 9/23/2024
4.0.244 213 9/17/2024
4.0.243 205 9/16/2024
4.0.242 199 9/10/2024
4.0.241 183 9/9/2024
4.0.240 184 9/6/2024
4.0.239 183 9/6/2024
4.0.238 195 9/3/2024
4.0.237 206 9/2/2024
4.0.236 185 8/30/2024
4.0.235 181 8/30/2024
4.0.234 193 8/28/2024
4.0.233 201 8/27/2024
4.0.232 179 8/26/2024
4.0.231 222 8/24/2024
4.0.230 202 8/23/2024
4.0.229 218 8/21/2024
4.0.228 215 8/21/2024
4.0.227 196 8/20/2024
4.0.226 197 8/19/2024
4.0.225 211 8/16/2024
4.0.224 207 8/16/2024
4.0.223 221 8/14/2024
4.0.222 209 8/5/2024
4.0.221 161 8/2/2024
4.0.220 168 8/1/2024
4.0.219 171 7/31/2024
4.0.218 192 7/26/2024
4.0.217 189 7/25/2024
4.0.216 165 7/25/2024
4.0.215 194 7/11/2024
4.0.214 208 7/10/2024
4.0.213 213 7/9/2024
4.0.212 184 7/9/2024
4.0.211 195 7/9/2024
4.0.210 180 7/5/2024
4.0.209 194 7/4/2024
4.0.208 213 7/3/2024
4.0.207 195 7/2/2024
4.0.206 204 6/27/2024
4.0.205 190 6/26/2024
4.0.204 195 6/25/2024
4.0.203 194 6/24/2024
4.0.202 1,316 6/19/2024
4.0.201 203 6/19/2024
4.0.200 197 6/17/2024
4.0.199 199 6/14/2024
4.0.198 187 6/14/2024
4.0.197 178 6/12/2024
4.0.196 203 6/3/2024
4.0.195 193 5/31/2024
4.0.194 167 5/30/2024
4.0.193 194 5/29/2024
4.0.192 184 5/28/2024
4.0.191 188 5/27/2024
4.0.190 188 5/23/2024
4.0.189 196 5/22/2024
4.0.188 200 5/21/2024
4.0.187 209 5/20/2024
4.0.186 207 5/18/2024
4.0.185 202 5/16/2024
4.0.184 201 5/15/2024
4.0.183 205 5/8/2024
4.0.182 217 5/7/2024
4.0.181 221 5/6/2024
4.0.180 196 5/3/2024
4.0.179 906 5/2/2024
4.0.178 181 5/2/2024
4.0.177 198 5/1/2024
4.0.176 207 4/29/2024
4.0.175 192 4/29/2024
4.0.174 208 4/25/2024
4.0.173 214 4/24/2024
4.0.172 210 4/16/2024
4.0.171 197 4/15/2024
4.0.170 217 4/13/2024
4.0.169 179 4/12/2024
4.0.168 199 4/11/2024
4.0.167 201 4/10/2024
4.0.166 192 4/9/2024
4.0.165 218 4/9/2024
4.0.164 199 4/1/2024
4.0.163 194 3/29/2024
4.0.162 209 3/29/2024
4.0.161 206 3/27/2024
4.0.160 190 3/22/2024
4.0.159 212 3/22/2024
4.0.158 218 3/18/2024
4.0.157 213 3/15/2024
4.0.156 203 3/14/2024
4.0.155 200 3/14/2024
4.0.154 199 3/11/2024
4.0.153 217 3/8/2024
4.0.152 208 3/7/2024
4.0.151 225 3/6/2024
4.0.150 241 3/5/2024
4.0.149 223 3/4/2024
4.0.148 1,342 3/2/2024
4.0.147 223 2/29/2024
4.0.146 195 2/29/2024
4.0.145 206 2/27/2024
4.0.144 195 2/26/2024
4.0.143 198 2/23/2024
4.0.142 210 2/22/2024
4.0.141 207 2/22/2024
4.0.140 201 2/21/2024
4.0.139 214 2/20/2024
4.0.138 212 2/19/2024
4.0.137 199 2/19/2024
4.0.136 209 2/16/2024
4.0.135 199 2/16/2024
4.0.134 208 2/15/2024
4.0.133 228 2/14/2024
4.0.132 196 2/14/2024
4.0.131 197 2/13/2024
4.0.130 231 2/9/2024
4.0.129 217 2/9/2024
4.0.128 197 2/7/2024
4.0.127 194 2/6/2024
4.0.126 207 2/6/2024
4.0.125 201 2/5/2024
4.0.124 201 2/3/2024
4.0.123 203 2/1/2024
4.0.122 191 2/1/2024
4.0.121 200 1/31/2024
4.0.120 206 1/29/2024
4.0.119 197 1/25/2024
4.0.118 197 1/24/2024
4.0.117 201 1/23/2024
4.0.116 209 1/22/2024
4.0.115 1,473 1/17/2024
4.0.114 174 1/16/2024
4.0.113 188 1/15/2024
4.0.112 190 1/12/2024
4.0.111 209 1/11/2024
4.0.110 216 1/10/2024
4.0.109 464 1/8/2024
4.0.108 225 1/6/2024
4.0.107 388 12/26/2023
4.0.106 191 12/26/2023
4.0.105 195 12/26/2023
4.0.104 228 12/25/2023
4.0.103 205 12/23/2023
4.0.102 210 12/21/2023
4.0.101 221 12/15/2023
4.0.100 205 12/14/2023
4.0.99 205 12/13/2023
4.0.98 210 12/13/2023
4.0.97 677 12/12/2023
4.0.96 202 12/12/2023
4.0.95 195 12/12/2023
4.0.94 198 12/11/2023
4.0.93 257 12/6/2023
4.0.92 192 12/6/2023
4.0.91 194 12/6/2023
4.0.90 181 12/4/2023
4.0.89 374 11/24/2023
4.0.88 207 11/24/2023
4.0.87 205 11/21/2023
4.0.86 203 11/20/2023
4.0.85 173 11/20/2023
4.0.84 252 11/17/2023
4.0.83 701 11/17/2023
4.0.82 205 11/15/2023
4.0.81 196 11/13/2023
4.0.80 235 11/9/2023
4.0.79 255 11/9/2023
4.0.78 168 11/8/2023
4.0.77 192 11/7/2023
4.0.76 203 11/6/2023
4.0.75 221 11/3/2023
4.0.74 248 11/2/2023
4.0.73 208 11/1/2023
4.0.72 232 10/31/2023
4.0.71 188 10/31/2023
4.0.70 189 10/30/2023
4.0.69 226 10/28/2023
4.0.68 227 10/26/2023
4.0.67 217 10/25/2023
4.0.66 217 10/17/2023
4.0.65 218 10/16/2023
4.0.64 182 10/16/2023
4.0.63 229 10/13/2023
4.0.62 238 10/12/2023
4.0.61 228 10/11/2023
4.0.60 262 10/5/2023
4.0.59 211 10/4/2023
4.0.58 243 9/26/2023
4.0.57 223 9/26/2023
4.0.56 229 9/22/2023
4.0.55 220 9/20/2023
4.0.54 223 9/19/2023
4.0.53 229 9/18/2023
4.0.52 202 9/18/2023
4.0.51 270 9/15/2023
4.0.50 234 9/14/2023
4.0.49 223 9/12/2023
4.0.48 302 9/12/2023
4.0.47 218 9/11/2023
4.0.46 245 9/11/2023
4.0.45 390 9/7/2023
4.0.44 255 9/6/2023
4.0.43 296 9/5/2023
4.0.42 257 9/4/2023
4.0.41 228 9/4/2023
4.0.40 282 9/1/2023
4.0.39 277 8/31/2023
4.0.38 280 8/31/2023
4.0.37 278 8/29/2023
4.0.36 245 8/29/2023
4.0.35 284 8/29/2023
4.0.34 294 8/25/2023
4.0.33 276 8/24/2023
4.0.32 279 8/23/2023
4.0.31 276 8/22/2023
4.0.30 275 8/18/2023
4.0.29 255 8/17/2023
4.0.28 300 8/17/2023
4.0.27 230 8/17/2023
4.0.26 376 8/10/2023
4.0.25 292 8/9/2023
4.0.24 298 8/8/2023
4.0.23 268 8/8/2023
4.0.22 250 8/8/2023
4.0.21 387 8/7/2023
4.0.20 281 8/4/2023
4.0.19 356 8/3/2023
4.0.18 291 8/2/2023
4.0.17 316 7/26/2023
4.0.16 323 7/25/2023
4.0.15 315 7/21/2023
4.0.14 293 7/19/2023
4.0.13 282 7/18/2023
4.0.12 256 7/18/2023
4.0.11 320 7/18/2023
4.0.10 244 7/18/2023
4.0.9 374 7/17/2023
4.0.8 275 7/17/2023
4.0.7 252 7/17/2023
4.0.6 268 7/17/2023
4.0.5 603 1/30/2023
4.0.4 377 1/30/2023
4.0.3 484 1/30/2023
4.0.2 484 1/27/2023
4.0.1 667 12/13/2022
4.0.0 416 12/12/2022
3.0.43 1,666 6/10/2022
3.0.41 1,071 4/20/2022
3.0.40 1,134 1/11/2022
3.0.39 900 1/10/2022
3.0.38 1,186 6/17/2021
3.0.37 879 6/16/2021
3.0.36 837 6/16/2021
3.0.35 614 6/16/2021
3.0.34 582 6/16/2021
3.0.33 1,099 1/7/2021
3.0.32 918 12/16/2020
3.0.31 856 12/14/2020
3.0.29 2,559 9/13/2020
3.0.28 1,024 6/19/2020
3.0.27 1,018 6/8/2020
3.0.26 1,780 5/12/2020
3.0.25 1,564 5/12/2020
3.0.24 1,019 4/28/2020
3.0.23 1,004 4/24/2020
3.0.22 1,011 4/16/2020
3.0.21 1,017 4/16/2020
3.0.20 723 4/15/2020
3.0.19 717 4/15/2020
3.0.18 1,269 4/14/2020
3.0.17 706 4/14/2020
3.0.16 1,070 4/10/2020
3.0.15 1,066 4/10/2020
3.0.14 3,227 3/26/2020
3.0.13 993 3/26/2020
3.0.12 740 3/25/2020
3.0.11 706 3/25/2020
3.0.10 712 3/25/2020
3.0.9 752 3/25/2020
3.0.8 747 3/25/2020
3.0.7 1,242 3/25/2020
3.0.6 1,432 3/21/2020
3.0.5 1,762 3/13/2020
3.0.4 764 3/13/2020
3.0.3 1,495 2/28/2020
3.0.2 1,291 2/21/2020
3.0.1 796 2/11/2020
3.0.0 1,989 12/23/2019
2.0.10 1,208 4/17/2019
2.0.9 1,739 2/21/2019
2.0.8 889 2/21/2019
2.0.7 4,266 8/1/2018
2.0.6 1,497 8/1/2018
2.0.5 1,827 6/26/2018
2.0.4 2,071 6/1/2018
2.0.3 2,022 5/22/2018
2.0.2 2,590 5/11/2018
2.0.1 2,636 2/13/2018
2.0.0 2,598 1/2/2018
1.0.10 14,668 6/16/2017
1.0.8 1,364 6/16/2017
1.0.7 1,331 5/30/2017
1.0.6 1,314 5/30/2017
1.0.5 1,317 5/25/2017
1.0.4 1,338 5/24/2017
1.0.0 1,372 5/24/2017