Holmes 5.0.80

dotnet add package Holmes --version 5.0.80
                    
NuGet\Install-Package Holmes -Version 5.0.80
                    
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.80" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.80" />
                    
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.80
                    
#r "nuget: Holmes, 5.0.80"
                    
#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.80
                    
#: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.80
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.80
                    
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.80 0 9/30/2025
5.0.79 0 9/30/2025
5.0.78 0 9/30/2025
5.0.77 147 9/25/2025
5.0.76 343 9/18/2025
5.0.75 322 9/17/2025
5.0.74 305 9/16/2025
5.0.73 184 9/11/2025
5.0.72 172 9/10/2025
5.0.71 177 9/9/2025
5.0.70 326 8/20/2025
5.0.69 151 8/20/2025
5.0.68 149 8/20/2025
5.0.67 151 8/19/2025
5.0.66 150 8/19/2025
5.0.65 149 8/19/2025
5.0.64 178 8/15/2025
5.0.63 313 8/6/2025
5.0.62 266 8/5/2025
5.0.61 237 8/5/2025
5.0.60 241 8/5/2025
5.0.59 253 8/5/2025
5.0.58 226 8/5/2025
5.0.57 176 8/1/2025
5.0.56 149 7/29/2025
5.0.55 117 7/29/2025
5.0.54 215 7/17/2025
5.0.53 197 7/16/2025
5.0.52 197 7/15/2025
5.0.51 165 7/15/2025
5.0.50 159 7/15/2025
5.0.49 188 7/8/2025
5.0.48 299 7/1/2025
5.0.47 165 7/1/2025
5.0.46 169 7/1/2025
5.0.45 187 6/28/2025
5.0.44 95 6/27/2025
5.0.43 216 6/27/2025
5.0.42 220 6/26/2025
5.0.41 184 6/18/2025
5.0.40 316 6/10/2025
5.0.39 107 5/30/2025
5.0.38 115 5/23/2025
5.0.37 260 5/14/2025
5.0.36 111 5/2/2025
5.0.35 198 4/29/2025
5.0.34 225 4/10/2025
5.0.33 197 3/17/2025
5.0.32 154 2/24/2025
5.0.31 180 2/13/2025
5.0.30 295 2/3/2025
5.0.29 194 1/30/2025
5.0.28 155 1/29/2025
5.0.27 160 1/29/2025
5.0.26 176 1/28/2025
5.0.25 169 1/24/2025
5.0.24 160 1/23/2025
5.0.23 169 1/22/2025
5.0.22 171 1/16/2025
5.0.21 149 1/15/2025
5.0.20 108 1/14/2025
5.0.19 123 1/13/2025
5.0.18 142 1/10/2025
5.0.17 138 1/9/2025
5.0.16 102 1/8/2025
5.0.15 233 12/17/2024
5.0.14 178 12/16/2024
5.0.13 186 12/10/2024
5.0.12 172 12/9/2024
5.0.11 185 12/6/2024
5.0.10 224 11/27/2024
5.0.9 154 11/26/2024
5.0.8 196 11/26/2024
5.0.7 192 11/24/2024
5.0.6 152 11/24/2024
5.0.5 146 11/23/2024
5.0.4 148 11/23/2024
4.0.270 170 11/19/2024
4.0.269 161 11/11/2024
4.0.268 146 11/7/2024
4.0.267 149 11/5/2024
4.0.266 145 11/4/2024
4.0.265 160 11/1/2024
4.0.264 147 11/1/2024
4.0.263 150 10/30/2024
4.0.262 157 10/29/2024
4.0.261 150 10/29/2024
4.0.260 155 10/26/2024
4.0.259 161 10/24/2024
4.0.258 162 10/21/2024
4.0.257 167 10/17/2024
4.0.256 157 10/15/2024
4.0.255 158 10/11/2024
4.0.254 155 10/10/2024
4.0.253 151 10/9/2024
4.0.252 163 10/9/2024
4.0.251 200 10/3/2024
4.0.250 173 10/2/2024
4.0.249 175 9/30/2024
4.0.248 167 9/28/2024
4.0.247 153 9/24/2024
4.0.246 159 9/23/2024
4.0.245 157 9/23/2024
4.0.244 190 9/17/2024
4.0.243 180 9/16/2024
4.0.242 176 9/10/2024
4.0.241 163 9/9/2024
4.0.240 165 9/6/2024
4.0.239 164 9/6/2024
4.0.238 173 9/3/2024
4.0.237 176 9/2/2024
4.0.236 164 8/30/2024
4.0.235 169 8/30/2024
4.0.234 173 8/28/2024
4.0.233 178 8/27/2024
4.0.232 159 8/26/2024
4.0.231 198 8/24/2024
4.0.230 189 8/23/2024
4.0.229 197 8/21/2024
4.0.228 194 8/21/2024
4.0.227 176 8/20/2024
4.0.226 177 8/19/2024
4.0.225 191 8/16/2024
4.0.224 184 8/16/2024
4.0.223 192 8/14/2024
4.0.222 185 8/5/2024
4.0.221 136 8/2/2024
4.0.220 139 8/1/2024
4.0.219 149 7/31/2024
4.0.218 165 7/26/2024
4.0.217 166 7/25/2024
4.0.216 142 7/25/2024
4.0.215 173 7/11/2024
4.0.214 184 7/10/2024
4.0.213 190 7/9/2024
4.0.212 161 7/9/2024
4.0.211 174 7/9/2024
4.0.210 159 7/5/2024
4.0.209 173 7/4/2024
4.0.208 194 7/3/2024
4.0.207 171 7/2/2024
4.0.206 179 6/27/2024
4.0.205 177 6/26/2024
4.0.204 173 6/25/2024
4.0.203 170 6/24/2024
4.0.202 1,161 6/19/2024
4.0.201 182 6/19/2024
4.0.200 176 6/17/2024
4.0.199 179 6/14/2024
4.0.198 168 6/14/2024
4.0.197 153 6/12/2024
4.0.196 179 6/3/2024
4.0.195 169 5/31/2024
4.0.194 145 5/30/2024
4.0.193 173 5/29/2024
4.0.192 161 5/28/2024
4.0.191 168 5/27/2024
4.0.190 176 5/23/2024
4.0.189 175 5/22/2024
4.0.188 179 5/21/2024
4.0.187 189 5/20/2024
4.0.186 183 5/18/2024
4.0.185 180 5/16/2024
4.0.184 180 5/15/2024
4.0.183 178 5/8/2024
4.0.182 195 5/7/2024
4.0.181 195 5/6/2024
4.0.180 172 5/3/2024
4.0.179 793 5/2/2024
4.0.178 156 5/2/2024
4.0.177 177 5/1/2024
4.0.176 186 4/29/2024
4.0.175 172 4/29/2024
4.0.174 179 4/25/2024
4.0.173 192 4/24/2024
4.0.172 185 4/16/2024
4.0.171 178 4/15/2024
4.0.170 196 4/13/2024
4.0.169 160 4/12/2024
4.0.168 177 4/11/2024
4.0.167 177 4/10/2024
4.0.166 172 4/9/2024
4.0.165 192 4/9/2024
4.0.164 178 4/1/2024
4.0.163 175 3/29/2024
4.0.162 181 3/29/2024
4.0.161 185 3/27/2024
4.0.160 166 3/22/2024
4.0.159 184 3/22/2024
4.0.158 196 3/18/2024
4.0.157 188 3/15/2024
4.0.156 179 3/14/2024
4.0.155 176 3/14/2024
4.0.154 180 3/11/2024
4.0.153 194 3/8/2024
4.0.152 186 3/7/2024
4.0.151 200 3/6/2024
4.0.150 207 3/5/2024
4.0.149 199 3/4/2024
4.0.148 1,180 3/2/2024
4.0.147 199 2/29/2024
4.0.146 170 2/29/2024
4.0.145 184 2/27/2024
4.0.144 174 2/26/2024
4.0.143 179 2/23/2024
4.0.142 198 2/22/2024
4.0.141 188 2/22/2024
4.0.140 178 2/21/2024
4.0.139 190 2/20/2024
4.0.138 182 2/19/2024
4.0.137 178 2/19/2024
4.0.136 183 2/16/2024
4.0.135 178 2/16/2024
4.0.134 186 2/15/2024
4.0.133 203 2/14/2024
4.0.132 185 2/14/2024
4.0.131 176 2/13/2024
4.0.130 205 2/9/2024
4.0.129 196 2/9/2024
4.0.128 186 2/7/2024
4.0.127 173 2/6/2024
4.0.126 183 2/6/2024
4.0.125 179 2/5/2024
4.0.124 181 2/3/2024
4.0.123 191 2/1/2024
4.0.122 165 2/1/2024
4.0.121 177 1/31/2024
4.0.120 179 1/29/2024
4.0.119 173 1/25/2024
4.0.118 176 1/24/2024
4.0.117 181 1/23/2024
4.0.116 187 1/22/2024
4.0.115 1,243 1/17/2024
4.0.114 165 1/16/2024
4.0.113 177 1/15/2024
4.0.112 179 1/12/2024
4.0.111 188 1/11/2024
4.0.110 193 1/10/2024
4.0.109 410 1/8/2024
4.0.108 202 1/6/2024
4.0.107 357 12/26/2023
4.0.106 168 12/26/2023
4.0.105 175 12/26/2023
4.0.104 207 12/25/2023
4.0.103 185 12/23/2023
4.0.102 188 12/21/2023
4.0.101 198 12/15/2023
4.0.100 183 12/14/2023
4.0.99 186 12/13/2023
4.0.98 191 12/13/2023
4.0.97 608 12/12/2023
4.0.96 180 12/12/2023
4.0.95 173 12/12/2023
4.0.94 179 12/11/2023
4.0.93 243 12/6/2023
4.0.92 179 12/6/2023
4.0.91 179 12/6/2023
4.0.90 165 12/4/2023
4.0.89 343 11/24/2023
4.0.88 179 11/24/2023
4.0.87 181 11/21/2023
4.0.86 182 11/20/2023
4.0.85 155 11/20/2023
4.0.84 228 11/17/2023
4.0.83 677 11/17/2023
4.0.82 188 11/15/2023
4.0.81 176 11/13/2023
4.0.80 216 11/9/2023
4.0.79 229 11/9/2023
4.0.78 154 11/8/2023
4.0.77 186 11/7/2023
4.0.76 189 11/6/2023
4.0.75 196 11/3/2023
4.0.74 221 11/2/2023
4.0.73 188 11/1/2023
4.0.72 208 10/31/2023
4.0.71 173 10/31/2023
4.0.70 171 10/30/2023
4.0.69 209 10/28/2023
4.0.68 197 10/26/2023
4.0.67 197 10/25/2023
4.0.66 203 10/17/2023
4.0.65 197 10/16/2023
4.0.64 167 10/16/2023
4.0.63 211 10/13/2023
4.0.62 217 10/12/2023
4.0.61 205 10/11/2023
4.0.60 238 10/5/2023
4.0.59 201 10/4/2023
4.0.58 220 9/26/2023
4.0.57 203 9/26/2023
4.0.56 209 9/22/2023
4.0.55 209 9/20/2023
4.0.54 205 9/19/2023
4.0.53 207 9/18/2023
4.0.52 189 9/18/2023
4.0.51 261 9/15/2023
4.0.50 211 9/14/2023
4.0.49 205 9/12/2023
4.0.48 278 9/12/2023
4.0.47 202 9/11/2023
4.0.46 233 9/11/2023
4.0.45 360 9/7/2023
4.0.44 235 9/6/2023
4.0.43 275 9/5/2023
4.0.42 238 9/4/2023
4.0.41 214 9/4/2023
4.0.40 260 9/1/2023
4.0.39 262 8/31/2023
4.0.38 254 8/31/2023
4.0.37 258 8/29/2023
4.0.36 230 8/29/2023
4.0.35 269 8/29/2023
4.0.34 271 8/25/2023
4.0.33 256 8/24/2023
4.0.32 259 8/23/2023
4.0.31 267 8/22/2023
4.0.30 256 8/18/2023
4.0.29 235 8/17/2023
4.0.28 277 8/17/2023
4.0.27 217 8/17/2023
4.0.26 348 8/10/2023
4.0.25 273 8/9/2023
4.0.24 282 8/8/2023
4.0.23 249 8/8/2023
4.0.22 235 8/8/2023
4.0.21 366 8/7/2023
4.0.20 269 8/4/2023
4.0.19 324 8/3/2023
4.0.18 270 8/2/2023
4.0.17 303 7/26/2023
4.0.16 304 7/25/2023
4.0.15 306 7/21/2023
4.0.14 268 7/19/2023
4.0.13 260 7/18/2023
4.0.12 240 7/18/2023
4.0.11 290 7/18/2023
4.0.10 236 7/18/2023
4.0.9 354 7/17/2023
4.0.8 258 7/17/2023
4.0.7 237 7/17/2023
4.0.6 247 7/17/2023
4.0.5 571 1/30/2023
4.0.4 355 1/30/2023
4.0.3 457 1/30/2023
4.0.2 456 1/27/2023
4.0.1 633 12/13/2022
4.0.0 392 12/12/2022
3.0.43 1,615 6/10/2022
3.0.41 1,035 4/20/2022
3.0.40 1,093 1/11/2022
3.0.39 860 1/10/2022
3.0.38 1,136 6/17/2021
3.0.37 851 6/16/2021
3.0.36 796 6/16/2021
3.0.35 583 6/16/2021
3.0.34 548 6/16/2021
3.0.33 1,049 1/7/2021
3.0.32 876 12/16/2020
3.0.31 826 12/14/2020
3.0.29 2,457 9/13/2020
3.0.28 977 6/19/2020
3.0.27 973 6/8/2020
3.0.26 1,731 5/12/2020
3.0.25 1,505 5/12/2020
3.0.24 975 4/28/2020
3.0.23 966 4/24/2020
3.0.22 967 4/16/2020
3.0.21 986 4/16/2020
3.0.20 698 4/15/2020
3.0.19 683 4/15/2020
3.0.18 1,239 4/14/2020
3.0.17 683 4/14/2020
3.0.16 1,027 4/10/2020
3.0.15 1,044 4/10/2020
3.0.14 3,173 3/26/2020
3.0.13 949 3/26/2020
3.0.12 707 3/25/2020
3.0.11 686 3/25/2020
3.0.10 679 3/25/2020
3.0.9 719 3/25/2020
3.0.8 713 3/25/2020
3.0.7 1,196 3/25/2020
3.0.6 1,383 3/21/2020
3.0.5 1,720 3/13/2020
3.0.4 733 3/13/2020
3.0.3 1,445 2/28/2020
3.0.2 1,256 2/21/2020
3.0.1 763 2/11/2020
3.0.0 1,950 12/23/2019
2.0.10 1,165 4/17/2019
2.0.9 1,696 2/21/2019
2.0.8 864 2/21/2019
2.0.7 4,137 8/1/2018
2.0.6 1,439 8/1/2018
2.0.5 1,768 6/26/2018
2.0.4 1,981 6/1/2018
2.0.3 1,922 5/22/2018
2.0.2 2,493 5/11/2018
2.0.1 2,553 2/13/2018
2.0.0 2,483 1/2/2018
1.0.10 14,362 6/16/2017
1.0.8 1,308 6/16/2017
1.0.7 1,274 5/30/2017
1.0.6 1,247 5/30/2017
1.0.5 1,259 5/25/2017
1.0.4 1,279 5/24/2017
1.0.0 1,312 5/24/2017