Holmes 5.0.58

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 5.0.58
                    
NuGet\Install-Package Holmes -Version 5.0.58
                    
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.58" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.58" />
                    
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.58
                    
#r "nuget: Holmes, 5.0.58"
                    
#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.58
                    
#: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.58
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.58
                    
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.76 287 9/18/2025
5.0.75 284 9/17/2025
5.0.74 288 9/16/2025
5.0.73 167 9/11/2025
5.0.72 157 9/10/2025
5.0.71 162 9/9/2025
5.0.70 303 8/20/2025
5.0.69 141 8/20/2025
5.0.68 139 8/20/2025
5.0.67 141 8/19/2025
5.0.66 140 8/19/2025
5.0.65 139 8/19/2025
5.0.64 149 8/15/2025
5.0.63 296 8/6/2025
5.0.62 252 8/5/2025
5.0.61 227 8/5/2025
5.0.60 231 8/5/2025
5.0.59 232 8/5/2025
5.0.58 216 8/5/2025
5.0.57 137 8/1/2025
5.0.56 133 7/29/2025
5.0.55 107 7/29/2025
5.0.54 197 7/17/2025
5.0.53 178 7/16/2025
5.0.52 183 7/15/2025
5.0.51 155 7/15/2025
5.0.50 149 7/15/2025
5.0.49 178 7/8/2025
5.0.48 278 7/1/2025
5.0.47 155 7/1/2025
5.0.46 159 7/1/2025
5.0.45 162 6/28/2025
5.0.44 85 6/27/2025
5.0.43 200 6/27/2025
5.0.42 202 6/26/2025
5.0.41 173 6/18/2025
5.0.40 306 6/10/2025
5.0.39 97 5/30/2025
5.0.38 105 5/23/2025
5.0.37 250 5/14/2025
5.0.36 101 5/2/2025
5.0.35 188 4/29/2025
5.0.34 215 4/10/2025
5.0.33 187 3/17/2025
5.0.32 144 2/24/2025
5.0.31 170 2/13/2025
5.0.30 281 2/3/2025
5.0.29 181 1/30/2025
5.0.28 141 1/29/2025
5.0.27 150 1/29/2025
5.0.26 162 1/28/2025
5.0.25 155 1/24/2025
5.0.24 147 1/23/2025
5.0.23 155 1/22/2025
5.0.22 157 1/16/2025
5.0.21 145 1/15/2025
5.0.20 94 1/14/2025
5.0.19 109 1/13/2025
5.0.18 128 1/10/2025
5.0.17 115 1/9/2025
5.0.16 92 1/8/2025
5.0.15 219 12/17/2024
5.0.14 164 12/16/2024
5.0.13 170 12/10/2024
5.0.12 154 12/9/2024
5.0.11 160 12/6/2024
5.0.10 206 11/27/2024
5.0.9 144 11/26/2024
5.0.8 177 11/26/2024
5.0.7 174 11/24/2024
5.0.6 142 11/24/2024
5.0.5 136 11/23/2024
5.0.4 138 11/23/2024
4.0.270 160 11/19/2024
4.0.269 151 11/11/2024
4.0.268 135 11/7/2024
4.0.267 139 11/5/2024
4.0.266 135 11/4/2024
4.0.265 150 11/1/2024
4.0.264 137 11/1/2024
4.0.263 140 10/30/2024
4.0.262 147 10/29/2024
4.0.261 140 10/29/2024
4.0.260 145 10/26/2024
4.0.259 151 10/24/2024
4.0.258 152 10/21/2024
4.0.257 157 10/17/2024
4.0.256 147 10/15/2024
4.0.255 148 10/11/2024
4.0.254 145 10/10/2024
4.0.253 140 10/9/2024
4.0.252 153 10/9/2024
4.0.251 190 10/3/2024
4.0.250 163 10/2/2024
4.0.249 165 9/30/2024
4.0.248 157 9/28/2024
4.0.247 143 9/24/2024
4.0.246 149 9/23/2024
4.0.245 147 9/23/2024
4.0.244 190 9/17/2024
4.0.243 170 9/16/2024
4.0.242 166 9/10/2024
4.0.241 152 9/9/2024
4.0.240 155 9/6/2024
4.0.239 154 9/6/2024
4.0.238 162 9/3/2024
4.0.237 166 9/2/2024
4.0.236 154 8/30/2024
4.0.235 159 8/30/2024
4.0.234 162 8/28/2024
4.0.233 169 8/27/2024
4.0.232 159 8/26/2024
4.0.231 188 8/24/2024
4.0.230 179 8/23/2024
4.0.229 187 8/21/2024
4.0.228 184 8/21/2024
4.0.227 173 8/20/2024
4.0.226 167 8/19/2024
4.0.225 181 8/16/2024
4.0.224 174 8/16/2024
4.0.223 182 8/14/2024
4.0.222 175 8/5/2024
4.0.221 126 8/2/2024
4.0.220 129 8/1/2024
4.0.219 139 7/31/2024
4.0.218 155 7/26/2024
4.0.217 155 7/25/2024
4.0.216 132 7/25/2024
4.0.215 162 7/11/2024
4.0.214 174 7/10/2024
4.0.213 180 7/9/2024
4.0.212 151 7/9/2024
4.0.211 164 7/9/2024
4.0.210 159 7/5/2024
4.0.209 163 7/4/2024
4.0.208 184 7/3/2024
4.0.207 161 7/2/2024
4.0.206 169 6/27/2024
4.0.205 167 6/26/2024
4.0.204 165 6/25/2024
4.0.203 160 6/24/2024
4.0.202 1,032 6/19/2024
4.0.201 171 6/19/2024
4.0.200 166 6/17/2024
4.0.199 169 6/14/2024
4.0.198 158 6/14/2024
4.0.197 143 6/12/2024
4.0.196 169 6/3/2024
4.0.195 159 5/31/2024
4.0.194 142 5/30/2024
4.0.193 163 5/29/2024
4.0.192 150 5/28/2024
4.0.191 158 5/27/2024
4.0.190 166 5/23/2024
4.0.189 165 5/22/2024
4.0.188 170 5/21/2024
4.0.187 179 5/20/2024
4.0.186 173 5/18/2024
4.0.185 170 5/16/2024
4.0.184 170 5/15/2024
4.0.183 168 5/8/2024
4.0.182 185 5/7/2024
4.0.181 185 5/6/2024
4.0.180 162 5/3/2024
4.0.179 697 5/2/2024
4.0.178 147 5/2/2024
4.0.177 167 5/1/2024
4.0.176 176 4/29/2024
4.0.175 162 4/29/2024
4.0.174 169 4/25/2024
4.0.173 182 4/24/2024
4.0.172 175 4/16/2024
4.0.171 168 4/15/2024
4.0.170 186 4/13/2024
4.0.169 160 4/12/2024
4.0.168 177 4/11/2024
4.0.167 173 4/10/2024
4.0.166 162 4/9/2024
4.0.165 182 4/9/2024
4.0.164 168 4/1/2024
4.0.163 165 3/29/2024
4.0.162 171 3/29/2024
4.0.161 175 3/27/2024
4.0.160 166 3/22/2024
4.0.159 174 3/22/2024
4.0.158 186 3/18/2024
4.0.157 178 3/15/2024
4.0.156 168 3/14/2024
4.0.155 176 3/14/2024
4.0.154 177 3/11/2024
4.0.153 184 3/8/2024
4.0.152 176 3/7/2024
4.0.151 189 3/6/2024
4.0.150 197 3/5/2024
4.0.149 198 3/4/2024
4.0.148 1,022 3/2/2024
4.0.147 189 2/29/2024
4.0.146 160 2/29/2024
4.0.145 173 2/27/2024
4.0.144 164 2/26/2024
4.0.143 169 2/23/2024
4.0.142 179 2/22/2024
4.0.141 178 2/22/2024
4.0.140 178 2/21/2024
4.0.139 180 2/20/2024
4.0.138 172 2/19/2024
4.0.137 177 2/19/2024
4.0.136 173 2/16/2024
4.0.135 168 2/16/2024
4.0.134 176 2/15/2024
4.0.133 193 2/14/2024
4.0.132 175 2/14/2024
4.0.131 176 2/13/2024
4.0.130 196 2/9/2024
4.0.129 185 2/9/2024
4.0.128 176 2/7/2024
4.0.127 162 2/6/2024
4.0.126 173 2/6/2024
4.0.125 169 2/5/2024
4.0.124 171 2/3/2024
4.0.123 180 2/1/2024
4.0.122 155 2/1/2024
4.0.121 167 1/31/2024
4.0.120 174 1/29/2024
4.0.119 163 1/25/2024
4.0.118 166 1/24/2024
4.0.117 171 1/23/2024
4.0.116 177 1/22/2024
4.0.115 1,077 1/17/2024
4.0.114 165 1/16/2024
4.0.113 167 1/15/2024
4.0.112 169 1/12/2024
4.0.111 178 1/11/2024
4.0.110 184 1/10/2024
4.0.109 365 1/8/2024
4.0.108 192 1/6/2024
4.0.107 326 12/26/2023
4.0.106 158 12/26/2023
4.0.105 165 12/26/2023
4.0.104 197 12/25/2023
4.0.103 175 12/23/2023
4.0.102 178 12/21/2023
4.0.101 188 12/15/2023
4.0.100 173 12/14/2023
4.0.99 176 12/13/2023
4.0.98 181 12/13/2023
4.0.97 523 12/12/2023
4.0.96 170 12/12/2023
4.0.95 163 12/12/2023
4.0.94 169 12/11/2023
4.0.93 228 12/6/2023
4.0.92 169 12/6/2023
4.0.91 170 12/6/2023
4.0.90 155 12/4/2023
4.0.89 303 11/24/2023
4.0.88 169 11/24/2023
4.0.87 165 11/21/2023
4.0.86 166 11/20/2023
4.0.85 145 11/20/2023
4.0.84 201 11/17/2023
4.0.83 671 11/17/2023
4.0.82 182 11/15/2023
4.0.81 166 11/13/2023
4.0.80 194 11/9/2023
4.0.79 207 11/9/2023
4.0.78 153 11/8/2023
4.0.77 164 11/7/2023
4.0.76 173 11/6/2023
4.0.75 180 11/3/2023
4.0.74 209 11/2/2023
4.0.73 182 11/1/2023
4.0.72 187 10/31/2023
4.0.71 163 10/31/2023
4.0.70 155 10/30/2023
4.0.69 194 10/28/2023
4.0.68 181 10/26/2023
4.0.67 187 10/25/2023
4.0.66 184 10/17/2023
4.0.65 175 10/16/2023
4.0.64 157 10/16/2023
4.0.63 201 10/13/2023
4.0.62 201 10/12/2023
4.0.61 190 10/11/2023
4.0.60 222 10/5/2023
4.0.59 191 10/4/2023
4.0.58 205 9/26/2023
4.0.57 187 9/26/2023
4.0.56 193 9/22/2023
4.0.55 196 9/20/2023
4.0.54 205 9/19/2023
4.0.53 197 9/18/2023
4.0.52 179 9/18/2023
4.0.51 239 9/15/2023
4.0.50 195 9/14/2023
4.0.49 195 9/12/2023
4.0.48 267 9/12/2023
4.0.47 192 9/11/2023
4.0.46 221 9/11/2023
4.0.45 334 9/7/2023
4.0.44 225 9/6/2023
4.0.43 258 9/5/2023
4.0.42 222 9/4/2023
4.0.41 204 9/4/2023
4.0.40 244 9/1/2023
4.0.39 246 8/31/2023
4.0.38 238 8/31/2023
4.0.37 242 8/29/2023
4.0.36 219 8/29/2023
4.0.35 248 8/29/2023
4.0.34 255 8/25/2023
4.0.33 240 8/24/2023
4.0.32 243 8/23/2023
4.0.31 251 8/22/2023
4.0.30 240 8/18/2023
4.0.29 229 8/17/2023
4.0.28 255 8/17/2023
4.0.27 207 8/17/2023
4.0.26 332 8/10/2023
4.0.25 257 8/9/2023
4.0.24 266 8/8/2023
4.0.23 239 8/8/2023
4.0.22 225 8/8/2023
4.0.21 350 8/7/2023
4.0.20 253 8/4/2023
4.0.19 308 8/3/2023
4.0.18 255 8/2/2023
4.0.17 287 7/26/2023
4.0.16 279 7/25/2023
4.0.15 291 7/21/2023
4.0.14 249 7/19/2023
4.0.13 250 7/18/2023
4.0.12 230 7/18/2023
4.0.11 280 7/18/2023
4.0.10 226 7/18/2023
4.0.9 328 7/17/2023
4.0.8 248 7/17/2023
4.0.7 227 7/17/2023
4.0.6 237 7/17/2023
4.0.5 556 1/30/2023
4.0.4 344 1/30/2023
4.0.3 441 1/30/2023
4.0.2 444 1/27/2023
4.0.1 622 12/13/2022
4.0.0 381 12/12/2022
3.0.43 1,586 6/10/2022
3.0.41 1,025 4/20/2022
3.0.40 1,064 1/11/2022
3.0.39 848 1/10/2022
3.0.38 1,126 6/17/2021
3.0.37 839 6/16/2021
3.0.36 784 6/16/2021
3.0.35 571 6/16/2021
3.0.34 547 6/16/2021
3.0.33 1,028 1/7/2021
3.0.32 859 12/16/2020
3.0.31 805 12/14/2020
3.0.29 2,394 9/13/2020
3.0.28 948 6/19/2020
3.0.27 951 6/8/2020
3.0.26 1,709 5/12/2020
3.0.25 1,475 5/12/2020
3.0.24 952 4/28/2020
3.0.23 953 4/24/2020
3.0.22 954 4/16/2020
3.0.21 960 4/16/2020
3.0.20 685 4/15/2020
3.0.19 670 4/15/2020
3.0.18 1,217 4/14/2020
3.0.17 670 4/14/2020
3.0.16 1,006 4/10/2020
3.0.15 1,031 4/10/2020
3.0.14 3,127 3/26/2020
3.0.13 947 3/26/2020
3.0.12 691 3/25/2020
3.0.11 673 3/25/2020
3.0.10 666 3/25/2020
3.0.9 706 3/25/2020
3.0.8 700 3/25/2020
3.0.7 1,186 3/25/2020
3.0.6 1,362 3/21/2020
3.0.5 1,699 3/13/2020
3.0.4 731 3/13/2020
3.0.3 1,425 2/28/2020
3.0.2 1,243 2/21/2020
3.0.1 750 2/11/2020
3.0.0 1,919 12/23/2019
2.0.10 1,152 4/17/2019
2.0.9 1,674 2/21/2019
2.0.8 851 2/21/2019
2.0.7 4,074 8/1/2018
2.0.6 1,435 8/1/2018
2.0.5 1,746 6/26/2018
2.0.4 1,947 6/1/2018
2.0.3 1,905 5/22/2018
2.0.2 2,478 5/11/2018
2.0.1 2,539 2/13/2018
2.0.0 2,457 1/2/2018
1.0.10 14,173 6/16/2017
1.0.8 1,295 6/16/2017
1.0.7 1,261 5/30/2017
1.0.6 1,232 5/30/2017
1.0.5 1,244 5/25/2017
1.0.4 1,266 5/24/2017
1.0.0 1,297 5/24/2017