Giter Club home page Giter Club logo

dba-dash's Introduction

DBA Dash - SQL Server Monitoring Tool

DBA Dash Performance

Download

Download

Documentation is now available on dbadash.com, including an easy to follow quick start guide.

Project Summary

DBA Dash is a tool for SQL Server DBAs to assist with daily checks, performance monitoring and change tracking. You can be up and running within minutes and it will provide you with a wealth of information that will make your life as a DBA easier.

  • Daily DBA Checks

    • Backups
    • Last Good DBCC check
    • Corruption
    • Drive space
    • Agent Jobs
    • Availability Groups
    • Log Shipping
    • Mirroring
    • Identity Columns
    • Custom Checks and more
  • Performance

  • Track configuration

    • sys.configuration settings
    • SQL Patching
    • Hardware
    • Trace Flags
    • Alerts
    • Drivers
    • TempDB and Database files
    • Resource Governor
    • Database options
    • Query Store
    • Schema changes

    Track configuration across your SQL Server estate, automatically logging when changes occur

  • Agent Jobs

    • DDL Tracking
    • Agent job timeline view
    • Agent job performance monitoring
    • Highlight job failures across all your SQL instances
  • Option to monitor instances in isolated environments via S3 bucket.

What DBA Dash collects and when

Video Overview

DBA Dash Overview

Requirements

  • SQL Server 2016 SP1 or later required for DBADashDB repository database. RDS & Azure DB is supported.
  • SQL 2008-SQL 2022 supported for monitored instances - including Azure and RDS (SQL Server).
  • Windows machine to run agent. Agent can monitor multiple SQL instances.

Prerequisites

  • Account to use for agent. Review the security doc for required permissions.
  • .NET Desktop Runtime 8 is used by DBA Dash. You will be prompted to install the .NET runtime version 8 if it's not already installed.

Note It's possible to run as a console app under your own user account for testing purposes.

Installation

Upgrades

Help

dba-dash's People

Contributors

carehart avatar chadbaldwin avatar coliff avatar davidwiseman avatar dependabot[bot] avatar imgbotapp avatar jeffdoolittle avatar rl-tc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dba-dash's Issues

Improve summary page load

The summary page can take a few seconds to load on deployments of DBA Dash with large numbers of monitored SQL instances. If the load can be done async this would improve the application experience. This is important for the Summary page as it's loaded automatically when the application starts.

Upgrade script fails to get version

On some instances this will fail:
[System.Reflection.Assembly]::LoadFrom($path).GetName().Version

Maybe due to powershell version or something similar. Either way, this is a better way to get the version information:

$existingVersion=[System.Version](Get-Item $path).VersionInfo.ProductVersion

DBA Dash Service Config Tool minor bug

Object reference not set to instance of an object error when cancelling security prompt during service install.

Click Install as Service.
Run As User (Prompt)
Click Install
Cancel the security dialog.

Automated Testing

If would be good to have some more automated testing. GitHub actions might be a good way to do this. We can build the app and test against a copy of SQL Server running on docker. Also need some more automation for the DBA Dash lab environment - to run automated tests from SQL 2005 to 2019.

  • Check we can deploy when the user has a non english language #104
  • Check we can deploy to an instance with a different collation (e.g. Binary).
  • Automate the config/deployment to test the automation process.
  • Would need to run for a set period of time. Then perform some checks to ensure we have collected data for the instances as expected.
  • Check if we have any errors/warnings

For github actions we would need to get the DB to build using dotnet build on linux. We currently use msbuild but there is a supported way to do this now (Still in Preview though so not fully supported)
https://erikej.github.io/ssdt/dotnet/2022/03/07/ssdt-dacpac-netcore.html

Running tests locally with docker would also be good. This is limited to SQL 2017 & 2019.

How to perform the tests? Test project? Powershell/Pester?

Column Picker - UI improvement

Some of the grids have a drop down that allows you to pick columns. This works but it's quite slow to customize the column list. You have to select 1 column at a time to be added/removed from the chart. It would be better to show a form with a list of columns - select a checkbox for the ones you want to display.

SQL language

hi,

if the default language of the user is NOT english_us you get following error:

