Holmes 4.0.236

There is a newer version of this package available.
See the version list below for details.
dotnet add package Holmes --version 4.0.236                
NuGet\Install-Package Holmes -Version 4.0.236                
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.236" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Holmes --version 4.0.236                
#r "nuget: Holmes, 4.0.236"                
#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.
// Install Holmes as a Cake Addin
#addin nuget:?package=Holmes&version=4.0.236

// Install Holmes as a Cake Tool
#tool nuget:?package=Holmes&version=4.0.236                

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. 
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.10 63 11/27/2024
5.0.9 53 11/26/2024
5.0.8 93 11/26/2024
5.0.7 96 11/24/2024
5.0.6 71 11/24/2024
5.0.5 68 11/23/2024
5.0.4 72 11/23/2024
4.0.270 91 11/19/2024
4.0.269 79 11/11/2024
4.0.268 67 11/7/2024
4.0.267 71 11/5/2024
4.0.266 69 11/4/2024
4.0.265 77 11/1/2024
4.0.264 70 11/1/2024
4.0.263 76 10/30/2024
4.0.262 83 10/29/2024
4.0.261 75 10/29/2024
4.0.260 79 10/26/2024
4.0.259 78 10/24/2024
4.0.258 86 10/21/2024
4.0.257 102 10/17/2024
4.0.256 88 10/15/2024
4.0.255 90 10/11/2024
4.0.254 88 10/10/2024
4.0.253 82 10/9/2024
4.0.252 91 10/9/2024
4.0.251 115 10/3/2024
4.0.250 103 10/2/2024
4.0.249 104 9/30/2024
4.0.248 94 9/28/2024
4.0.247 83 9/24/2024
4.0.246 90 9/23/2024
4.0.245 86 9/23/2024
4.0.244 128 9/17/2024
4.0.243 108 9/16/2024
4.0.242 112 9/10/2024
4.0.241 98 9/9/2024
4.0.240 100 9/6/2024
4.0.239 95 9/6/2024
4.0.238 105 9/3/2024
4.0.237 108 9/2/2024
4.0.236 101 8/30/2024
4.0.235 104 8/30/2024
4.0.234 101 8/28/2024
4.0.233 113 8/27/2024
4.0.232 101 8/26/2024
4.0.231 130 8/24/2024
4.0.230 126 8/23/2024
4.0.229 126 8/21/2024
4.0.228 125 8/21/2024
4.0.227 119 8/20/2024
4.0.226 114 8/19/2024
4.0.225 123 8/16/2024
4.0.224 117 8/16/2024
4.0.223 124 8/14/2024
4.0.222 102 8/5/2024
4.0.221 72 8/2/2024
4.0.220 74 8/1/2024
4.0.219 80 7/31/2024
4.0.218 103 7/26/2024
4.0.217 88 7/25/2024
4.0.216 76 7/25/2024
4.0.215 105 7/11/2024
4.0.214 112 7/10/2024
4.0.213 124 7/9/2024
4.0.212 93 7/9/2024
4.0.211 109 7/9/2024
4.0.210 100 7/5/2024
4.0.209 102 7/4/2024
4.0.208 127 7/3/2024
4.0.207 102 7/2/2024
4.0.206 109 6/27/2024
4.0.205 111 6/26/2024
4.0.204 106 6/25/2024
4.0.203 105 6/24/2024
4.0.202 945 6/19/2024
4.0.201 110 6/19/2024
4.0.200 115 6/17/2024
4.0.199 111 6/14/2024
4.0.198 102 6/14/2024
4.0.197 91 6/12/2024
4.0.196 114 6/3/2024
4.0.195 101 5/31/2024
4.0.194 89 5/30/2024
4.0.193 108 5/29/2024
4.0.192 97 5/28/2024
4.0.191 102 5/27/2024
4.0.190 109 5/23/2024
4.0.189 109 5/22/2024
4.0.188 114 5/21/2024
4.0.187 121 5/20/2024
4.0.186 115 5/18/2024
4.0.185 115 5/16/2024
4.0.184 115 5/15/2024
4.0.183 106 5/8/2024
4.0.182 128 5/7/2024
4.0.181 133 5/6/2024
4.0.180 109 5/3/2024
4.0.179 638 5/2/2024
4.0.178 94 5/2/2024
4.0.177 113 5/1/2024
4.0.176 121 4/29/2024
4.0.175 106 4/29/2024
4.0.174 112 4/25/2024
4.0.173 128 4/24/2024
4.0.172 118 4/16/2024
4.0.171 113 4/15/2024
4.0.170 133 4/13/2024
4.0.169 108 4/12/2024
4.0.168 121 4/11/2024
4.0.167 118 4/10/2024
4.0.166 106 4/9/2024
4.0.165 126 4/9/2024
4.0.164 120 4/1/2024
4.0.163 117 3/29/2024
4.0.162 118 3/29/2024
4.0.161 119 3/27/2024
4.0.160 112 3/22/2024
4.0.159 120 3/22/2024
4.0.158 126 3/18/2024
4.0.157 125 3/15/2024
4.0.156 115 3/14/2024
4.0.155 121 3/14/2024
4.0.154 126 3/11/2024
4.0.153 130 3/8/2024
4.0.152 126 3/7/2024
4.0.151 135 3/6/2024
4.0.150 148 3/5/2024
4.0.149 145 3/4/2024
4.0.148 962 3/2/2024
4.0.147 136 2/29/2024
4.0.146 109 2/29/2024
4.0.145 122 2/27/2024
4.0.144 113 2/26/2024
4.0.143 114 2/23/2024
4.0.142 124 2/22/2024
4.0.141 123 2/22/2024
4.0.140 119 2/21/2024
4.0.139 124 2/20/2024
4.0.138 111 2/19/2024
4.0.137 118 2/19/2024
4.0.136 116 2/16/2024
4.0.135 113 2/16/2024
4.0.134 115 2/15/2024
4.0.133 135 2/14/2024
4.0.132 120 2/14/2024
4.0.131 122 2/13/2024
4.0.130 138 2/9/2024
4.0.129 128 2/9/2024
4.0.128 125 2/7/2024
4.0.127 115 2/6/2024
4.0.126 123 2/6/2024
4.0.125 116 2/5/2024
4.0.124 123 2/3/2024
4.0.123 127 2/1/2024
4.0.122 104 2/1/2024
4.0.121 106 1/31/2024
4.0.120 121 1/29/2024
4.0.119 111 1/25/2024
4.0.118 111 1/24/2024
4.0.117 120 1/23/2024
4.0.116 121 1/22/2024
4.0.115 1,025 1/17/2024
4.0.114 116 1/16/2024
4.0.113 113 1/15/2024
4.0.112 120 1/12/2024
4.0.111 125 1/11/2024
4.0.110 125 1/10/2024
4.0.109 314 1/8/2024
4.0.108 141 1/6/2024
4.0.107 280 12/26/2023
4.0.106 109 12/26/2023
4.0.105 115 12/26/2023
4.0.104 142 12/25/2023
4.0.103 125 12/23/2023
4.0.102 126 12/21/2023
4.0.101 140 12/15/2023
4.0.100 122 12/14/2023
4.0.99 129 12/13/2023
4.0.98 134 12/13/2023
4.0.97 469 12/12/2023
4.0.96 123 12/12/2023
4.0.95 115 12/12/2023
4.0.94 114 12/11/2023
4.0.93 201 12/6/2023
4.0.92 143 12/6/2023
4.0.91 144 12/6/2023
4.0.90 125 12/4/2023
4.0.89 279 11/24/2023
4.0.88 145 11/24/2023
4.0.87 138 11/21/2023
4.0.86 142 11/20/2023
4.0.85 122 11/20/2023
4.0.84 175 11/17/2023
4.0.83 439 11/17/2023
4.0.82 152 11/15/2023
4.0.81 141 11/13/2023
4.0.80 165 11/9/2023
4.0.79 182 11/9/2023
4.0.78 129 11/8/2023
4.0.77 141 11/7/2023
4.0.76 149 11/6/2023
4.0.75 152 11/3/2023
4.0.74 183 11/2/2023
4.0.73 156 11/1/2023
4.0.72 160 10/31/2023
4.0.71 136 10/31/2023
4.0.70 129 10/30/2023
4.0.69 166 10/28/2023
4.0.68 148 10/26/2023
4.0.67 156 10/25/2023
4.0.66 153 10/17/2023
4.0.65 143 10/16/2023
4.0.64 122 10/16/2023
4.0.63 169 10/13/2023
4.0.62 165 10/12/2023
4.0.61 157 10/11/2023
4.0.60 185 10/5/2023
4.0.59 158 10/4/2023
4.0.58 170 9/26/2023
4.0.57 153 9/26/2023
4.0.56 160 9/22/2023
4.0.55 165 9/20/2023
4.0.54 168 9/19/2023
4.0.53 163 9/18/2023
4.0.52 140 9/18/2023
4.0.51 201 9/15/2023
4.0.50 160 9/14/2023
4.0.49 162 9/12/2023
4.0.48 226 9/12/2023
4.0.47 147 9/11/2023
4.0.46 178 9/11/2023
4.0.45 273 9/7/2023
4.0.44 179 9/6/2023
4.0.43 212 9/5/2023
4.0.42 176 9/4/2023
4.0.41 158 9/4/2023
4.0.40 197 9/1/2023
4.0.39 199 8/31/2023
4.0.38 191 8/31/2023
4.0.37 194 8/29/2023
4.0.36 172 8/29/2023
4.0.35 201 8/29/2023
4.0.34 205 8/25/2023
4.0.33 191 8/24/2023
4.0.32 195 8/23/2023
4.0.31 201 8/22/2023
4.0.30 191 8/18/2023
4.0.29 179 8/17/2023
4.0.28 206 8/17/2023
4.0.27 159 8/17/2023
4.0.26 275 8/10/2023
4.0.25 202 8/9/2023
4.0.24 213 8/8/2023
4.0.23 184 8/8/2023
4.0.22 170 8/8/2023
4.0.21 296 8/7/2023
4.0.20 200 8/4/2023
4.0.19 252 8/3/2023
4.0.18 203 8/2/2023
4.0.17 234 7/26/2023
4.0.16 225 7/25/2023
4.0.15 234 7/21/2023
4.0.14 196 7/19/2023
4.0.13 194 7/18/2023
4.0.12 170 7/18/2023
4.0.11 225 7/18/2023
4.0.10 172 7/18/2023
4.0.9 270 7/17/2023
4.0.8 183 7/17/2023
4.0.7 171 7/17/2023
4.0.6 176 7/17/2023
4.0.5 489 1/30/2023
4.0.4 274 1/30/2023
4.0.3 374 1/30/2023
4.0.2 380 1/27/2023
4.0.1 556 12/13/2022
4.0.0 316 12/12/2022
3.0.43 1,505 6/10/2022
3.0.41 939 4/20/2022
3.0.40 977 1/11/2022
3.0.39 759 1/10/2022
3.0.38 1,027 6/17/2021
3.0.37 749 6/16/2021
3.0.36 694 6/16/2021
3.0.35 479 6/16/2021
3.0.34 458 6/16/2021
3.0.33 924 1/7/2021
3.0.32 759 12/16/2020
3.0.31 702 12/14/2020
3.0.29 2,292 9/13/2020
3.0.28 844 6/19/2020
3.0.27 849 6/8/2020
3.0.26 1,600 5/12/2020
3.0.25 1,365 5/12/2020
3.0.24 839 4/28/2020
3.0.23 845 4/24/2020
3.0.22 845 4/16/2020
3.0.21 850 4/16/2020
3.0.20 577 4/15/2020
3.0.19 560 4/15/2020
3.0.18 1,103 4/14/2020
3.0.17 555 4/14/2020
3.0.16 896 4/10/2020
3.0.15 923 4/10/2020
3.0.14 3,017 3/26/2020
3.0.13 835 3/26/2020
3.0.12 582 3/25/2020
3.0.11 564 3/25/2020
3.0.10 555 3/25/2020
3.0.9 596 3/25/2020
3.0.8 587 3/25/2020
3.0.7 1,078 3/25/2020
3.0.6 1,249 3/21/2020
3.0.5 1,588 3/13/2020
3.0.4 620 3/13/2020
3.0.3 1,313 2/28/2020
3.0.2 1,133 2/21/2020
3.0.1 632 2/11/2020
3.0.0 1,808 12/23/2019
2.0.10 1,035 4/17/2019
2.0.9 1,556 2/21/2019
2.0.8 732 2/21/2019
2.0.7 3,844 8/1/2018
2.0.6 1,204 8/1/2018
2.0.5 1,511 6/26/2018
2.0.4 1,602 6/1/2018
2.0.3 1,558 5/22/2018
2.0.2 2,113 5/11/2018
2.0.1 2,186 2/13/2018
2.0.0 2,095 1/2/2018
1.0.10 13,927 6/16/2017
1.0.8 1,050 6/16/2017
1.0.7 1,014 5/30/2017
1.0.6 989 5/30/2017
1.0.5 1,002 5/25/2017
1.0.4 1,021 5/24/2017
1.0.0 1,043 5/24/2017