Holmes 5.0.42

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 5.0.42
                    
NuGet\Install-Package Holmes -Version 5.0.42
                    
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.42" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.42" />
                    
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.42
                    
#r "nuget: Holmes, 5.0.42"
                    
#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.42
                    
#: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.42
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.42
                    
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.70 240 8/20/2025
5.0.69 133 8/20/2025
5.0.68 132 8/20/2025
5.0.67 135 8/19/2025
5.0.66 133 8/19/2025
5.0.65 132 8/19/2025
5.0.64 142 8/15/2025
5.0.63 291 8/6/2025
5.0.62 247 8/5/2025
5.0.61 222 8/5/2025
5.0.60 226 8/5/2025
5.0.59 227 8/5/2025
5.0.58 211 8/5/2025
5.0.57 132 8/1/2025
5.0.56 115 7/29/2025
5.0.55 102 7/29/2025
5.0.54 140 7/17/2025
5.0.53 138 7/16/2025
5.0.52 168 7/15/2025
5.0.51 145 7/15/2025
5.0.50 139 7/15/2025
5.0.49 168 7/8/2025
5.0.48 267 7/1/2025
5.0.47 144 7/1/2025
5.0.46 148 7/1/2025
5.0.45 153 6/28/2025
5.0.44 76 6/27/2025
5.0.43 191 6/27/2025
5.0.42 189 6/26/2025
5.0.41 155 6/18/2025
5.0.40 297 6/10/2025
5.0.39 89 5/30/2025
5.0.38 97 5/23/2025
5.0.37 242 5/14/2025
5.0.36 94 5/2/2025
5.0.35 180 4/29/2025
5.0.34 208 4/10/2025
5.0.33 180 3/17/2025
5.0.32 138 2/24/2025
5.0.31 164 2/13/2025
5.0.30 275 2/3/2025
5.0.29 175 1/30/2025
5.0.28 135 1/29/2025
5.0.27 144 1/29/2025
5.0.26 155 1/28/2025
5.0.25 149 1/24/2025
5.0.24 141 1/23/2025
5.0.23 149 1/22/2025
5.0.22 151 1/16/2025
5.0.21 138 1/15/2025
5.0.20 87 1/14/2025
5.0.19 103 1/13/2025
5.0.18 122 1/10/2025
5.0.17 107 1/9/2025
5.0.16 86 1/8/2025
5.0.15 212 12/17/2024
5.0.14 158 12/16/2024
5.0.13 164 12/10/2024
5.0.12 148 12/9/2024
5.0.11 154 12/6/2024
5.0.10 200 11/27/2024
5.0.9 138 11/26/2024
5.0.8 170 11/26/2024
5.0.7 168 11/24/2024
5.0.6 136 11/24/2024
5.0.5 130 11/23/2024
5.0.4 132 11/23/2024
4.0.270 154 11/19/2024
4.0.269 145 11/11/2024
4.0.268 129 11/7/2024
4.0.267 133 11/5/2024
4.0.266 128 11/4/2024
4.0.265 144 11/1/2024
4.0.264 130 11/1/2024
4.0.263 134 10/30/2024
4.0.262 141 10/29/2024
4.0.261 134 10/29/2024
4.0.260 139 10/26/2024
4.0.259 144 10/24/2024
4.0.258 146 10/21/2024
4.0.257 151 10/17/2024
4.0.256 141 10/15/2024
4.0.255 142 10/11/2024
4.0.254 138 10/10/2024
4.0.253 134 10/9/2024
4.0.252 145 10/9/2024
4.0.251 184 10/3/2024
4.0.250 156 10/2/2024
4.0.249 159 9/30/2024
4.0.248 151 9/28/2024
4.0.247 137 9/24/2024
4.0.246 143 9/23/2024
4.0.245 140 9/23/2024
4.0.244 184 9/17/2024
4.0.243 164 9/16/2024
4.0.242 160 9/10/2024
4.0.241 146 9/9/2024
4.0.240 149 9/6/2024
4.0.239 147 9/6/2024
4.0.238 156 9/3/2024
4.0.237 160 9/2/2024
4.0.236 147 8/30/2024
4.0.235 152 8/30/2024
4.0.234 156 8/28/2024
4.0.233 163 8/27/2024
4.0.232 153 8/26/2024
4.0.231 182 8/24/2024
4.0.230 173 8/23/2024
4.0.229 181 8/21/2024
4.0.228 178 8/21/2024
4.0.227 166 8/20/2024
4.0.226 161 8/19/2024
4.0.225 175 8/16/2024
4.0.224 168 8/16/2024
4.0.223 176 8/14/2024
4.0.222 169 8/5/2024
4.0.221 120 8/2/2024
4.0.220 123 8/1/2024
4.0.219 133 7/31/2024
4.0.218 149 7/26/2024
4.0.217 148 7/25/2024
4.0.216 125 7/25/2024
4.0.215 156 7/11/2024
4.0.214 168 7/10/2024
4.0.213 174 7/9/2024
4.0.212 145 7/9/2024
4.0.211 158 7/9/2024
4.0.210 152 7/5/2024
4.0.209 156 7/4/2024
4.0.208 178 7/3/2024
4.0.207 154 7/2/2024
4.0.206 163 6/27/2024
4.0.205 160 6/26/2024
4.0.204 159 6/25/2024
4.0.203 153 6/24/2024
4.0.202 1,026 6/19/2024
4.0.201 164 6/19/2024
4.0.200 160 6/17/2024
4.0.199 161 6/14/2024
4.0.198 152 6/14/2024
4.0.197 137 6/12/2024
4.0.196 163 6/3/2024
4.0.195 153 5/31/2024
4.0.194 136 5/30/2024
4.0.193 157 5/29/2024
4.0.192 143 5/28/2024
4.0.191 152 5/27/2024
4.0.190 160 5/23/2024
4.0.189 159 5/22/2024
4.0.188 164 5/21/2024
4.0.187 173 5/20/2024
4.0.186 167 5/18/2024
4.0.185 164 5/16/2024
4.0.184 162 5/15/2024
4.0.183 162 5/8/2024
4.0.182 179 5/7/2024
4.0.181 179 5/6/2024
4.0.180 156 5/3/2024
4.0.179 691 5/2/2024
4.0.178 141 5/2/2024
4.0.177 160 5/1/2024
4.0.176 169 4/29/2024
4.0.175 155 4/29/2024
4.0.174 163 4/25/2024
4.0.173 176 4/24/2024
4.0.172 169 4/16/2024
4.0.171 162 4/15/2024
4.0.170 180 4/13/2024
4.0.169 154 4/12/2024
4.0.168 171 4/11/2024
4.0.167 167 4/10/2024
4.0.166 156 4/9/2024
4.0.165 176 4/9/2024
4.0.164 161 4/1/2024
4.0.163 159 3/29/2024
4.0.162 165 3/29/2024
4.0.161 169 3/27/2024
4.0.160 160 3/22/2024
4.0.159 168 3/22/2024
4.0.158 179 3/18/2024
4.0.157 171 3/15/2024
4.0.156 161 3/14/2024
4.0.155 170 3/14/2024
4.0.154 170 3/11/2024
4.0.153 176 3/8/2024
4.0.152 168 3/7/2024
4.0.151 181 3/6/2024
4.0.150 191 3/5/2024
4.0.149 190 3/4/2024
4.0.148 1,015 3/2/2024
4.0.147 183 2/29/2024
4.0.146 154 2/29/2024
4.0.145 166 2/27/2024
4.0.144 157 2/26/2024
4.0.143 163 2/23/2024
4.0.142 173 2/22/2024
4.0.141 171 2/22/2024
4.0.140 171 2/21/2024
4.0.139 174 2/20/2024
4.0.138 165 2/19/2024
4.0.137 170 2/19/2024
4.0.136 167 2/16/2024
4.0.135 162 2/16/2024
4.0.134 169 2/15/2024
4.0.133 187 2/14/2024
4.0.132 169 2/14/2024
4.0.131 170 2/13/2024
4.0.130 190 2/9/2024
4.0.129 179 2/9/2024
4.0.128 170 2/7/2024
4.0.127 156 2/6/2024
4.0.126 167 2/6/2024
4.0.125 163 2/5/2024
4.0.124 164 2/3/2024
4.0.123 173 2/1/2024
4.0.122 149 2/1/2024
4.0.121 161 1/31/2024
4.0.120 168 1/29/2024
4.0.119 157 1/25/2024
4.0.118 160 1/24/2024
4.0.117 164 1/23/2024
4.0.116 170 1/22/2024
4.0.115 1,071 1/17/2024
4.0.114 159 1/16/2024
4.0.113 161 1/15/2024
4.0.112 163 1/12/2024
4.0.111 172 1/11/2024
4.0.110 177 1/10/2024
4.0.109 359 1/8/2024
4.0.108 186 1/6/2024
4.0.107 320 12/26/2023
4.0.106 152 12/26/2023
4.0.105 159 12/26/2023
4.0.104 191 12/25/2023
4.0.103 169 12/23/2023
4.0.102 172 12/21/2023
4.0.101 182 12/15/2023
4.0.100 167 12/14/2023
4.0.99 170 12/13/2023
4.0.98 175 12/13/2023
4.0.97 517 12/12/2023
4.0.96 164 12/12/2023
4.0.95 157 12/12/2023
4.0.94 163 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 208 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 174 10/16/2023
4.0.64 157 10/16/2023
4.0.63 201 10/13/2023
4.0.62 199 10/12/2023
4.0.61 190 10/11/2023
4.0.60 221 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 266 9/12/2023
4.0.47 191 9/11/2023
4.0.46 220 9/11/2023
4.0.45 330 9/7/2023
4.0.44 221 9/6/2023
4.0.43 254 9/5/2023
4.0.42 218 9/4/2023
4.0.41 200 9/4/2023
4.0.40 240 9/1/2023
4.0.39 242 8/31/2023
4.0.38 234 8/31/2023
4.0.37 237 8/29/2023
4.0.36 215 8/29/2023
4.0.35 244 8/29/2023
4.0.34 250 8/25/2023
4.0.33 235 8/24/2023
4.0.32 238 8/23/2023
4.0.31 246 8/22/2023
4.0.30 235 8/18/2023
4.0.29 224 8/17/2023
4.0.28 250 8/17/2023
4.0.27 202 8/17/2023
4.0.26 326 8/10/2023
4.0.25 250 8/9/2023
4.0.24 260 8/8/2023
4.0.23 233 8/8/2023
4.0.22 219 8/8/2023
4.0.21 344 8/7/2023
4.0.20 247 8/4/2023
4.0.19 302 8/3/2023
4.0.18 249 8/2/2023
4.0.17 281 7/26/2023
4.0.16 273 7/25/2023
4.0.15 285 7/21/2023
4.0.14 243 7/19/2023
4.0.13 244 7/18/2023
4.0.12 224 7/18/2023
4.0.11 274 7/18/2023
4.0.10 220 7/18/2023
4.0.9 322 7/17/2023
4.0.8 241 7/17/2023
4.0.7 221 7/17/2023
4.0.6 231 7/17/2023
4.0.5 546 1/30/2023
4.0.4 335 1/30/2023
4.0.3 432 1/30/2023
4.0.2 435 1/27/2023
4.0.1 613 12/13/2022
4.0.0 372 12/12/2022
3.0.43 1,576 6/10/2022
3.0.41 1,015 4/20/2022
3.0.40 1,053 1/11/2022
3.0.39 838 1/10/2022
3.0.38 1,116 6/17/2021
3.0.37 829 6/16/2021
3.0.36 774 6/16/2021
3.0.35 561 6/16/2021
3.0.34 537 6/16/2021
3.0.33 1,018 1/7/2021
3.0.32 849 12/16/2020
3.0.31 794 12/14/2020
3.0.29 2,386 9/13/2020
3.0.28 941 6/19/2020
3.0.27 945 6/8/2020
3.0.26 1,703 5/12/2020
3.0.25 1,468 5/12/2020
3.0.24 946 4/28/2020
3.0.23 947 4/24/2020
3.0.22 948 4/16/2020
3.0.21 954 4/16/2020
3.0.20 679 4/15/2020
3.0.19 663 4/15/2020
3.0.18 1,211 4/14/2020
3.0.17 664 4/14/2020
3.0.16 1,000 4/10/2020
3.0.15 1,025 4/10/2020
3.0.14 3,121 3/26/2020
3.0.13 941 3/26/2020
3.0.12 685 3/25/2020
3.0.11 667 3/25/2020
3.0.10 660 3/25/2020
3.0.9 700 3/25/2020
3.0.8 694 3/25/2020
3.0.7 1,180 3/25/2020
3.0.6 1,356 3/21/2020
3.0.5 1,693 3/13/2020
3.0.4 725 3/13/2020
3.0.3 1,419 2/28/2020
3.0.2 1,237 2/21/2020
3.0.1 744 2/11/2020
3.0.0 1,912 12/23/2019
2.0.10 1,146 4/17/2019
2.0.9 1,668 2/21/2019
2.0.8 844 2/21/2019
2.0.7 4,062 8/1/2018
2.0.6 1,423 8/1/2018
2.0.5 1,734 6/26/2018
2.0.4 1,928 6/1/2018
2.0.3 1,887 5/22/2018
2.0.2 2,460 5/11/2018
2.0.1 2,521 2/13/2018
2.0.0 2,440 1/2/2018
1.0.10 14,161 6/16/2017
1.0.8 1,283 6/16/2017
1.0.7 1,248 5/30/2017
1.0.6 1,220 5/30/2017
1.0.5 1,232 5/25/2017
1.0.4 1,254 5/24/2017
1.0.0 1,285 5/24/2017