PHPackages                             benjdiasaad/laravel-db-monitor - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. benjdiasaad/laravel-db-monitor

ActiveLibrary[Database &amp; ORM](/categories/database)

benjdiasaad/laravel-db-monitor
==============================

Real-time database health monitoring for Laravel applications. Detects slow queries, N+1 issues, missing indexes, and suggests performance optimizations.

v1.0.0(2mo ago)51231MITPHPPHP ^8.2

Since Feb 27Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/benjdiasaad/laravel-db-monitor)[ Packagist](https://packagist.org/packages/benjdiasaad/laravel-db-monitor)[ RSS](/packages/benjdiasaad-laravel-db-monitor/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (6)Versions (2)Used By (0)

Laravel DB Monitor — Real-Time Database Performance Monitoring, Slow Query Detection &amp; N+1 Analysis
=======================================================================================================

[](#laravel-db-monitor--real-time-database-performance-monitoring-slow-query-detection--n1-analysis)

Laravel DB Monitor is a real-time database performance monitoring package for Laravel applications.
It automatically detects **slow queries**, **N+1 query problems**, and **missing indexes**, then suggests SQL optimizations and can even generate index migrations for you.

> A production-ready Laravel performance monitoring tool for Laravel 10, 11 &amp; 12.

[![Laravel](https://camo.githubusercontent.com/56fef1efbd604711ca6bcaf7a2217af6e022b5a336e6ab3c1837b6f76484d2b6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253230253743253230313125323025374325323031322d7265643f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)](https://camo.githubusercontent.com/56fef1efbd604711ca6bcaf7a2217af6e022b5a336e6ab3c1837b6f76484d2b6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3130253230253743253230313125323025374325323031322d7265643f7374796c653d666c61742d737175617265266c6f676f3d6c61726176656c)[![PHP](https://camo.githubusercontent.com/558dc9e81a140fe880777153715dcb0499d0afd81dedb6fda84b1c05e7ae4dba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c75653f7374796c653d666c61742d737175617265266c6f676f3d706870)](https://camo.githubusercontent.com/558dc9e81a140fe880777153715dcb0499d0afd81dedb6fda84b1c05e7ae4dba/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c75653f7374796c653d666c61742d737175617265266c6f676f3d706870)[![License](https://camo.githubusercontent.com/422db9fd40f5831c765cf6530b6750c081b696bd18d904cf89554df98c676277/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265)](https://camo.githubusercontent.com/422db9fd40f5831c765cf6530b6750c081b696bd18d904cf89554df98c676277/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e3f7374796c653d666c61742d737175617265)

---

✨ Features
----------

[](#-features)

- 🐢 Detect slow database queries in real time
- 🔁 Identify N+1 query problems automatically
- 📭 Suggest missing indexes based on real usage
- 💡 Show actionable fix suggestions
- 🔧 Generate index migrations automatically
- 📬 Send alerts via Email or Slack
- 📋 Clean CLI reporting (`db:report`)
- 🧹 Auto-prune old logs using Laravel’s Prunable trait
- ⚡ Works with MySQL, PostgreSQL, SQLite

---

📦 Installation
--------------

[](#-installation)

```
composer require benjdiasaad/laravel-db-monitor
```

Publish config &amp; migrations:

```
php artisan vendor:publish --tag=db-monitor-config
php artisan vendor:publish --tag=db-monitor-migrations
php artisan migrate
```

---

⚙️ Register the Middleware
--------------------------

[](#️-register-the-middleware)

### Laravel 11 / 12 — `bootstrap/app.php`

[](#laravel-11--12--bootstrapappphp)

```
->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [
        \BenjdiaSaad\DbMonitor\Http\Middleware\MonitorQueries::class,
    ]);
})
```

### Laravel 10 — `app/Http/Kernel.php`

[](#laravel-10--apphttpkernelphp)

```
protected $middlewareGroups = [
    'web' => [
        // ...
        \BenjdiaSaad\DbMonitor\Http\Middleware\MonitorQueries::class,
    ],
];
```

---

🔧 Configuration
---------------

[](#-configuration)

Add to `.env`:

```
DB_MONITOR_ENABLED=true
DB_MONITOR_SLOW_THRESHOLD=500
DB_MONITOR_N1_THRESHOLD=10
DB_MONITOR_INDEX_THRESHOLD=50
DB_MONITOR_NOTIFY=admin@yourapp.com
DB_MONITOR_RETENTION=7
```

Config file: `config/db-monitor.php`

```
return [

    'enabled' => env('DB_MONITOR_ENABLED', true),

    'slow_query_threshold_ms' => env('DB_MONITOR_SLOW_THRESHOLD', 500),

    'n_plus_one_threshold' => env('DB_MONITOR_N1_THRESHOLD', 10),

    'missing_index_min_occurrences' => env('DB_MONITOR_INDEX_THRESHOLD', 50),

    'store_queries' => env('DB_MONITOR_STORE_QUERIES', true),

    'retention_days' => env('DB_MONITOR_RETENTION', 7),

    'notify' => env('DB_MONITOR_NOTIFY', null),

    'notification_channels' => ['mail'],

    'exclude_paths' => [
        'telescope/*',
        '_debugbar/*',
        'horizon/*',
        'livewire/*',
    ],
];
```

---

🚀 Usage
-------

[](#-usage)

### Generate a Database Health Report

[](#generate-a-database-health-report)

```
php artisan db:report
```

Example output:

```
DB Monitor Report — Last 24 hours

▶ SLOW QUERY
  Slow query detected: 2300ms
  Path: api/orders
  💡 Suggestion: Use select() instead of SELECT *
  💡 Add index:
  php artisan db:fix --table=orders --column=user_id

▶ N+1 QUERY
  Same query executed 47 times
  💡 Suggestion: Model::with('user')->get()

▶ MISSING INDEX
  Column orders.user_id used in 230 queries
  💡 Auto-generate migration:
  php artisan db:fix --table=orders --column=user_id

```

---

### Filter Reports

[](#filter-reports)

```
php artisan db:report --hours=48
php artisan db:report --severity=critical
php artisan db:report --type=n_plus_one
```

---

### Auto-Fix Missing Indexes

[](#auto-fix-missing-indexes)

Generate migration:

```
php artisan db:fix --table=orders --column=user_id
php artisan migrate
```

Fix all at once:

```
php artisan db:fix --all
php artisan migrate
```

---

### Analyze Stored Logs

[](#analyze-stored-logs)

```
php artisan db:analyze --hours=24
```

---

### Clear Logs

[](#clear-logs)

```
php artisan db:clear --days=7
php artisan db:clear --all
```

---

📬 Notifications
---------------

[](#-notifications)

Enable email alerts:

```
DB_MONITOR_NOTIFY=admin@yourapp.com
```

Enable Slack notifications in `config/db-monitor.php`:

```
'notification_channels' => ['slack'],
```

Configure Slack in `config/services.php`:

```
'slack' => [
    'notifications' => [
        'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
        'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
    ],
],
```

---

🧰 Facade Usage
--------------

[](#-facade-usage)

```
use BenjdiaSaad\DbMonitor\Facades\DbMonitor;

$findings = DbMonitor::runDetectors($queries);

$analysis = DbMonitor::analyzeStoredLogs(hours: 48);
```

---

🛠 Artisan Commands
------------------

[](#-artisan-commands)

CommandDescription`db:report`Show database health report`db:report --hours=48`Report for last 48 hours`db:report --severity=critical`Only critical issues`db:report --type=n_plus_one`Only N+1 findings`db:analyze`Analyze stored logs`db:fix --table=x --column=y`Generate index migration`db:fix --all`Fix all missing indexes`db:clear --days=7`Clear old logs`db:clear --all`Clear everything---

🗄 Database Tables
-----------------

[](#-database-tables)

### `db_monitor_query_logs`

[](#db_monitor_query_logs)

Stores every captured query per request.

- sql
- bindings
- duration\_ms
- connection
- request\_id
- request\_path

### `db_monitor_findings`

[](#db_monitor_findings)

Stores detected issues.

- type (`slow_query`, `n_plus_one`, `missing_index`)
- severity (`warning`, `critical`)
- message
- context (json)
- request\_path
- notified

---

🧹 Auto-Pruning
--------------

[](#-auto-pruning)

Both tables use Laravel's `Prunable` trait.

Run manually:

```
php artisan model:prune
```

Schedule daily:

```
Schedule::command('model:prune')->daily();
```

---

✅ Requirements
--------------

[](#-requirements)

- PHP 8.2+
- Laravel 10, 11, or 12
- Any Laravel-supported database

---

🎯 Why Use Laravel DB Monitor?
-----------------------------

[](#-why-use-laravel-db-monitor)

Unlike traditional profilers, Laravel DB Monitor:

- Stores historical query patterns
- Detects recurring performance issues
- Suggests fixes automatically
- Can generate index migrations for you
- Works in production environments

It helps you catch database problems before your users experience slow pages.

---

📄 License
---------

[](#-license)

MIT — free for personal and commercial use.

---

👤 Author
--------

[](#-author)

**Benjdia Saad**
GitHub:

---

> Built to help Laravel developers optimize database performance before it becomes a problem.

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance88

Actively maintained with recent releases

Popularity20

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

76d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/753081fe6495dcf9027a0a0aaa4eb3e20e214416b9e2851f24d2d15b9c110726?d=identicon)[benjdiasaad](/maintainers/benjdiasaad)

---

Top Contributors

[![benjdiasaad](https://avatars.githubusercontent.com/u/58569768?v=4)](https://github.com/benjdiasaad "benjdiasaad (4 commits)")

---

Tags

database-monitoringlaravellaravel-packageperformance-monitoringphpquery-optimizationlaravelmonitoringdatabaseperformanceslow query

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/benjdiasaad-laravel-db-monitor/health.svg)

```
[![Health](https://phpackages.com/badges/benjdiasaad-laravel-db-monitor/health.svg)](https://phpackages.com/packages/benjdiasaad-laravel-db-monitor)
```

###  Alternatives

[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k7.2M71](/packages/mongodb-laravel-mongodb)[msafadi/laravel-eloquent-join-with

Laravel Eloquent Join With Relationships

1646.0k](/packages/msafadi-laravel-eloquent-join-with)[toponepercent/baum

Baum is an implementation of the Nested Set pattern for Eloquent models.

3154.7k](/packages/toponepercent-baum)[dragon-code/laravel-data-dumper

Adding data from certain tables when executing the `php artisan schema:dump` console command

3418.6k](/packages/dragon-code-laravel-data-dumper)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
