SQL Server Health Check
Backups, integrity, jobs, top queries, indexes, security, configuration, capacity and patching. You get a 2-page prioritized report in 48-72 hours.
SQL Server consulting for small businesses and agencies
If your SQL Server is slow, fragile or nobody has looked at it in years, I find what is hurting performance and putting your data at risk, then give you a clear fix list.
Start with a fixed-price health check. Most tuning and care work follows from what it finds.
Backups, integrity, jobs, top queries, indexes, security, configuration, capacity and patching. You get a 2-page prioritized report in 48-72 hours.
I tune the specific queries or procedures that are hurting you and show before and after timings, with a written summary and scripts.
Backup and job verification, a monthly health review and 4 hours of support, so problems get caught before they become outages.
You answer a few questions about your setup, and we sign a short scope and NDA.
You create a least-privilege login, reached through your VPN or jump box.
I review system metadata such as settings, job history and query statistics.
Within 48-72 hours you have a scorecard, the top 3 fixes and effort estimates.
A consultant with access to your database is a risk you should weigh. These rules apply to every engagement.
sa or sysadmin.Everything runs in your browser, and nothing you enter or paste is sent anywhere.
If you can't answer that with a date, a health check is a good place to start.
Services and pricing
A read-only review of nine areas, delivered as a 2-page report with a green, amber and red scorecard. Each finding includes the evidence, the business impact and the recommended fix.
Delivery: 48-72 hours. See a sample report.
For specific slow queries or stored procedures. I find the actual bottleneck, apply targeted fixes with your approval, and record before and after timings.
Delivery: written summary and scripts.
Ongoing backup and job verification, a monthly health review and 4 hours of support. It is usually set up after a health check, once the urgent fixes are done.
Recurring. Unused support hours are agreed in your scope.
Also available on request: SQL Server version upgrades, Azure SQL migrations, reporting and data cleanup. These are quoted after a short call.
The report tells you what to fix first and why it matters to the business, in plain English you can pass to your team or your boss.
DBCC CHECKDB)sa, sysadmin members, password policyChoose what you need and send the result with your enquiry. The total is an estimate until we have confirmed your setup.
Estimated total
Not during a review, which is read-only. Fixes happen only after you approve them in writing and we have a verified backup.
No. A read-only login with view permissions is enough for a health check.
I review system metadata such as settings, job history and query statistics, not the contents of your tables. I don't copy data off your servers, and I will sign an NDA.
You still get a written report showing what was checked and the evidence, which is useful for audits and peace of mind.
No, and be careful of anyone who does. I promise a diagnosis, a prioritized plan and measured before and after timings for anything I tune.
Tell me your version and where it runs when you get in touch. If it's outside what I can do well, I'll say so before you pay anything.
Free tools
No sign-up. Everything runs in your browser, and nothing you enter or paste is sent anywhere.
These tools give starting points, not advice about your specific server. Test any change outside production first.
Free tools / Self-Check
Answer 11 questions to get a scorecard in the same format as a paid health check. It takes about three minutes.
This reflects your answers, not a look at your server. A real review may find something different.
Free tools / Data Loss Calculator
See how much work your backup schedule could lose in the worst case, and what an outage could cost.
Worst-case data loss window
This is a planning estimate and assumes your backups can be restored. Only a restore test proves that.
This read-only query lists the last full, differential and log backup recorded for each database. Review it and test it on a non-production server first.
SELECT
d.name AS database_name,
d.recovery_model_desc,
d.state_desc,
MAX(CASE WHEN b.type = 'D' THEN b.backup_finish_date END) AS last_full,
MAX(CASE WHEN b.type = 'I' THEN b.backup_finish_date END) AS last_diff,
MAX(CASE WHEN b.type = 'L' THEN b.backup_finish_date END) AS last_log
FROM sys.databases AS d
LEFT JOIN msdb.dbo.backupset AS b ON b.database_name = d.name
WHERE d.name <> 'tempdb'
GROUP BY d.name, d.recovery_model_desc, d.state_desc
ORDER BY d.name;Free tools / Memory and MAXDOP Calculator
Get starting values for max server memory, MAXDOP and cost threshold, with the script to apply them.
This script changes server settings. Compare it with your current values, and apply it through your change process after testing.
MAXDOP guidance: Microsoft Learn.
Free tools / STATISTICS IO Parser
Paste the Messages tab from SSMS after SET STATISTICS IO, TIME ON, and see which table is costing you the most reads.
Parsed in your browser. Table names are never sent anywhere.
| Table | Scans | Logical | Physical | Read-ahead | LOB logical |
|---|
Free tools / Wait Type Lookup
Find out what a wait type usually means and what to check first. Paste several names to look them up together.
This read-only query lists waits since the last restart or stats clear, leaving out common idle waits. It has been run on SQL Server 2014, 2016 and 2019. Review it and test it on a non-production server first.
SELECT TOP (10)
wait_type,
wait_time_ms / 1000 AS wait_seconds,
waiting_tasks_count,
CAST(100.0 * wait_time_ms / SUM(wait_time_ms) OVER ()
AS decimal(5, 1)) AS pct_of_listed_waits
FROM sys.dm_os_wait_stats
WHERE waiting_tasks_count > 0
AND wait_type NOT LIKE '%SLEEP%'
AND wait_type NOT LIKE '%QUEUE%'
AND wait_type NOT LIKE 'BROKER[_]%'
AND wait_type NOT LIKE 'CLR[_]%'
AND wait_type NOT LIKE 'FT[_]IFTS%'
AND wait_type NOT LIKE 'XE[_]%'
AND wait_type NOT LIKE 'PREEMPTIVE[_]XE[_]%'
AND wait_type NOT IN (N'WAITFOR', N'CHKPT', N'DIRTY_PAGE_POLL',
N'DISPATCHER_QUEUE_SEMAPHORE', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION',
N'PARALLEL_REDO_WORKER_WAIT_WORK', N'PWAIT_ALL_COMPONENTS_INITIALIZED',
N'REQUEST_FOR_DEADLOCK_SEARCH', N'SERVER_IDLE_CHECK',
N'SOS_WORK_DISPATCHER', N'WAIT_XTP_HOST_WAIT')
ORDER BY wait_time_ms DESC;Free tools / Support Date Checker
Paste your version to see whether Microsoft still provides updates for it.
SELECT @@VERSION; and paste the result, or type a build such as 15.0.4415.2.| Version | Build | Mainstream ends | Extended ends | Status today |
|---|
Dates from the Microsoft Lifecycle pages, last checked 31 October 2026. Confirm them there before making a decision. Azure SQL Database and Managed Instance follow a different policy.
Sample report
Here is the report format, filled in with made-up demo data. It describes no real client or server.
Your databases are running, but a server failure in the late afternoon would lose up to 11 hours of orders, because log backups are not running on your busiest database. Two fixes this week remove most of that risk.
| Priority | Finding | Effort |
|---|---|---|
| 1 | No transaction log backups on Sales | ~1 hr |
| 2 | Last clean CHECKDB on Sales was 74 days ago | ~1 hr |
| 3 | Application login is a sysadmin, and sa is enabled | ~half day |
| Area | Status | Summary |
|---|---|---|
| Backups and recoverability | Red | Full backups nightly, but no log backups on 2 FULL-recovery databases |
| Database integrity | Red | Last clean check 74 days ago on Sales |
| Jobs and alerting | Amber | 2 failing jobs, with no operator or severity 17-25 alerts |
| Performance | Amber | 3 queries use about 70% of CPU |
| Indexing | Amber | 11 high-value missing indexes, 9 unused |
| Security | Red | sa enabled, and the application login is a sysadmin |
| Configuration | Amber | Max server memory left at default |
| Capacity and growth | Green | Data drive has more than 12 months of projected room |
| Patching and support | Amber | Supported version, several cumulative updates behind |
Sales (FULL recovery)Sales is in FULL recovery. Its last full backup was at 06:00 today, and no log backup has ever been recorded. The log file has grown to 84 GB.msdb.dbo.backupset shows 0 log backups, and sys.databases.log_reuse_wait_desc is LOG_BACKUP.About
I manage enterprise-scale databases with a focus on high availability and production releases planned to avoid downtime. On the development side, I design and optimize complex stored procedures, functions, triggers, and constraints.
I'm known for connecting development and infrastructure teams: I streamline handoffs, reduce operational risk, and keep the database work tied to what the business needs.
I started this practice for businesses that depend on SQL Server but don't need or can't justify a full-time DBA.
When you hire me, I'm the person who does the work and explains it. You get the business meaning first and the technical detail second, in writing, so your team can use it long after the engagement ends.
A kestrel can hold almost still in the air while it watches the ground below for the smallest movement. Good database care works the same way: steady attention, so small problems get noticed before they become outages.
Contact
I'll reply with a next step and, where I can, a fixed price.
Privacy
Tools. The free tools run entirely in your browser. What you enter or paste into them isn't sent to me or stored by this site.
Contact. If you send me a message, I use your details only to reply and to run our work together.
Cookies and analytics. This site sets no cookies and runs no analytics.
Third parties. Your browser loads this site's fonts from Google Fonts, and the web host may keep standard access logs. Both can see your IP address.