SqlProcedure "[dbo].[VLF_Upd]" wird erstellt...
SqlProcedure "[dbo].[Waits_Get]" wird erstellt...
SqlProcedure "[dbo].[Waits_Upd]" wird erstellt...
Msg 4132, Level 16, State 1, Procedure Waits_Upd, Line 72 [Batch Start Line 21429]
Der fΓΌr die @MaxDate-Variable in der OPTIMIZE FOR-Klausel angegebene Wert konnte nicht implizit in den Typ dieser Variablen konvertiert werden.
** An error was encountered during execution of batch. Exiting.

Completion time: 2022-03-21T14:06:10.1855006+01:00

I added:

SET LANGUAGE us_english;

GO
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON;

SET NUMERIC_ROUNDABORT OFF;

SET LANGUAGE us_english;

Service fails to install if ServiceConfig.json doesn't exist

The service fails to install if the service hasn't been configured first. It's not clear why the install failed without looking at the event logs. Proposed change:

  • Prompt the user to configure the service first
  • Handle the error better if the config file doesn't exist.

Issue with 6.0.2 SDK update

The issue is described here:
dotnet/winforms#6663

Since upgrading to the latest VS, the application builds with 6.0.2 and will fail to run on a machine without this version installed. The app fails silently and you have to discover the error using event viewer.
Ideally you would at least be prompted to upgrade to the new version.

As a workaround we can use 6.0.101 be specifying this in the Global.json and editing the workflows to use 6.0.101. At some point we might want to revert this change and upgrade to a newer version.

Chart Error - Could not obtain information about Windows NT group/user ...

Logged into DBADash Client on workstation with a domain user with local admin rights
DBADash Service setup to run on the workstation using a separate service account for DBADash
Workstation runs SQL Express for the repository database
One Source Server runs on a different domain. Another is the local instance on the workstation

DBADash Client throws the error below when opening Performance tab for either Source server. User in the error is redacted and references the local admin logged in on the workstation.

dba dash remote server perf tab access error Screenshot 2022-03-20 094849

I'm able to view data collected on other tabs ok.

Drive History Improvement

The drive history report is a bit limited as the data is always aggregated by day, showing the maximum recorded used space. If a drive has suddenly started to fill up, you might be interested in identifying when that occurred. The history report gives long term trends but isn't good at showing history over shorter time periods. Also, the history report crashes if there is only 1 day of data #83

A quick way to export the raw data to excel might also be useful

Running Queries Status column

This currently returns the status from sys.dm_exec_sessions but the status from sys.dm_exec_requests can provide some additional info for running queries. Session status can be:

  • Running
  • Sleeping
  • Dormant
  • Preconnect
    Request status can be:
  • Background
  • Running
  • Runnable
  • Sleeping
  • Suspended

For the sessions that are running it would be more useful to return the request status and fall back to session status for queries without an active request. Or separate status columns could be collected.

Copy button does nothing

So far all forms I tried, the copy button does nothing. Selecting a cell and pressing ctrl+c does copy the data though.

2.13.3

Failed to generate SSPI context. when trying to launch DBADash.exe on a fileshare on a server joined to a different domain

v2.13.3
Setup DBADash on a server using a local user
DBADash,exe runs ok if launched on the server as the local user
Setup a file share on the server and grant the local user access
Connect to file share using a computer joined to a different domain but specify user credentials for the local user on the server.
Launch DBADash.exe

