Holmes 5.0.15
dotnet add package Holmes --version 5.0.15
NuGet\Install-Package Holmes -Version 5.0.15
<PackageReference Include="Holmes" Version="5.0.15" />
paket add Holmes --version 5.0.15
#r "nuget: Holmes, 5.0.15"
// Install Holmes as a Cake Addin #addin nuget:?package=Holmes&version=5.0.15 // Install Holmes as a Cake Tool #tool nuget:?package=Holmes&version=5.0.15
Holmes
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:
- 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 | Versions 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. |
-
net8.0
- SQLHelper.DB (>= 5.0.13)
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.15 | 115 | 12/17/2024 |
5.0.14 | 87 | 12/16/2024 |
5.0.13 | 100 | 12/10/2024 |
5.0.12 | 88 | 12/9/2024 |
5.0.11 | 93 | 12/6/2024 |
5.0.10 | 148 | 11/27/2024 |
5.0.9 | 84 | 11/26/2024 |
5.0.8 | 119 | 11/26/2024 |
5.0.7 | 109 | 11/24/2024 |
5.0.6 | 85 | 11/24/2024 |
5.0.5 | 77 | 11/23/2024 |
5.0.4 | 81 | 11/23/2024 |
4.0.270 | 102 | 11/19/2024 |
4.0.269 | 89 | 11/11/2024 |
4.0.268 | 77 | 11/7/2024 |
4.0.267 | 81 | 11/5/2024 |
4.0.266 | 79 | 11/4/2024 |
4.0.265 | 89 | 11/1/2024 |
4.0.264 | 80 | 11/1/2024 |
4.0.263 | 84 | 10/30/2024 |
4.0.262 | 93 | 10/29/2024 |
4.0.261 | 85 | 10/29/2024 |
4.0.260 | 88 | 10/26/2024 |
4.0.259 | 93 | 10/24/2024 |
4.0.258 | 94 | 10/21/2024 |
4.0.257 | 110 | 10/17/2024 |
4.0.256 | 96 | 10/15/2024 |
4.0.255 | 99 | 10/11/2024 |
4.0.254 | 97 | 10/10/2024 |
4.0.253 | 91 | 10/9/2024 |
4.0.252 | 102 | 10/9/2024 |
4.0.251 | 122 | 10/3/2024 |
4.0.250 | 112 | 10/2/2024 |
4.0.249 | 111 | 9/30/2024 |
4.0.248 | 105 | 9/28/2024 |
4.0.247 | 92 | 9/24/2024 |
4.0.246 | 97 | 9/23/2024 |
4.0.245 | 95 | 9/23/2024 |
4.0.244 | 138 | 9/17/2024 |
4.0.243 | 119 | 9/16/2024 |
4.0.242 | 119 | 9/10/2024 |
4.0.241 | 107 | 9/9/2024 |
4.0.240 | 107 | 9/6/2024 |
4.0.239 | 104 | 9/6/2024 |
4.0.238 | 112 | 9/3/2024 |
4.0.237 | 115 | 9/2/2024 |
4.0.236 | 108 | 8/30/2024 |
4.0.235 | 111 | 8/30/2024 |
4.0.234 | 110 | 8/28/2024 |
4.0.233 | 122 | 8/27/2024 |
4.0.232 | 108 | 8/26/2024 |
4.0.231 | 137 | 8/24/2024 |
4.0.230 | 135 | 8/23/2024 |
4.0.229 | 133 | 8/21/2024 |
4.0.228 | 132 | 8/21/2024 |
4.0.227 | 126 | 8/20/2024 |
4.0.226 | 123 | 8/19/2024 |
4.0.225 | 130 | 8/16/2024 |
4.0.224 | 126 | 8/16/2024 |
4.0.223 | 131 | 8/14/2024 |
4.0.222 | 112 | 8/5/2024 |
4.0.221 | 82 | 8/2/2024 |
4.0.220 | 81 | 8/1/2024 |
4.0.219 | 89 | 7/31/2024 |
4.0.218 | 110 | 7/26/2024 |
4.0.217 | 97 | 7/25/2024 |
4.0.216 | 83 | 7/25/2024 |
4.0.215 | 114 | 7/11/2024 |
4.0.214 | 121 | 7/10/2024 |
4.0.213 | 133 | 7/9/2024 |
4.0.212 | 102 | 7/9/2024 |
4.0.211 | 118 | 7/9/2024 |
4.0.210 | 111 | 7/5/2024 |
4.0.209 | 109 | 7/4/2024 |
4.0.208 | 136 | 7/3/2024 |
4.0.207 | 109 | 7/2/2024 |
4.0.206 | 122 | 6/27/2024 |
4.0.205 | 118 | 6/26/2024 |
4.0.204 | 115 | 6/25/2024 |
4.0.203 | 112 | 6/24/2024 |
4.0.202 | 968 | 6/19/2024 |
4.0.201 | 123 | 6/19/2024 |
4.0.200 | 124 | 6/17/2024 |
4.0.199 | 122 | 6/14/2024 |
4.0.198 | 109 | 6/14/2024 |
4.0.197 | 98 | 6/12/2024 |
4.0.196 | 121 | 6/3/2024 |
4.0.195 | 113 | 5/31/2024 |
4.0.194 | 96 | 5/30/2024 |
4.0.193 | 116 | 5/29/2024 |
4.0.192 | 104 | 5/28/2024 |
4.0.191 | 111 | 5/27/2024 |
4.0.190 | 118 | 5/23/2024 |
4.0.189 | 116 | 5/22/2024 |
4.0.188 | 126 | 5/21/2024 |
4.0.187 | 133 | 5/20/2024 |
4.0.186 | 124 | 5/18/2024 |
4.0.185 | 124 | 5/16/2024 |
4.0.184 | 124 | 5/15/2024 |
4.0.183 | 116 | 5/8/2024 |
4.0.182 | 138 | 5/7/2024 |
4.0.181 | 140 | 5/6/2024 |
4.0.180 | 116 | 5/3/2024 |
4.0.179 | 643 | 5/2/2024 |
4.0.178 | 99 | 5/2/2024 |
4.0.177 | 118 | 5/1/2024 |
4.0.176 | 130 | 4/29/2024 |
4.0.175 | 113 | 4/29/2024 |
4.0.174 | 119 | 4/25/2024 |
4.0.173 | 133 | 4/24/2024 |
4.0.172 | 125 | 4/16/2024 |
4.0.171 | 118 | 4/15/2024 |
4.0.170 | 138 | 4/13/2024 |
4.0.169 | 113 | 4/12/2024 |
4.0.168 | 130 | 4/11/2024 |
4.0.167 | 125 | 4/10/2024 |
4.0.166 | 116 | 4/9/2024 |
4.0.165 | 133 | 4/9/2024 |
4.0.164 | 125 | 4/1/2024 |
4.0.163 | 122 | 3/29/2024 |
4.0.162 | 123 | 3/29/2024 |
4.0.161 | 126 | 3/27/2024 |
4.0.160 | 119 | 3/22/2024 |
4.0.159 | 129 | 3/22/2024 |
4.0.158 | 133 | 3/18/2024 |
4.0.157 | 134 | 3/15/2024 |
4.0.156 | 120 | 3/14/2024 |
4.0.155 | 128 | 3/14/2024 |
4.0.154 | 131 | 3/11/2024 |
4.0.153 | 135 | 3/8/2024 |
4.0.152 | 131 | 3/7/2024 |
4.0.151 | 140 | 3/6/2024 |
4.0.150 | 153 | 3/5/2024 |
4.0.149 | 150 | 3/4/2024 |
4.0.148 | 967 | 3/2/2024 |
4.0.147 | 141 | 2/29/2024 |
4.0.146 | 114 | 2/29/2024 |
4.0.145 | 127 | 2/27/2024 |
4.0.144 | 118 | 2/26/2024 |
4.0.143 | 119 | 2/23/2024 |
4.0.142 | 129 | 2/22/2024 |
4.0.141 | 131 | 2/22/2024 |
4.0.140 | 124 | 2/21/2024 |
4.0.139 | 129 | 2/20/2024 |
4.0.138 | 118 | 2/19/2024 |
4.0.137 | 125 | 2/19/2024 |
4.0.136 | 123 | 2/16/2024 |
4.0.135 | 120 | 2/16/2024 |
4.0.134 | 124 | 2/15/2024 |
4.0.133 | 145 | 2/14/2024 |
4.0.132 | 129 | 2/14/2024 |
4.0.131 | 127 | 2/13/2024 |
4.0.130 | 147 | 2/9/2024 |
4.0.129 | 137 | 2/9/2024 |
4.0.128 | 132 | 2/7/2024 |
4.0.127 | 120 | 2/6/2024 |
4.0.126 | 128 | 2/6/2024 |
4.0.125 | 123 | 2/5/2024 |
4.0.124 | 128 | 2/3/2024 |
4.0.123 | 132 | 2/1/2024 |
4.0.122 | 111 | 2/1/2024 |
4.0.121 | 113 | 1/31/2024 |
4.0.120 | 128 | 1/29/2024 |
4.0.119 | 116 | 1/25/2024 |
4.0.118 | 116 | 1/24/2024 |
4.0.117 | 125 | 1/23/2024 |
4.0.116 | 126 | 1/22/2024 |
4.0.115 | 1,030 | 1/17/2024 |
4.0.114 | 121 | 1/16/2024 |
4.0.113 | 120 | 1/15/2024 |
4.0.112 | 125 | 1/12/2024 |
4.0.111 | 130 | 1/11/2024 |
4.0.110 | 130 | 1/10/2024 |
4.0.109 | 319 | 1/8/2024 |
4.0.108 | 145 | 1/6/2024 |
4.0.107 | 284 | 12/26/2023 |
4.0.106 | 116 | 12/26/2023 |
4.0.105 | 120 | 12/26/2023 |
4.0.104 | 147 | 12/25/2023 |
4.0.103 | 130 | 12/23/2023 |
4.0.102 | 131 | 12/21/2023 |
4.0.101 | 144 | 12/15/2023 |
4.0.100 | 126 | 12/14/2023 |
4.0.99 | 133 | 12/13/2023 |
4.0.98 | 139 | 12/13/2023 |
4.0.97 | 473 | 12/12/2023 |
4.0.96 | 129 | 12/12/2023 |
4.0.95 | 119 | 12/12/2023 |
4.0.94 | 119 | 12/11/2023 |
4.0.93 | 206 | 12/6/2023 |
4.0.92 | 150 | 12/6/2023 |
4.0.91 | 150 | 12/6/2023 |
4.0.90 | 129 | 12/4/2023 |
4.0.89 | 285 | 11/24/2023 |
4.0.88 | 151 | 11/24/2023 |
4.0.87 | 143 | 11/21/2023 |
4.0.86 | 146 | 11/20/2023 |
4.0.85 | 129 | 11/20/2023 |
4.0.84 | 181 | 11/17/2023 |
4.0.83 | 485 | 11/17/2023 |
4.0.82 | 159 | 11/15/2023 |
4.0.81 | 145 | 11/13/2023 |
4.0.80 | 171 | 11/9/2023 |
4.0.79 | 186 | 11/9/2023 |
4.0.78 | 135 | 11/8/2023 |
4.0.77 | 145 | 11/7/2023 |
4.0.76 | 153 | 11/6/2023 |
4.0.75 | 158 | 11/3/2023 |
4.0.74 | 189 | 11/2/2023 |
4.0.73 | 162 | 11/1/2023 |
4.0.72 | 166 | 10/31/2023 |
4.0.71 | 140 | 10/31/2023 |
4.0.70 | 135 | 10/30/2023 |
4.0.69 | 170 | 10/28/2023 |
4.0.68 | 154 | 10/26/2023 |
4.0.67 | 160 | 10/25/2023 |
4.0.66 | 157 | 10/17/2023 |
4.0.65 | 147 | 10/16/2023 |
4.0.64 | 126 | 10/16/2023 |
4.0.63 | 173 | 10/13/2023 |
4.0.62 | 175 | 10/12/2023 |
4.0.61 | 161 | 10/11/2023 |
4.0.60 | 192 | 10/5/2023 |
4.0.59 | 164 | 10/4/2023 |
4.0.58 | 176 | 9/26/2023 |
4.0.57 | 158 | 9/26/2023 |
4.0.56 | 164 | 9/22/2023 |
4.0.55 | 169 | 9/20/2023 |
4.0.54 | 172 | 9/19/2023 |
4.0.53 | 169 | 9/18/2023 |
4.0.52 | 146 | 9/18/2023 |
4.0.51 | 207 | 9/15/2023 |
4.0.50 | 164 | 9/14/2023 |
4.0.49 | 166 | 9/12/2023 |
4.0.48 | 231 | 9/12/2023 |
4.0.47 | 151 | 9/11/2023 |
4.0.46 | 182 | 9/11/2023 |
4.0.45 | 277 | 9/7/2023 |
4.0.44 | 186 | 9/6/2023 |
4.0.43 | 219 | 9/5/2023 |
4.0.42 | 183 | 9/4/2023 |
4.0.41 | 164 | 9/4/2023 |
4.0.40 | 201 | 9/1/2023 |
4.0.39 | 205 | 8/31/2023 |
4.0.38 | 196 | 8/31/2023 |
4.0.37 | 198 | 8/29/2023 |
4.0.36 | 179 | 8/29/2023 |
4.0.35 | 205 | 8/29/2023 |
4.0.34 | 209 | 8/25/2023 |
4.0.33 | 195 | 8/24/2023 |
4.0.32 | 199 | 8/23/2023 |
4.0.31 | 207 | 8/22/2023 |
4.0.30 | 195 | 8/18/2023 |
4.0.29 | 185 | 8/17/2023 |
4.0.28 | 210 | 8/17/2023 |
4.0.27 | 163 | 8/17/2023 |
4.0.26 | 279 | 8/10/2023 |
4.0.25 | 206 | 8/9/2023 |
4.0.24 | 217 | 8/8/2023 |
4.0.23 | 188 | 8/8/2023 |
4.0.22 | 174 | 8/8/2023 |
4.0.21 | 302 | 8/7/2023 |
4.0.20 | 204 | 8/4/2023 |
4.0.19 | 256 | 8/3/2023 |
4.0.18 | 208 | 8/2/2023 |
4.0.17 | 239 | 7/26/2023 |
4.0.16 | 231 | 7/25/2023 |
4.0.15 | 238 | 7/21/2023 |
4.0.14 | 200 | 7/19/2023 |
4.0.13 | 198 | 7/18/2023 |
4.0.12 | 174 | 7/18/2023 |
4.0.11 | 229 | 7/18/2023 |
4.0.10 | 178 | 7/18/2023 |
4.0.9 | 276 | 7/17/2023 |
4.0.8 | 188 | 7/17/2023 |
4.0.7 | 175 | 7/17/2023 |
4.0.6 | 180 | 7/17/2023 |
4.0.5 | 493 | 1/30/2023 |
4.0.4 | 278 | 1/30/2023 |
4.0.3 | 380 | 1/30/2023 |
4.0.2 | 384 | 1/27/2023 |
4.0.1 | 560 | 12/13/2022 |
4.0.0 | 320 | 12/12/2022 |
3.0.43 | 1,513 | 6/10/2022 |
3.0.41 | 945 | 4/20/2022 |
3.0.40 | 983 | 1/11/2022 |
3.0.39 | 765 | 1/10/2022 |
3.0.38 | 1,033 | 6/17/2021 |
3.0.37 | 755 | 6/16/2021 |
3.0.36 | 700 | 6/16/2021 |
3.0.35 | 485 | 6/16/2021 |
3.0.34 | 464 | 6/16/2021 |
3.0.33 | 934 | 1/7/2021 |
3.0.32 | 765 | 12/16/2020 |
3.0.31 | 708 | 12/14/2020 |
3.0.29 | 2,298 | 9/13/2020 |
3.0.28 | 850 | 6/19/2020 |
3.0.27 | 855 | 6/8/2020 |
3.0.26 | 1,606 | 5/12/2020 |
3.0.25 | 1,371 | 5/12/2020 |
3.0.24 | 845 | 4/28/2020 |
3.0.23 | 852 | 4/24/2020 |
3.0.22 | 851 | 4/16/2020 |
3.0.21 | 856 | 4/16/2020 |
3.0.20 | 583 | 4/15/2020 |
3.0.19 | 566 | 4/15/2020 |
3.0.18 | 1,110 | 4/14/2020 |
3.0.17 | 561 | 4/14/2020 |
3.0.16 | 902 | 4/10/2020 |
3.0.15 | 929 | 4/10/2020 |
3.0.14 | 3,023 | 3/26/2020 |
3.0.13 | 842 | 3/26/2020 |
3.0.12 | 588 | 3/25/2020 |
3.0.11 | 570 | 3/25/2020 |
3.0.10 | 561 | 3/25/2020 |
3.0.9 | 602 | 3/25/2020 |
3.0.8 | 593 | 3/25/2020 |
3.0.7 | 1,084 | 3/25/2020 |
3.0.6 | 1,255 | 3/21/2020 |
3.0.5 | 1,594 | 3/13/2020 |
3.0.4 | 626 | 3/13/2020 |
3.0.3 | 1,319 | 2/28/2020 |
3.0.2 | 1,139 | 2/21/2020 |
3.0.1 | 638 | 2/11/2020 |
3.0.0 | 1,814 | 12/23/2019 |
2.0.10 | 1,043 | 4/17/2019 |
2.0.9 | 1,563 | 2/21/2019 |
2.0.8 | 739 | 2/21/2019 |
2.0.7 | 3,855 | 8/1/2018 |
2.0.6 | 1,215 | 8/1/2018 |
2.0.5 | 1,524 | 6/26/2018 |
2.0.4 | 1,613 | 6/1/2018 |
2.0.3 | 1,570 | 5/22/2018 |
2.0.2 | 2,124 | 5/11/2018 |
2.0.1 | 2,197 | 2/13/2018 |
2.0.0 | 2,106 | 1/2/2018 |
1.0.10 | 13,939 | 6/16/2017 |
1.0.8 | 1,061 | 6/16/2017 |
1.0.7 | 1,025 | 5/30/2017 |
1.0.6 | 1,000 | 5/30/2017 |
1.0.5 | 1,013 | 5/25/2017 |
1.0.4 | 1,032 | 5/24/2017 |
1.0.0 | 1,054 | 5/24/2017 |