Holmes 5.0.34

dotnet add package Holmes --version 5.0.34
                    
NuGet\Install-Package Holmes -Version 5.0.34
                    
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.34" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Holmes" Version="5.0.34" />
                    
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.34
                    
#r "nuget: Holmes, 5.0.34"
                    
#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=5.0.34
                    
Install Holmes as a Cake Addin
#tool nuget:?package=Holmes&version=5.0.34
                    
Install Holmes 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. 
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.34 169 14 days ago
5.0.33 147 a month ago
5.0.32 106 2 months ago
5.0.31 129 2 months ago
5.0.30 188 3 months ago
5.0.29 145 3 months ago
5.0.28 104 3 months ago
5.0.27 105 3 months ago
5.0.26 121 3 months ago
5.0.25 117 3 months ago
5.0.24 111 3 months ago
5.0.23 114 3 months ago
5.0.22 116 3 months ago
5.0.21 106 3 months ago
5.0.20 54 3 months ago
5.0.19 72 3 months ago
5.0.18 93 3 months ago
5.0.17 74 3 months ago
5.0.16 55 4 months ago
5.0.15 180 4 months ago
5.0.14 124 4 months ago
5.0.13 132 4 months ago
5.0.12 117 4 months ago
5.0.11 123 5 months ago
5.0.10 170 5 months ago
5.0.9 104 5 months ago
5.0.8 139 5 months ago
5.0.7 133 5 months ago
5.0.6 104 5 months ago
5.0.5 98 5 months ago
5.0.4 102 5 months ago
4.0.270 122 5 months ago
4.0.269 108 5 months ago
4.0.268 95 6 months ago
4.0.267 99 6 months ago
4.0.266 96 6 months ago
4.0.265 106 6 months ago
4.0.264 99 6 months ago
4.0.263 103 6 months ago
4.0.262 107 6 months ago
4.0.261 101 6 months ago
4.0.260 107 6 months ago
4.0.259 109 6 months ago
4.0.258 112 6 months ago
4.0.257 122 6 months ago
4.0.256 110 6 months ago
4.0.255 111 6 months ago
4.0.254 108 6 months ago
4.0.253 104 6 months ago
4.0.252 112 7 months ago
4.0.251 151 7 months ago
4.0.250 123 7 months ago
4.0.249 126 7 months ago
4.0.248 115 7 months ago
4.0.247 106 7 months ago
4.0.246 108 7 months ago
4.0.245 105 7 months ago
4.0.244 150 7 months ago
4.0.243 130 7 months ago
4.0.242 129 7 months ago
4.0.241 115 7 months ago
4.0.240 117 8 months ago
4.0.239 113 8 months ago
4.0.238 123 8 months ago
4.0.237 130 8 months ago
4.0.236 118 8 months ago
4.0.235 121 8 months ago
4.0.234 119 8 months ago
4.0.233 131 8 months ago
4.0.232 119 8 months ago
4.0.231 147 8 months ago
4.0.230 142 8 months ago
4.0.229 143 8 months ago
4.0.228 141 8 months ago
4.0.227 135 8 months ago
4.0.226 131 8 months ago
4.0.225 140 8 months ago
4.0.224 136 8 months ago
4.0.223 142 8 months ago
4.0.222 127 9 months ago
4.0.221 89 9 months ago
4.0.220 91 9 months ago
4.0.219 101 9 months ago
4.0.218 121 9 months ago
4.0.217 107 9 months ago
4.0.216 92 9 months ago
4.0.215 122 9 months ago
4.0.214 130 9 months ago
4.0.213 141 9 months ago
4.0.212 111 9 months ago
4.0.211 126 10 months ago
4.0.210 120 10 months ago
4.0.209 119 10 months ago
4.0.208 145 10 months ago
4.0.207 121 10 months ago
4.0.206 130 10 months ago
4.0.205 128 10 months ago
4.0.204 125 10 months ago
4.0.203 122 10 months ago
4.0.202 995 6/19/2024
4.0.201 131 6/19/2024
4.0.200 131 6/17/2024
4.0.199 129 6/14/2024
4.0.198 120 6/14/2024
4.0.197 108 6/12/2024
4.0.196 128 6/3/2024
4.0.195 120 5/31/2024
4.0.194 105 5/30/2024
4.0.193 123 5/29/2024
4.0.192 111 5/28/2024
4.0.191 118 5/27/2024
4.0.190 128 5/23/2024
4.0.189 125 5/22/2024
4.0.188 133 5/21/2024
4.0.187 142 5/20/2024
4.0.186 131 5/18/2024
4.0.185 131 5/16/2024
4.0.184 132 5/15/2024
4.0.183 127 5/8/2024
4.0.182 147 5/7/2024
4.0.181 149 5/6/2024
4.0.180 126 5/3/2024
4.0.179 658 5/2/2024
4.0.178 109 5/2/2024
4.0.177 132 5/1/2024
4.0.176 139 4/29/2024
4.0.175 122 4/29/2024
4.0.174 129 4/25/2024
4.0.173 143 4/24/2024
4.0.172 133 4/16/2024
4.0.171 129 4/15/2024
4.0.170 149 4/13/2024
4.0.169 125 4/12/2024
4.0.168 139 4/11/2024
4.0.167 136 4/10/2024
4.0.166 126 4/9/2024
4.0.165 144 4/9/2024
4.0.164 133 4/1/2024
4.0.163 129 3/29/2024
4.0.162 134 3/29/2024
4.0.161 135 3/27/2024
4.0.160 129 3/22/2024
4.0.159 138 3/22/2024
4.0.158 141 3/18/2024
4.0.157 142 3/15/2024
4.0.156 129 3/14/2024
4.0.155 136 3/14/2024
4.0.154 140 3/11/2024
4.0.153 144 3/8/2024
4.0.152 139 3/7/2024
4.0.151 147 3/6/2024
4.0.150 161 3/5/2024
4.0.149 157 3/4/2024
4.0.148 980 3/2/2024
4.0.147 151 2/29/2024
4.0.146 125 2/29/2024
4.0.145 138 2/27/2024
4.0.144 128 2/26/2024
4.0.143 130 2/23/2024
4.0.142 141 2/22/2024
4.0.141 143 2/22/2024
4.0.140 138 2/21/2024
4.0.139 143 2/20/2024
4.0.138 133 2/19/2024
4.0.137 139 2/19/2024
4.0.136 137 2/16/2024
4.0.135 135 2/16/2024
4.0.134 135 2/15/2024
4.0.133 157 2/14/2024
4.0.132 138 2/14/2024
4.0.131 137 2/13/2024
4.0.130 157 2/9/2024
4.0.129 146 2/9/2024
4.0.128 143 2/7/2024
4.0.127 128 2/6/2024
4.0.126 137 2/6/2024
4.0.125 133 2/5/2024
4.0.124 136 2/3/2024
4.0.123 142 2/1/2024
4.0.122 121 2/1/2024
4.0.121 129 1/31/2024
4.0.120 137 1/29/2024
4.0.119 126 1/25/2024
4.0.118 127 1/24/2024
4.0.117 134 1/23/2024
4.0.116 135 1/22/2024
4.0.115 1,041 1/17/2024
4.0.114 131 1/16/2024
4.0.113 131 1/15/2024
4.0.112 134 1/12/2024
4.0.111 140 1/11/2024
4.0.110 140 1/10/2024
4.0.109 329 1/8/2024
4.0.108 156 1/6/2024
4.0.107 293 12/26/2023
4.0.106 126 12/26/2023
4.0.105 130 12/26/2023
4.0.104 163 12/25/2023
4.0.103 140 12/23/2023
4.0.102 142 12/21/2023
4.0.101 153 12/15/2023
4.0.100 136 12/14/2023
4.0.99 143 12/13/2023
4.0.98 148 12/13/2023
4.0.97 483 12/12/2023
4.0.96 138 12/12/2023
4.0.95 129 12/12/2023
4.0.94 131 12/11/2023
4.0.93 213 12/6/2023
4.0.92 155 12/6/2023
4.0.91 155 12/6/2023
4.0.90 136 12/4/2023
4.0.89 291 11/24/2023
4.0.88 155 11/24/2023
4.0.87 150 11/21/2023
4.0.86 152 11/20/2023
4.0.85 133 11/20/2023
4.0.84 187 11/17/2023
4.0.83 630 11/17/2023
4.0.82 165 11/15/2023
4.0.81 151 11/13/2023
4.0.80 177 11/9/2023
4.0.79 192 11/9/2023
4.0.78 139 11/8/2023
4.0.77 151 11/7/2023
4.0.76 160 11/6/2023
4.0.75 162 11/3/2023
4.0.74 194 11/2/2023
4.0.73 167 11/1/2023
4.0.72 170 10/31/2023
4.0.71 146 10/31/2023
4.0.70 141 10/30/2023
4.0.69 176 10/28/2023
4.0.68 161 10/26/2023
4.0.67 168 10/25/2023
4.0.66 164 10/17/2023
4.0.65 153 10/16/2023
4.0.64 133 10/16/2023
4.0.63 181 10/13/2023
4.0.62 180 10/12/2023
4.0.61 168 10/11/2023
4.0.60 198 10/5/2023
4.0.59 169 10/4/2023
4.0.58 182 9/26/2023
4.0.57 165 9/26/2023
4.0.56 171 9/22/2023
4.0.55 176 9/20/2023
4.0.54 179 9/19/2023
4.0.53 174 9/18/2023
4.0.52 151 9/18/2023
4.0.51 212 9/15/2023
4.0.50 172 9/14/2023
4.0.49 173 9/12/2023
4.0.48 238 9/12/2023
4.0.47 159 9/11/2023
4.0.46 190 9/11/2023
4.0.45 297 9/7/2023
4.0.44 191 9/6/2023
4.0.43 224 9/5/2023
4.0.42 188 9/4/2023
4.0.41 169 9/4/2023
4.0.40 209 9/1/2023
4.0.39 210 8/31/2023
4.0.38 203 8/31/2023
4.0.37 205 8/29/2023
4.0.36 185 8/29/2023
4.0.35 213 8/29/2023
4.0.34 216 8/25/2023
4.0.33 203 8/24/2023
4.0.32 206 8/23/2023
4.0.31 213 8/22/2023
4.0.30 202 8/18/2023
4.0.29 191 8/17/2023
4.0.28 218 8/17/2023
4.0.27 170 8/17/2023
4.0.26 287 8/10/2023
4.0.25 215 8/9/2023
4.0.24 224 8/8/2023
4.0.23 197 8/8/2023
4.0.22 183 8/8/2023
4.0.21 308 8/7/2023
4.0.20 213 8/4/2023
4.0.19 266 8/3/2023
4.0.18 215 8/2/2023
4.0.17 246 7/26/2023
4.0.16 239 7/25/2023
4.0.15 246 7/21/2023
4.0.14 205 7/19/2023
4.0.13 207 7/18/2023
4.0.12 183 7/18/2023
4.0.11 236 7/18/2023
4.0.10 183 7/18/2023
4.0.9 285 7/17/2023
4.0.8 201 7/17/2023
4.0.7 184 7/17/2023
4.0.6 189 7/17/2023
4.0.5 507 1/30/2023
4.0.4 292 1/30/2023
4.0.3 392 1/30/2023
4.0.2 396 1/27/2023
4.0.1 576 12/13/2022
4.0.0 335 12/12/2022
3.0.43 1,530 6/10/2022
3.0.41 965 4/20/2022
3.0.40 1,003 1/11/2022
3.0.39 786 1/10/2022
3.0.38 1,057 6/17/2021
3.0.37 775 6/16/2021
3.0.36 721 6/16/2021
3.0.35 506 6/16/2021
3.0.34 484 6/16/2021
3.0.33 959 1/7/2021
3.0.32 789 12/16/2020
3.0.31 733 12/14/2020
3.0.29 2,323 9/13/2020
3.0.28 875 6/19/2020
3.0.27 881 6/8/2020
3.0.26 1,634 5/12/2020
3.0.25 1,399 5/12/2020
3.0.24 874 4/28/2020
3.0.23 879 4/24/2020
3.0.22 879 4/16/2020
3.0.21 885 4/16/2020
3.0.20 610 4/15/2020
3.0.19 593 4/15/2020
3.0.18 1,139 4/14/2020
3.0.17 588 4/14/2020
3.0.16 929 4/10/2020
3.0.15 956 4/10/2020
3.0.14 3,050 3/26/2020
3.0.13 870 3/26/2020
3.0.12 617 3/25/2020
3.0.11 597 3/25/2020
3.0.10 589 3/25/2020
3.0.9 630 3/25/2020
3.0.8 621 3/25/2020
3.0.7 1,113 3/25/2020
3.0.6 1,284 3/21/2020
3.0.5 1,622 3/13/2020
3.0.4 654 3/13/2020
3.0.3 1,347 2/28/2020
3.0.2 1,167 2/21/2020
3.0.1 673 2/11/2020
3.0.0 1,843 12/23/2019
2.0.10 1,075 4/17/2019
2.0.9 1,594 2/21/2019
2.0.8 772 2/21/2019
2.0.7 3,933 8/1/2018
2.0.6 1,293 8/1/2018
2.0.5 1,604 6/26/2018
2.0.4 1,734 6/1/2018
2.0.3 1,694 5/22/2018
2.0.2 2,255 5/11/2018
2.0.1 2,328 2/13/2018
2.0.0 2,241 1/2/2018
1.0.10 14,027 6/16/2017
1.0.8 1,150 6/16/2017
1.0.7 1,115 5/30/2017
1.0.6 1,089 5/30/2017
1.0.5 1,100 5/25/2017
1.0.4 1,122 5/24/2017
1.0.0 1,150 5/24/2017