Holmes 4.0.244

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

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

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
4.0.268 28 11/7/2024
4.0.267 53 11/5/2024
4.0.266 60 11/4/2024
4.0.265 68 11/1/2024
4.0.264 61 11/1/2024
4.0.263 71 10/30/2024
4.0.262 78 10/29/2024
4.0.261 70 10/29/2024
4.0.260 74 10/26/2024
4.0.259 73 10/24/2024
4.0.258 81 10/21/2024
4.0.257 97 10/17/2024
4.0.256 83 10/15/2024
4.0.255 84 10/11/2024
4.0.254 82 10/10/2024
4.0.253 76 10/9/2024
4.0.252 85 10/9/2024
4.0.251 109 10/3/2024
4.0.250 97 10/2/2024
4.0.249 98 9/30/2024
4.0.248 90 9/28/2024
4.0.247 79 9/24/2024
4.0.246 86 9/23/2024
4.0.245 82 9/23/2024
4.0.244 124 9/17/2024
4.0.243 104 9/16/2024
4.0.242 108 9/10/2024
4.0.241 94 9/9/2024
4.0.240 97 9/6/2024
4.0.239 92 9/6/2024
4.0.238 102 9/3/2024
4.0.237 105 9/2/2024
4.0.236 98 8/30/2024
4.0.235 101 8/30/2024
4.0.234 98 8/28/2024
4.0.233 110 8/27/2024
4.0.232 98 8/26/2024
4.0.231 127 8/24/2024
4.0.230 123 8/23/2024
4.0.229 123 8/21/2024
4.0.228 122 8/21/2024
4.0.227 116 8/20/2024
4.0.226 111 8/19/2024
4.0.225 120 8/16/2024
4.0.224 114 8/16/2024
4.0.223 121 8/14/2024
4.0.222 99 8/5/2024
4.0.221 69 8/2/2024
4.0.220 71 8/1/2024
4.0.219 77 7/31/2024
4.0.218 100 7/26/2024
4.0.217 85 7/25/2024
4.0.216 73 7/25/2024
4.0.215 102 7/11/2024
4.0.214 109 7/10/2024
4.0.213 121 7/9/2024
4.0.212 90 7/9/2024
4.0.211 106 7/9/2024
4.0.210 97 7/5/2024
4.0.209 99 7/4/2024
4.0.208 124 7/3/2024
4.0.207 99 7/2/2024
4.0.206 106 6/27/2024
4.0.205 108 6/26/2024
4.0.204 103 6/25/2024
4.0.203 102 6/24/2024
4.0.202 913 6/19/2024
4.0.201 107 6/19/2024
4.0.200 112 6/17/2024
4.0.199 108 6/14/2024
4.0.198 99 6/14/2024
4.0.197 88 6/12/2024
4.0.196 111 6/3/2024
4.0.195 98 5/31/2024
4.0.194 86 5/30/2024
4.0.193 105 5/29/2024
4.0.192 94 5/28/2024
4.0.191 99 5/27/2024
4.0.190 106 5/23/2024
4.0.189 106 5/22/2024
4.0.188 111 5/21/2024
4.0.187 118 5/20/2024
4.0.186 112 5/18/2024
4.0.185 112 5/16/2024
4.0.184 112 5/15/2024
4.0.183 103 5/8/2024
4.0.182 125 5/7/2024
4.0.181 130 5/6/2024
4.0.180 106 5/3/2024
4.0.179 635 5/2/2024
4.0.178 91 5/2/2024
4.0.177 110 5/1/2024
4.0.176 118 4/29/2024
4.0.175 103 4/29/2024
4.0.174 109 4/25/2024
4.0.173 125 4/24/2024
4.0.172 113 4/16/2024
4.0.171 106 4/15/2024
4.0.170 130 4/13/2024
4.0.169 105 4/12/2024
4.0.168 118 4/11/2024
4.0.167 113 4/10/2024
4.0.166 101 4/9/2024
4.0.165 123 4/9/2024
4.0.164 117 4/1/2024
4.0.163 114 3/29/2024
4.0.162 115 3/29/2024
4.0.161 116 3/27/2024
4.0.160 109 3/22/2024
4.0.159 117 3/22/2024
4.0.158 119 3/18/2024
4.0.157 120 3/15/2024
4.0.156 110 3/14/2024
4.0.155 114 3/14/2024
4.0.154 123 3/11/2024
4.0.153 127 3/8/2024
4.0.152 123 3/7/2024
4.0.151 132 3/6/2024
4.0.150 145 3/5/2024
4.0.149 142 3/4/2024
4.0.148 959 3/2/2024
4.0.147 133 2/29/2024
4.0.146 104 2/29/2024
4.0.145 119 2/27/2024
4.0.144 110 2/26/2024
4.0.143 111 2/23/2024
4.0.142 121 2/22/2024
4.0.141 118 2/22/2024
4.0.140 116 2/21/2024
4.0.139 121 2/20/2024
4.0.138 108 2/19/2024
4.0.137 115 2/19/2024
4.0.136 113 2/16/2024
4.0.135 108 2/16/2024
4.0.134 112 2/15/2024
4.0.133 130 2/14/2024
4.0.132 115 2/14/2024
4.0.131 119 2/13/2024
4.0.130 135 2/9/2024
4.0.129 125 2/9/2024
4.0.128 118 2/7/2024
4.0.127 112 2/6/2024
4.0.126 120 2/6/2024
4.0.125 113 2/5/2024
4.0.124 118 2/3/2024
4.0.123 124 2/1/2024
4.0.122 101 2/1/2024
4.0.121 101 1/31/2024
4.0.120 118 1/29/2024
4.0.119 108 1/25/2024
4.0.118 106 1/24/2024
4.0.117 115 1/23/2024
4.0.116 118 1/22/2024
4.0.115 1,022 1/17/2024
4.0.114 113 1/16/2024
4.0.113 110 1/15/2024
4.0.112 117 1/12/2024
4.0.111 122 1/11/2024
4.0.110 122 1/10/2024
4.0.109 311 1/8/2024
4.0.108 138 1/6/2024
4.0.107 277 12/26/2023
4.0.106 106 12/26/2023
4.0.105 112 12/26/2023
4.0.104 139 12/25/2023
4.0.103 122 12/23/2023
4.0.102 123 12/21/2023
4.0.101 137 12/15/2023
4.0.100 119 12/14/2023
4.0.99 126 12/13/2023
4.0.98 131 12/13/2023
4.0.97 466 12/12/2023
4.0.96 120 12/12/2023
4.0.95 112 12/12/2023
4.0.94 111 12/11/2023
4.0.93 198 12/6/2023
4.0.92 140 12/6/2023
4.0.91 141 12/6/2023
4.0.90 122 12/4/2023
4.0.89 276 11/24/2023
4.0.88 142 11/24/2023
4.0.87 135 11/21/2023
4.0.86 139 11/20/2023
4.0.85 119 11/20/2023
4.0.84 172 11/17/2023
4.0.83 418 11/17/2023
4.0.82 149 11/15/2023
4.0.81 138 11/13/2023
4.0.80 162 11/9/2023
4.0.79 179 11/9/2023
4.0.78 124 11/8/2023
4.0.77 138 11/7/2023
4.0.76 146 11/6/2023
4.0.75 149 11/3/2023
4.0.74 180 11/2/2023
4.0.73 153 11/1/2023
4.0.72 157 10/31/2023
4.0.71 133 10/31/2023
4.0.70 126 10/30/2023
4.0.69 163 10/28/2023
4.0.68 143 10/26/2023
4.0.67 153 10/25/2023
4.0.66 150 10/17/2023
4.0.65 140 10/16/2023
4.0.64 119 10/16/2023
4.0.63 166 10/13/2023
4.0.62 162 10/12/2023
4.0.61 154 10/11/2023
4.0.60 182 10/5/2023
4.0.59 155 10/4/2023
4.0.58 167 9/26/2023
4.0.57 150 9/26/2023
4.0.56 157 9/22/2023
4.0.55 162 9/20/2023
4.0.54 163 9/19/2023
4.0.53 160 9/18/2023
4.0.52 137 9/18/2023
4.0.51 198 9/15/2023
4.0.50 157 9/14/2023
4.0.49 159 9/12/2023
4.0.48 221 9/12/2023
4.0.47 144 9/11/2023
4.0.46 175 9/11/2023
4.0.45 270 9/7/2023
4.0.44 176 9/6/2023
4.0.43 209 9/5/2023
4.0.42 173 9/4/2023
4.0.41 155 9/4/2023
4.0.40 194 9/1/2023
4.0.39 196 8/31/2023
4.0.38 188 8/31/2023
4.0.37 191 8/29/2023
4.0.36 169 8/29/2023
4.0.35 198 8/29/2023
4.0.34 202 8/25/2023
4.0.33 188 8/24/2023
4.0.32 192 8/23/2023
4.0.31 198 8/22/2023
4.0.30 188 8/18/2023
4.0.29 176 8/17/2023
4.0.28 203 8/17/2023
4.0.27 156 8/17/2023
4.0.26 272 8/10/2023
4.0.25 199 8/9/2023
4.0.24 210 8/8/2023
4.0.23 181 8/8/2023
4.0.22 167 8/8/2023
4.0.21 293 8/7/2023
4.0.20 197 8/4/2023
4.0.19 249 8/3/2023
4.0.18 200 8/2/2023
4.0.17 231 7/26/2023
4.0.16 222 7/25/2023
4.0.15 231 7/21/2023
4.0.14 193 7/19/2023
4.0.13 191 7/18/2023
4.0.12 167 7/18/2023
4.0.11 222 7/18/2023
4.0.10 169 7/18/2023
4.0.9 267 7/17/2023
4.0.8 180 7/17/2023
4.0.7 168 7/17/2023
4.0.6 173 7/17/2023
4.0.5 486 1/30/2023
4.0.4 271 1/30/2023
4.0.3 371 1/30/2023
4.0.2 377 1/27/2023
4.0.1 553 12/13/2022
4.0.0 313 12/12/2022
3.0.43 1,502 6/10/2022
3.0.41 936 4/20/2022
3.0.40 974 1/11/2022
3.0.39 756 1/10/2022
3.0.38 1,024 6/17/2021
3.0.37 746 6/16/2021
3.0.36 691 6/16/2021
3.0.35 476 6/16/2021
3.0.34 455 6/16/2021
3.0.33 921 1/7/2021
3.0.32 756 12/16/2020
3.0.31 699 12/14/2020
3.0.29 2,289 9/13/2020
3.0.28 839 6/19/2020
3.0.27 844 6/8/2020
3.0.26 1,597 5/12/2020
3.0.25 1,362 5/12/2020
3.0.24 836 4/28/2020
3.0.23 842 4/24/2020
3.0.22 842 4/16/2020
3.0.21 847 4/16/2020
3.0.20 574 4/15/2020
3.0.19 557 4/15/2020
3.0.18 1,100 4/14/2020
3.0.17 552 4/14/2020
3.0.16 893 4/10/2020
3.0.15 920 4/10/2020
3.0.14 3,014 3/26/2020
3.0.13 832 3/26/2020
3.0.12 579 3/25/2020
3.0.11 561 3/25/2020
3.0.10 552 3/25/2020
3.0.9 593 3/25/2020
3.0.8 584 3/25/2020
3.0.7 1,075 3/25/2020
3.0.6 1,246 3/21/2020
3.0.5 1,585 3/13/2020
3.0.4 617 3/13/2020
3.0.3 1,310 2/28/2020
3.0.2 1,130 2/21/2020
3.0.1 629 2/11/2020
3.0.0 1,805 12/23/2019
2.0.10 1,032 4/17/2019
2.0.9 1,553 2/21/2019
2.0.8 728 2/21/2019
2.0.7 3,841 8/1/2018
2.0.6 1,201 8/1/2018
2.0.5 1,508 6/26/2018
2.0.4 1,599 6/1/2018
2.0.3 1,555 5/22/2018
2.0.2 2,110 5/11/2018
2.0.1 2,183 2/13/2018
2.0.0 2,092 1/2/2018
1.0.10 13,924 6/16/2017
1.0.8 1,047 6/16/2017
1.0.7 1,009 5/30/2017
1.0.6 984 5/30/2017
1.0.5 999 5/25/2017
1.0.4 1,018 5/24/2017
1.0.0 1,038 5/24/2017