Error shown

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
Microsoft.Data.SqlClient.SqlException (0x80131904): Failed to generate SSPI context.
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.SSPIError(String error, String procedure) at Microsoft.Data.SqlClient.TdsParser.SNISSPIData(Byte[] receivedBuff, UInt32 receivedLength, Byte[]& sendBuff, UInt32& sendLength) at Microsoft.Data.SqlClient.TdsParser.SSPIData(Byte[] receivedBuff, UInt32 receivedLength, Byte[]& sendBuff, UInt32& sendLength) at Microsoft.Data.SqlClient.TdsParser.TdsLogin(SqlLogin rec, FeatureExtension requestedFeatures, SessionData recoverySessionData, FederatedAuthenticationFeatureExtensionData fedAuthFeatureExtensionData) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.Login(ServerInfo server, TimeoutTimer timeout, String newPassword, SecureString newSecurePassword) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) at Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken, DbConnectionPool pool) at Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at Microsoft.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at Microsoft.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at Microsoft.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at Microsoft.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at Microsoft.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at Microsoft.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions)
at Microsoft.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at Microsoft.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 retry, SqlConnectionOverrides overrides)
at Microsoft.Data.SqlClient.SqlConnection.Open(SqlConnectionOverrides overrides)
at Microsoft.Data.SqlClient.SqlConnection.Open()
at DBADash.DBValidations.GetDBVersion(String connectionString) in D:\a\dba-dash\dba-dash\DBADash\Upgrade\DBValidations.cs:line 76
at DBADashGUI.Main.checkVersion() in D:\a\dba-dash\dba-dash\DBADashGUI\Main.cs:line 103
at DBADashGUI.Main.Main_Load(Object sender, EventArgs e) in D:\a\dba-dash\dba-dash\DBADashGUI\Main.cs:line 93
at System.Threading.Tasks.Task.<>c.b__128_0(Object state)
ClientConnectionId:a586e7d3-8ba8-41f4-9a0f-0d63a26a08b1

Enhancement - Add Options To CPU Performance Graph

I like to review Batch Requests/sec, Transactions/sec, Session Count & Worker Thread Count (mostly for Azure SQL DB) when we see high CPU to see if it simply correlates to increased demand or if it is a normal day (or hour) and it's something specific causing the CPU spike. Would it be feasible to add an options drop down like on the other charts to be able to add these to the CPU graph if you want to see them on a second Y axis?

Azure Summary improvement

Include used, allocated, max size & % used in the Azure Summary report. This data is included for the elastic pool but not for the DBs. This is useful to have this data when looking to size an elastic pool for some existing DBs or just to keep an eye on used vs max size & allocated. The data is there if you drill down to the files but it would be nice to have it on the azure summary report.

IO Performance - Summary feature

On the performance tab we can see IO metrics for the current instance or database over time. We can filter the data by drive or filegroup. It's not easy to answer these questions though:

  • Which database has the most IO?
  • Which drive has the most IO?
  • Which file/filegroup has the most IO?

To work this out we'd need to look at each individually - or query the table. The data we need is already collected - we just need a report that shows a summary of IO metrics by drive, database, filegroup and file.

Service config tool - error message improvement

If the service can't start because the username/password is incorrect, the current error message isn't very helpful. e.g.
Cannot start service 'DBADashService' on computer '.'

The inner exception should be included which would give some indication of the problem.

Invoke-WebRequest can fail with error

Invoke-WebRequest : The request was aborted: Could not create SSL/TLS secure channel. This needs adding:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

App name not set in agent

App should identify itself properly instead of 'Core Microsoft SqlClient Data Provider'. The GUI is setting the app name but not the service.
This either used to be set or it was set in the connection string.

Filter instances in treeview

It would be useful to have a search feature for deployments of DBA Dash that have a larger number of instances.

Install Service error when connecting as .\user - The account name is invalid or does not exist

Tried installing service with user prompt
Entered .\user to set a local user
Saw prompt that said domain was not specified, click yes to use local domain
Install errored

Works ok if i specify Hostname\user for user

Installing service DBADashService...

An exception occurred during the Install phase.
System.ComponentModel.Win32Exception: The account name is invalid or does not exist, or the password is invalid for the account name specified.

The Rollback phase of the installation is beginning.

The Rollback phase completed successfully.

The transacted install has completed.
Topshelf.HostFactory Error: 0 : The service terminated abnormally, System.InvalidOperationException: The installation failed, and the rollback has been performed.
---> System.ComponentModel.Win32Exception (1057): The account name is invalid or does not exist, or the password is invalid for the account name specified.
at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver)
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
at Topshelf.Runtime.Windows.HostInstaller.Install(IDictionary stateSaver)
at System.Configuration.Install.Installer.Install(IDictionary stateSaver)
at System.Configuration.Install.TransactedInstaller.Install(IDictionary savedState)
--- End of inner exception stack trace ---
at System.Configuration.Install.TransactedInstaller.Install(IDictionary savedState)
at Topshelf.Runtime.Windows.HostServiceInstaller.InstallService(Action1 beforeInstall, Action1 afterInstall, Action1 beforeRollback, Action1 afterRollback)
at Topshelf.Runtime.Windows.WindowsHostEnvironment.InstallService(InstallHostSettings settings, Action1 beforeInstall, Action afterInstall, Action beforeRollback, Action afterRollback) at Topshelf.Hosts.InstallHost.Run() at Topshelf.HostFactory.Run(Action1 configureCallback)

