Holmes 4.0.257

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

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

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.264 0 11/1/2024
4.0.263 30 10/30/2024
4.0.262 61 10/29/2024
4.0.261 63 10/29/2024
4.0.260 70 10/26/2024
4.0.259 69 10/24/2024
4.0.258 77 10/21/2024
4.0.257 95 10/17/2024
4.0.256 81 10/15/2024
4.0.255 81 10/11/2024
4.0.254 80 10/10/2024
4.0.253 74 10/9/2024
4.0.252 83 10/9/2024
4.0.251 100 10/3/2024
4.0.250 95 10/2/2024
4.0.249 95 9/30/2024
4.0.248 88 9/28/2024
4.0.247 76 9/24/2024
4.0.246 83 9/23/2024
4.0.245 79 9/23/2024
4.0.244 121 9/17/2024
4.0.243 101 9/16/2024
4.0.242 105 9/10/2024
4.0.241 91 9/9/2024
4.0.240 94 9/6/2024
4.0.239 89 9/6/2024
4.0.238 99 9/3/2024
4.0.237 102 9/2/2024
4.0.236 95 8/30/2024
4.0.235 100 8/30/2024
4.0.234 96 8/28/2024
4.0.233 108 8/27/2024
4.0.232 97 8/26/2024
4.0.231 125 8/24/2024
4.0.230 122 8/23/2024
4.0.229 122 8/21/2024
4.0.228 121 8/21/2024
4.0.227 115 8/20/2024
4.0.226 109 8/19/2024
4.0.225 118 8/16/2024
4.0.224 112 8/16/2024
4.0.223 119 8/14/2024
4.0.222 98 8/5/2024
4.0.221 68 8/2/2024
4.0.220 69 8/1/2024
4.0.219 75 7/31/2024
4.0.218 98 7/26/2024
4.0.217 84 7/25/2024
4.0.216 72 7/25/2024
4.0.215 101 7/11/2024
4.0.214 108 7/10/2024
4.0.213 120 7/9/2024
4.0.212 89 7/9/2024
4.0.211 105 7/9/2024
4.0.210 96 7/5/2024
4.0.209 98 7/4/2024
4.0.208 123 7/3/2024
4.0.207 98 7/2/2024
4.0.206 105 6/27/2024
4.0.205 107 6/26/2024
4.0.204 102 6/25/2024
4.0.203 101 6/24/2024
4.0.202 898 6/19/2024
4.0.201 106 6/19/2024
4.0.200 111 6/17/2024
4.0.199 107 6/14/2024
4.0.198 98 6/14/2024
4.0.197 87 6/12/2024
4.0.196 110 6/3/2024
4.0.195 97 5/31/2024
4.0.194 85 5/30/2024
4.0.193 104 5/29/2024
4.0.192 93 5/28/2024
4.0.191 98 5/27/2024
4.0.190 105 5/23/2024
4.0.189 104 5/22/2024
4.0.188 110 5/21/2024
4.0.187 117 5/20/2024
4.0.186 111 5/18/2024
4.0.185 111 5/16/2024
4.0.184 111 5/15/2024
4.0.183 102 5/8/2024
4.0.182 124 5/7/2024
4.0.181 123 5/6/2024
4.0.180 105 5/3/2024
4.0.179 634 5/2/2024
4.0.178 83 5/2/2024
4.0.177 109 5/1/2024
4.0.176 116 4/29/2024
4.0.175 101 4/29/2024
4.0.174 107 4/25/2024
4.0.173 124 4/24/2024
4.0.172 112 4/16/2024
4.0.171 105 4/15/2024
4.0.170 128 4/13/2024
4.0.169 104 4/12/2024
4.0.168 117 4/11/2024
4.0.167 112 4/10/2024
4.0.166 99 4/9/2024
4.0.165 122 4/9/2024
4.0.164 113 4/1/2024
4.0.163 111 3/29/2024
4.0.162 113 3/29/2024
4.0.161 115 3/27/2024
4.0.160 108 3/22/2024
4.0.159 115 3/22/2024
4.0.158 118 3/18/2024
4.0.157 118 3/15/2024
4.0.156 109 3/14/2024
4.0.155 112 3/14/2024
4.0.154 122 3/11/2024
4.0.153 125 3/8/2024
4.0.152 121 3/7/2024
4.0.151 131 3/6/2024
4.0.150 143 3/5/2024
4.0.149 141 3/4/2024
4.0.148 957 3/2/2024
4.0.147 132 2/29/2024
4.0.146 102 2/29/2024
4.0.145 117 2/27/2024
4.0.144 109 2/26/2024
4.0.143 109 2/23/2024
4.0.142 120 2/22/2024
4.0.141 117 2/22/2024
4.0.140 115 2/21/2024
4.0.139 120 2/20/2024
4.0.138 107 2/19/2024
4.0.137 114 2/19/2024
4.0.136 111 2/16/2024
4.0.135 106 2/16/2024
4.0.134 111 2/15/2024
4.0.133 128 2/14/2024
4.0.132 114 2/14/2024
4.0.131 117 2/13/2024
4.0.130 133 2/9/2024
4.0.129 124 2/9/2024
4.0.128 116 2/7/2024
4.0.127 107 2/6/2024
4.0.126 115 2/6/2024
4.0.125 111 2/5/2024
4.0.124 117 2/3/2024
4.0.123 122 2/1/2024
4.0.122 100 2/1/2024
4.0.121 99 1/31/2024
4.0.120 117 1/29/2024
4.0.119 107 1/25/2024
4.0.118 104 1/24/2024
4.0.117 114 1/23/2024
4.0.116 116 1/22/2024
4.0.115 1,021 1/17/2024
4.0.114 112 1/16/2024
4.0.113 108 1/15/2024
4.0.112 116 1/12/2024
4.0.111 120 1/11/2024
4.0.110 121 1/10/2024
4.0.109 309 1/8/2024
4.0.108 136 1/6/2024
4.0.107 275 12/26/2023
4.0.106 104 12/26/2023
4.0.105 111 12/26/2023
4.0.104 138 12/25/2023
4.0.103 120 12/23/2023
4.0.102 122 12/21/2023
4.0.101 136 12/15/2023
4.0.100 117 12/14/2023
4.0.99 124 12/13/2023
4.0.98 130 12/13/2023
4.0.97 465 12/12/2023
4.0.96 119 12/12/2023
4.0.95 110 12/12/2023
4.0.94 109 12/11/2023
4.0.93 196 12/6/2023
4.0.92 138 12/6/2023
4.0.91 139 12/6/2023
4.0.90 120 12/4/2023
4.0.89 275 11/24/2023
4.0.88 141 11/24/2023
4.0.87 133 11/21/2023
4.0.86 138 11/20/2023
4.0.85 118 11/20/2023
4.0.84 170 11/17/2023
4.0.83 412 11/17/2023
4.0.82 148 11/15/2023
4.0.81 136 11/13/2023
4.0.80 161 11/9/2023
4.0.79 178 11/9/2023
4.0.78 123 11/8/2023
4.0.77 136 11/7/2023
4.0.76 144 11/6/2023
4.0.75 148 11/3/2023
4.0.74 178 11/2/2023
4.0.73 151 11/1/2023
4.0.72 156 10/31/2023
4.0.71 132 10/31/2023
4.0.70 125 10/30/2023
4.0.69 161 10/28/2023
4.0.68 136 10/26/2023
4.0.67 152 10/25/2023
4.0.66 148 10/17/2023
4.0.65 138 10/16/2023
4.0.64 117 10/16/2023
4.0.63 164 10/13/2023
4.0.62 160 10/12/2023
4.0.61 152 10/11/2023
4.0.60 180 10/5/2023
4.0.59 153 10/4/2023
4.0.58 165 9/26/2023
4.0.57 148 9/26/2023
4.0.56 155 9/22/2023
4.0.55 160 9/20/2023
4.0.54 161 9/19/2023
4.0.53 158 9/18/2023
4.0.52 135 9/18/2023
4.0.51 196 9/15/2023
4.0.50 155 9/14/2023
4.0.49 157 9/12/2023
4.0.48 219 9/12/2023
4.0.47 142 9/11/2023
4.0.46 173 9/11/2023
4.0.45 268 9/7/2023
4.0.44 174 9/6/2023
4.0.43 207 9/5/2023
4.0.42 171 9/4/2023
4.0.41 153 9/4/2023
4.0.40 191 9/1/2023
4.0.39 194 8/31/2023
4.0.38 186 8/31/2023
4.0.37 189 8/29/2023
4.0.36 167 8/29/2023
4.0.35 196 8/29/2023
4.0.34 200 8/25/2023
4.0.33 186 8/24/2023
4.0.32 190 8/23/2023
4.0.31 196 8/22/2023
4.0.30 186 8/18/2023
4.0.29 174 8/17/2023
4.0.28 201 8/17/2023
4.0.27 154 8/17/2023
4.0.26 270 8/10/2023
4.0.25 197 8/9/2023
4.0.24 208 8/8/2023
4.0.23 178 8/8/2023
4.0.22 164 8/8/2023
4.0.21 291 8/7/2023
4.0.20 195 8/4/2023
4.0.19 247 8/3/2023
4.0.18 198 8/2/2023
4.0.17 229 7/26/2023
4.0.16 220 7/25/2023
4.0.15 229 7/21/2023
4.0.14 191 7/19/2023
4.0.13 189 7/18/2023
4.0.12 165 7/18/2023
4.0.11 220 7/18/2023
4.0.10 167 7/18/2023
4.0.9 265 7/17/2023
4.0.8 178 7/17/2023
4.0.7 166 7/17/2023
4.0.6 171 7/17/2023
4.0.5 484 1/30/2023
4.0.4 270 1/30/2023
4.0.3 369 1/30/2023
4.0.2 375 1/27/2023
4.0.1 551 12/13/2022
4.0.0 311 12/12/2022
3.0.43 1,500 6/10/2022
3.0.41 934 4/20/2022
3.0.40 972 1/11/2022
3.0.39 754 1/10/2022
3.0.38 1,022 6/17/2021
3.0.37 744 6/16/2021
3.0.36 689 6/16/2021
3.0.35 474 6/16/2021
3.0.34 453 6/16/2021
3.0.33 919 1/7/2021
3.0.32 754 12/16/2020
3.0.31 697 12/14/2020
3.0.29 2,287 9/13/2020
3.0.28 837 6/19/2020
3.0.27 842 6/8/2020
3.0.26 1,593 5/12/2020
3.0.25 1,360 5/12/2020
3.0.24 834 4/28/2020
3.0.23 840 4/24/2020
3.0.22 840 4/16/2020
3.0.21 839 4/16/2020
3.0.20 572 4/15/2020
3.0.19 555 4/15/2020
3.0.18 1,098 4/14/2020
3.0.17 550 4/14/2020
3.0.16 891 4/10/2020
3.0.15 918 4/10/2020
3.0.14 3,012 3/26/2020
3.0.13 830 3/26/2020
3.0.12 577 3/25/2020
3.0.11 557 3/25/2020
3.0.10 550 3/25/2020
3.0.9 591 3/25/2020
3.0.8 582 3/25/2020
3.0.7 1,073 3/25/2020
3.0.6 1,244 3/21/2020
3.0.5 1,583 3/13/2020
3.0.4 615 3/13/2020
3.0.3 1,308 2/28/2020
3.0.2 1,128 2/21/2020
3.0.1 627 2/11/2020
3.0.0 1,803 12/23/2019
2.0.10 1,030 4/17/2019
2.0.9 1,551 2/21/2019
2.0.8 726 2/21/2019
2.0.7 3,838 8/1/2018
2.0.6 1,192 8/1/2018
2.0.5 1,505 6/26/2018
2.0.4 1,595 6/1/2018
2.0.3 1,551 5/22/2018
2.0.2 2,106 5/11/2018
2.0.1 2,179 2/13/2018
2.0.0 2,088 1/2/2018
1.0.10 13,921 6/16/2017
1.0.8 1,044 6/16/2017
1.0.7 1,006 5/30/2017
1.0.6 981 5/30/2017
1.0.5 994 5/25/2017
1.0.4 1,015 5/24/2017
1.0.0 1,031 5/24/2017