Holmes 4.0.238

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 4.0.238
                    
NuGet\Install-Package Holmes -Version 4.0.238
                    
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="4.0.238" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="4.0.238" />
                    
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 4.0.238
                    
#r "nuget: Holmes, 4.0.238"
                    
#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.
#addin nuget:?package=Holmes&version=4.0.238
                    
Install as a Cake Addin
#tool nuget:?package=Holmes&version=4.0.238
                    
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 net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  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.48 166 7/1/2025
5.0.47 119 7/1/2025
5.0.46 125 7/1/2025
5.0.45 132 6/28/2025
5.0.44 55 6/27/2025
5.0.43 172 6/27/2025
5.0.42 166 6/26/2025
5.0.41 134 6/18/2025
5.0.40 277 6/10/2025
5.0.39 71 5/30/2025
5.0.38 80 5/23/2025
5.0.37 225 5/14/2025
5.0.36 78 5/2/2025
5.0.35 164 4/29/2025
5.0.34 189 4/10/2025
5.0.33 163 3/17/2025
5.0.32 121 2/24/2025
5.0.31 145 2/13/2025
5.0.30 254 2/3/2025
5.0.29 158 1/30/2025
5.0.28 119 1/29/2025
5.0.27 128 1/29/2025
5.0.26 139 1/28/2025
5.0.25 130 1/24/2025
5.0.24 125 1/23/2025
5.0.23 132 1/22/2025
5.0.22 133 1/16/2025
5.0.21 122 1/15/2025
5.0.20 70 1/14/2025
5.0.19 84 1/13/2025
5.0.18 105 1/10/2025
5.0.17 89 1/9/2025
5.0.16 69 1/8/2025
5.0.15 194 12/17/2024
5.0.14 141 12/16/2024
5.0.13 146 12/10/2024
5.0.12 131 12/9/2024
5.0.11 138 12/6/2024
5.0.10 184 11/27/2024
5.0.9 121 11/26/2024
5.0.8 154 11/26/2024
5.0.7 150 11/24/2024
5.0.6 119 11/24/2024
5.0.5 114 11/23/2024
5.0.4 116 11/23/2024
4.0.270 137 11/19/2024
4.0.269 126 11/11/2024
4.0.268 112 11/7/2024
4.0.267 116 11/5/2024
4.0.266 111 11/4/2024
4.0.265 126 11/1/2024
4.0.264 113 11/1/2024
4.0.263 116 10/30/2024
4.0.262 124 10/29/2024
4.0.261 118 10/29/2024
4.0.260 121 10/26/2024
4.0.259 126 10/24/2024
4.0.258 130 10/21/2024
4.0.257 135 10/17/2024
4.0.256 124 10/15/2024
4.0.255 126 10/11/2024
4.0.254 122 10/10/2024
4.0.253 118 10/9/2024
4.0.252 130 10/9/2024
4.0.251 168 10/3/2024
4.0.250 141 10/2/2024
4.0.249 143 9/30/2024
4.0.248 132 9/28/2024
4.0.247 121 9/24/2024
4.0.246 126 9/23/2024
4.0.245 123 9/23/2024
4.0.244 167 9/17/2024
4.0.243 149 9/16/2024
4.0.242 144 9/10/2024
4.0.241 129 9/9/2024
4.0.240 133 9/6/2024
4.0.239 129 9/6/2024
4.0.238 138 9/3/2024
4.0.237 146 9/2/2024
4.0.236 131 8/30/2024
4.0.235 137 8/30/2024
4.0.234 140 8/28/2024
4.0.233 146 8/27/2024
4.0.232 135 8/26/2024
4.0.231 163 8/24/2024
4.0.230 157 8/23/2024
4.0.229 164 8/21/2024
4.0.228 159 8/21/2024
4.0.227 151 8/20/2024
4.0.226 146 8/19/2024
4.0.225 158 8/16/2024
4.0.224 151 8/16/2024
4.0.223 158 8/14/2024
4.0.222 151 8/5/2024
4.0.221 103 8/2/2024
4.0.220 107 8/1/2024
4.0.219 116 7/31/2024
4.0.218 134 7/26/2024
4.0.217 129 7/25/2024
4.0.216 109 7/25/2024
4.0.215 139 7/11/2024
4.0.214 152 7/10/2024
4.0.213 157 7/9/2024
4.0.212 126 7/9/2024
4.0.211 141 7/9/2024
4.0.210 136 7/5/2024
4.0.209 137 7/4/2024
4.0.208 162 7/3/2024
4.0.207 138 7/2/2024
4.0.206 146 6/27/2024
4.0.205 142 6/26/2024
4.0.204 143 6/25/2024
4.0.203 137 6/24/2024
4.0.202 1,010 6/19/2024
4.0.201 148 6/19/2024
4.0.200 145 6/17/2024
4.0.199 145 6/14/2024
4.0.198 135 6/14/2024
4.0.197 121 6/12/2024
4.0.196 145 6/3/2024
4.0.195 137 5/31/2024
4.0.194 119 5/30/2024
4.0.193 141 5/29/2024
4.0.192 127 5/28/2024
4.0.191 135 5/27/2024
4.0.190 142 5/23/2024
4.0.189 141 5/22/2024
4.0.188 148 5/21/2024
4.0.187 155 5/20/2024
4.0.186 150 5/18/2024
4.0.185 146 5/16/2024
4.0.184 145 5/15/2024
4.0.183 146 5/8/2024
4.0.182 163 5/7/2024
4.0.181 164 5/6/2024
4.0.180 139 5/3/2024
4.0.179 672 5/2/2024
4.0.178 124 5/2/2024
4.0.177 145 5/1/2024
4.0.176 153 4/29/2024
4.0.175 137 4/29/2024
4.0.174 145 4/25/2024
4.0.173 160 4/24/2024
4.0.172 152 4/16/2024
4.0.171 147 4/15/2024
4.0.170 163 4/13/2024
4.0.169 139 4/12/2024
4.0.168 154 4/11/2024
4.0.167 152 4/10/2024
4.0.166 141 4/9/2024
4.0.165 160 4/9/2024
4.0.164 146 4/1/2024
4.0.163 144 3/29/2024
4.0.162 148 3/29/2024
4.0.161 154 3/27/2024
4.0.160 143 3/22/2024
4.0.159 152 3/22/2024
4.0.158 163 3/18/2024
4.0.157 157 3/15/2024
4.0.156 145 3/14/2024
4.0.155 154 3/14/2024
4.0.154 156 3/11/2024
4.0.153 160 3/8/2024
4.0.152 153 3/7/2024
4.0.151 165 3/6/2024
4.0.150 174 3/5/2024
4.0.149 175 3/4/2024
4.0.148 995 3/2/2024
4.0.147 166 2/29/2024
4.0.146 140 2/29/2024
4.0.145 152 2/27/2024
4.0.144 143 2/26/2024
4.0.143 148 2/23/2024
4.0.142 157 2/22/2024
4.0.141 157 2/22/2024
4.0.140 155 2/21/2024
4.0.139 160 2/20/2024
4.0.138 149 2/19/2024
4.0.137 155 2/19/2024
4.0.136 152 2/16/2024
4.0.135 148 2/16/2024
4.0.134 153 2/15/2024
4.0.133 172 2/14/2024
4.0.132 152 2/14/2024
4.0.131 155 2/13/2024
4.0.130 174 2/9/2024
4.0.129 165 2/9/2024
4.0.128 156 2/7/2024
4.0.127 142 2/6/2024
4.0.126 152 2/6/2024
4.0.125 149 2/5/2024
4.0.124 148 2/3/2024
4.0.123 159 2/1/2024
4.0.122 134 2/1/2024
4.0.121 147 1/31/2024
4.0.120 153 1/29/2024
4.0.119 141 1/25/2024
4.0.118 144 1/24/2024
4.0.117 149 1/23/2024
4.0.116 152 1/22/2024
4.0.115 1,057 1/17/2024
4.0.114 145 1/16/2024
4.0.113 145 1/15/2024
4.0.112 148 1/12/2024
4.0.111 156 1/11/2024
4.0.110 159 1/10/2024
4.0.109 344 1/8/2024
4.0.108 170 1/6/2024
4.0.107 305 12/26/2023
4.0.106 138 12/26/2023
4.0.105 144 12/26/2023
4.0.104 176 12/25/2023
4.0.103 153 12/23/2023
4.0.102 158 12/21/2023
4.0.101 168 12/15/2023
4.0.100 153 12/14/2023
4.0.99 155 12/13/2023
4.0.98 160 12/13/2023
4.0.97 502 12/12/2023
4.0.96 150 12/12/2023
4.0.95 143 12/12/2023
4.0.94 145 12/11/2023
4.0.93 222 12/6/2023
4.0.92 161 12/6/2023
4.0.91 163 12/6/2023
4.0.90 148 12/4/2023
4.0.89 296 11/24/2023
4.0.88 162 11/24/2023
4.0.87 159 11/21/2023
4.0.86 158 11/20/2023
4.0.85 139 11/20/2023
4.0.84 193 11/17/2023
4.0.83 663 11/17/2023
4.0.82 175 11/15/2023
4.0.81 159 11/13/2023
4.0.80 185 11/9/2023
4.0.79 200 11/9/2023
4.0.78 146 11/8/2023
4.0.77 157 11/7/2023
4.0.76 166 11/6/2023
4.0.75 170 11/3/2023
4.0.74 200 11/2/2023
4.0.73 172 11/1/2023
4.0.72 176 10/31/2023
4.0.71 153 10/31/2023
4.0.70 147 10/30/2023
4.0.69 183 10/28/2023
4.0.68 172 10/26/2023
4.0.67 178 10/25/2023
4.0.66 175 10/17/2023
4.0.65 165 10/16/2023
4.0.64 147 10/16/2023
4.0.63 192 10/13/2023
4.0.62 191 10/12/2023
4.0.61 179 10/11/2023
4.0.60 210 10/5/2023
4.0.59 181 10/4/2023
4.0.58 193 9/26/2023
4.0.57 177 9/26/2023
4.0.56 182 9/22/2023
4.0.55 187 9/20/2023
4.0.54 196 9/19/2023
4.0.53 186 9/18/2023
4.0.52 163 9/18/2023
4.0.51 226 9/15/2023
4.0.50 183 9/14/2023
4.0.49 185 9/12/2023
4.0.48 253 9/12/2023
4.0.47 173 9/11/2023
4.0.46 206 9/11/2023
4.0.45 313 9/7/2023
4.0.44 206 9/6/2023
4.0.43 238 9/5/2023
4.0.42 202 9/4/2023
4.0.41 184 9/4/2023
4.0.40 223 9/1/2023
4.0.39 226 8/31/2023
4.0.38 216 8/31/2023
4.0.37 221 8/29/2023
4.0.36 199 8/29/2023
4.0.35 228 8/29/2023
4.0.34 232 8/25/2023
4.0.33 218 8/24/2023
4.0.32 220 8/23/2023
4.0.31 227 8/22/2023
4.0.30 217 8/18/2023
4.0.29 205 8/17/2023
4.0.28 233 8/17/2023
4.0.27 185 8/17/2023
4.0.26 304 8/10/2023
4.0.25 232 8/9/2023
4.0.24 241 8/8/2023
4.0.23 215 8/8/2023
4.0.22 201 8/8/2023
4.0.21 326 8/7/2023
4.0.20 229 8/4/2023
4.0.19 284 8/3/2023
4.0.18 232 8/2/2023
4.0.17 263 7/26/2023
4.0.16 256 7/25/2023
4.0.15 266 7/21/2023
4.0.14 224 7/19/2023
4.0.13 226 7/18/2023
4.0.12 203 7/18/2023
4.0.11 254 7/18/2023
4.0.10 201 7/18/2023
4.0.9 304 7/17/2023
4.0.8 223 7/17/2023
4.0.7 203 7/17/2023
4.0.6 211 7/17/2023
4.0.5 527 1/30/2023
4.0.4 313 1/30/2023
4.0.3 413 1/30/2023
4.0.2 416 1/27/2023
4.0.1 594 12/13/2022
4.0.0 352 12/12/2022
3.0.43 1,553 6/10/2022
3.0.41 991 4/20/2022
3.0.40 1,031 1/11/2022
3.0.39 816 1/10/2022
3.0.38 1,093 6/17/2021
3.0.37 805 6/16/2021
3.0.36 751 6/16/2021
3.0.35 537 6/16/2021
3.0.34 514 6/16/2021
3.0.33 993 1/7/2021
3.0.32 823 12/16/2020
3.0.31 768 12/14/2020
3.0.29 2,358 9/13/2020
3.0.28 911 6/19/2020
3.0.27 916 6/8/2020
3.0.26 1,673 5/12/2020
3.0.25 1,438 5/12/2020
3.0.24 914 4/28/2020
3.0.23 917 4/24/2020
3.0.22 918 4/16/2020
3.0.21 923 4/16/2020
3.0.20 649 4/15/2020
3.0.19 632 4/15/2020
3.0.18 1,179 4/14/2020
3.0.17 632 4/14/2020
3.0.16 968 4/10/2020
3.0.15 995 4/10/2020
3.0.14 3,090 3/26/2020
3.0.13 910 3/26/2020
3.0.12 655 3/25/2020
3.0.11 636 3/25/2020
3.0.10 628 3/25/2020
3.0.9 669 3/25/2020
3.0.8 662 3/25/2020
3.0.7 1,150 3/25/2020
3.0.6 1,324 3/21/2020
3.0.5 1,661 3/13/2020
3.0.4 693 3/13/2020
3.0.3 1,387 2/28/2020
3.0.2 1,206 2/21/2020
3.0.1 713 2/11/2020
3.0.0 1,882 12/23/2019
2.0.10 1,116 4/17/2019
2.0.9 1,636 2/21/2019
2.0.8 814 2/21/2019
2.0.7 4,006 8/1/2018
2.0.6 1,367 8/1/2018
2.0.5 1,677 6/26/2018
2.0.4 1,843 6/1/2018
2.0.3 1,802 5/22/2018
2.0.2 2,363 5/11/2018
2.0.1 2,435 2/13/2018
2.0.0 2,349 1/2/2018
1.0.10 14,101 6/16/2017
1.0.8 1,224 6/16/2017
1.0.7 1,189 5/30/2017
1.0.6 1,162 5/30/2017
1.0.5 1,173 5/25/2017
1.0.4 1,195 5/24/2017
1.0.0 1,226 5/24/2017