Add Service Log Viewer to config tool

It would be useful to be able to load the current log file directly from the service configuration tool - saves finding log file in Windows explorer.

Is SQL Server Express edition supported (as instance to be monitored)?

Discussed in #71

Originally posted by carehart March 14, 2022
Quick Question: Would you say that you do or do not intend to support SQL Server Express editions? I'm having no luck connecting to a 2k8 Express edition. More below. I also don't find mention of it (either way) in the repo here.

First, nice looking too, thanks. Just learned of it today (via mention on Brent Ozar's blog post). Got it installed and connected to some servers.

But when I try to connect it to a 2008 Express edition instance, it never shows up in the tool...and your log shows a failure due to the instance not having the SQL Agent running:
Microsoft.SqlServer.Management.Smo.UnsupportedFeatureException: SQL Server Agent is not supported on this edition of SQL Server.

And indeed one of the limitations of the Express edition is that the Agent is not supported (the service will not start). This is true even SQL Server 2019's implementation of Express

So do you feel dbadash does REQUIRE it, in order to connect at all? Might there be some config change I could make in the dbadash source connection that might allow it to proceed to at least connect and perhaps let is show SOME characteristics of the instance?

FWIW, I'll note that I AM indeed able to connect to the instance in question, via SSMS, from the machine on which I have implemented dbadash. And I I do run Activity Monitor from that also against that instance, using the same user I configured for dbadash to use for tha tinstance.

And I have some other SQL Server monitoring tools which work from this machine, monitoring that instance. They all do at least connect to and show the instance, though some DO indicate how some feature of that monitoring tool may or does not work with an Express instance, sometimes specifically because of the lack of Agent support.

So bottom line, it seems that Agent support is mandatory for dbadash to connect. Or am I missing something?

Again, thanks for the tool. I will still be considering recommending it for others looking at SQL Server Monitoring solutions. And I do look forward to watching how it may evolve over time. I've also subscribed to your youtube channel to keep an eye on things.

Finally, feel free to let me know (and for the sake of other readers seeing this) whether you may prefer a question like this to be in the "issues" feature rather than in "discussions". Many github repos don't offer the "discussions" tab, so many folks never even notice it's an option to consider, when they may have something to discuss. :-)

Mouse Pointer

The mouse pointer turns into a vertical line with an arrow to each side when in the application. This is only place where this has ever happened. It makes clicking on things in the GUI difficult. I have installed this on two different machines and it does the same thing. This is using the most recent build but it did it on one back as well.

image

Slow Queries Performance for long date range

If a long date range is selected the Slow Queries tab might take some time to load and could timeout. Other reports have the data aggregated in hourly intervals which makes it faster for long term analysis.
Note: The report can be sliced, diced and filtered in various ways so it's not an ideal candidate for aggregation.

Proposed Solution:
Don't auto load the data for this report if the date range is larger than a certain threshold. Maybe display a warning and allow the user to click a button to load.

System.Exception: DDLSnapshot:DBName. Primary key violation. This can occur if you have a case sensitive database collation that ...

I'm guessing this is for the schema snapshots. Yes, the database uses a case sensitive collation

Message
System.Exception: DDLSnapshot:DBName. Primary key violation. This can occur if you have a case sensitive database collation that contains tables, SPs or other database objects with names that are no longer unique with a case insensitive comparison.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK__#AEA38EE__CDB0B3FC1F8058C3'. Cannot insert duplicate key in object 'dbo.@ss'. The duplicate key value is (budaarontest, dbo, U ).
The data for table-valued parameter "@ss" doesn't conform to the table type of the parameter. SQL Server error is: 3602, state: 30
The statement has been terminated.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest) at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)
at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName) at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery() at DBADash.DBImporter.updateSnapshot(String tableName, String databaseName) in D:\a\dba-dash\dba-dash\DBADash\DBImporter.cs:line 311 ClientConnectionId:60b88a6e-e248-4394-8fdd-d0c5b3ebc11e Error Number:2627,State:2,Class:14 --- End of inner exception stack trace --- at DBADash.DBImporter.updateSnapshot(String tableName, String databaseName) in D:\a\dba-dash\dba-dash\DBADash\DBImporter.cs:line 317 at DBADash.DBImporter.<>c__DisplayClass11_3.<Update>b__7(Context context) in D:\a\dba-dash\dba-dash\DBADash\DBImporter.cs:line 237 at Polly.Policy.<>c__DisplayClass110_0.<Execute>b__0(Context ctx, CancellationToken _) at Polly.Policy.<>c__DisplayClass138_0.<Implementation>b__0(Context ctx, CancellationToken token) at Polly.Retry.RetryEngine.Implementation[TResult](Func3 action, Context context, CancellationToken cancellationToken, ExceptionPredicates shouldRetryExceptionPredicates, ResultPredicates1 shouldRetryResultPredicates, Action4 onRetry, Int32 permittedRetryCount, IEnumerable1 sleepDurationsEnumerable, Func4 sleepDurationProvider)
at Polly.Retry.RetryPolicy.Implementation[TResult](Func3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.Implementation(Action2 action, Context context, CancellationToken cancellationToken)
at Polly.Policy.Execute(Action`2 action, Context context, CancellationToken cancellationToken)
at DBADash.DBImporter.Update() in D:\a\dba-dash\dba-dash\DBADash\DBImporter.cs:line 236

Enhancement - Instance Grouping

We do 3rd party work for a data center where the customers may have servers named the same thing (SQL1, SQL2, etc.). It would be nice to be able to create groups in the GUI and be able to add instances into them, so they are visually grouped on the left column. This would be similar to the concept in place for SSMS Registered Servers. I imagine the Primary Key could be changed to include the group so that the instance would still be unique in the database, etc.

Scan Now button in config tool doesn't update the grid

If you click scan now to add new azure db connections it will add the connections to the config but the connections won't be visible in the grid. If you add a new connection to the grid afterwards this will cause the grid to refresh and the connections will be visible. The grid should be refreshed automatically on adding the connections.

Bug with chart histograms

Some grids include an optional histogram column. This results in an error:
System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Data.SqlClient, Version=4.6.0.0

This occurs in the call to GetHistogram which uses the following to return a bitmap.
System.Windows.Forms.DataVisualization.Charting

This occurs when chart.DrawToBitMap is called - seems odd to have this dependency.

DBA Dash now uses Microsoft.Data.SqlClient. Including System.Data.SqlClient might be a quick fix but ideally this chart component needs to be replaced with something else.

About box improvements

Improve appearance of about box
Include license info
Update Copyright/Company info
Add check for latest version

Run upgrade script as administrator

The upgrade script can fail when run as a normal user due to insufficient permissions to stop the service. Prompt to run as administrator.

dbadashconfig.exe closes silently if .net 6 not installed

i was told it would detect .net framework missing and prompt me to install it. It closes silently when I tried. v 2.13.3

windows event viewer

Description: A .NET application failed.
Application: DBADashConfig.exe
Path: C:\Users\administrator.MK\Downloads\DBADash_2.13.3\DBADashConfig.exe
Message: It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '6.0.0' was not found.

  • The following frameworks were found:
    2.2.1 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
    3.1.4 at [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

You can resolve the problem by installing the specified framework and/or SDK.

The specified framework can be found at:

CPU Collection SQL 2005 Issue

There seems to be a misspelling of scheduler on SQL 2005 when querying the ring buffer to get CPU utilization.

On 2005 the path is:
Record/SchedluerMonitorEvent/SystemHealth
On newer versions it's:
Record/SchedulerMonitorEvent/SystemHealth

Changing xpath to this will handle both situations.
/Record//SystemHealth

Code Signing

Consider publishing two versions of the package - one signed for those who need it, one unsigned for those who do not want the dependency burden entailed with signed packages.

DBA Dash crashes when Drives - History is opened

Hello David,

at first thanks for this awesome tool!

When I click on the "History" link in the "Drives" tab, the dialog window opens and DBA Crash crashes shortly after. OS is Windows 10 (21H1). Microsoft Windows Desktop Runtime has version 6.0.3.31024.

There is no corresponding entry in the application log file. But there are 2 log entries in the Windows Application Log. The .NET Runtime crashes with this information:

Application: DBADash.exe
CoreCLR Version: 6.0.322.12309
.NET Version: 6.0.3
Description: The process was terminated due to an unhandled exception.
Exception Info: LiveCharts.Helpers.LiveChartsException: One axis has an invalid range, it is or it is tends to zero, please ensure your axis has a valid range
[...]

I copied the errors to xml files (see attached zip file).

WindowsApplicationEventLog.zip

Thank you very much!

Best regards,
Kai.

Add Power BI Dashboards For Data

Create Power BI reports from the data repository to allow for modern and customizable visualizations that could be shared via the .pbix file. This file could then be customized and published by anyone to their own PowerBI.com environments.

Capture deadlocks

DBA Dash already captures Deadlocks/sec performance counter by default. This lets us know if we have any deadlocks but doesn't provide any detail on the deadlocks to assist with troubleshooting. It's possible to get this data from the system_health trace or from sys.fn_xe_telemetry_blob_target_read_file (for AzureDB).

It might be nice to pull this data into DBA Dash with some longer retention than system_health to assist with troubleshooting deadlocks. The data could be pulled from system_health or deadlocks could be added to the existing DBA Dash extended event.

From the UI side the deadlocks could be displayed in a grid. Probably not worth the effort of re-creating the deadlock viewer in DBA Dash.. Click a link to download the deadlock file (*.xdl) and open in SSMS. Could also show XML within the app.

Azure:
https://techcommunity.microsoft.com/t5/azure-database-support-blog/lesson-learned-19-how-to-obtain-the-deadlocks-of-your-azure-sql/ba-p/368847

AWS RDS Error

I am using AWS RDS and getting this error. It's in the Performance tab graphs. Not sure if it's permissions or what?

image

CodeQL Workflow issue

windows-latest now runs windows-2022 which causes a problem for this workflow:

Tracing builds with CodeQL is currently not supported on Windows 11 and Windows Server 2022. Please modify your Actions workflow to use an earlier version of Windows for this job, for example by setting runs-on: windows-2019.

This also needs a fix for the build to specify version related to:
#42

Improve upgrade process

Current upgrade process:

  • Download new release from GitHub.
  • Stop the DBA Dash agent. Use net stop dbadashservice from the commandline or use the DBADashServiceConfigTool.exe tool (Service Tab) to stop the service.
  • Close any running instances of the GUI or DBA Dash Service Config tool.
  • Replace all the app binaries with the ones from the new release (copy/paste). All the configuration information for the agent is stored in the ServiceConfig.json file so this file must be kept. You might want to keep backups of this file - particularly before making configuration changes or installing new versions.
  • If the "auto upgrade repository DB on service start" option is enabled you can run net start dbadashservice to complete the installation. Any database schema changes will be deployed automatically when the service starts.

A powershell script could be used to check github for an update, download the latest release. Stop the service, extract the files and restart the service. A PoC already exists for this and it seems to work.

From the app side the user could initiate an upgrade check. The latest PS script could be downloaded from github and ran to upgrade the app. If we include the PS script in the release, the file would need to be replaced on extract but it would be running. Also, getting the script from github will ensure we have the latest upgrade mechanism.

Fully automatic updates would also be possible - but this needs to be a robust and reliable process.

For GUI only deployments we might want to upgrade to the same version as the repository database rather than the current release version.

Or it might make sense to have an installer with an update mechanism. Couple of options to consider suggested by Peter Hall:
https://github.com/google/omaha
https://github.com/ravibpatel/AutoUpdater.NET

Inaccurate error 'you must run .Net 6 Desktop' after renaming DBADash.runtimeconfig.json

If I rename DBADash.runtimeconfig.json and launch DBADash.exe, i get a prompt that .net 6 is not installed.

image

Note, .Net Desktop Runtime 6.0.1 is installed.

I click Yes to download, but nothing happens.

If i rename the file back to original name, the error doesn't occur.

I was doing this trying to figure out how to reconfigure DBADash to use a different user to connect. I assumed renaming that config file would prompt me for DBADash server and user again. I don't see an option for this in the GUI.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.