Skip to content

Releases: SkyChenSky/DBPilot

v0.5.5

Choose a tag to compare

@SkyChenSky SkyChenSky released this 24 Sep 06:12

DBPilot 0.5.5
No more timeouts on large-database index collection · Async recollect · Versioned platform-schema migrations · Concurrent-write fixes

✨ New
Per-instance query timeout — a new "Query timeout (seconds)" field on the instance form (default 30, configurable 5–86400). Heavy queries such as fragmentation scans are no longer bound to the ADO.NET default 30-second command timeout; raise it for large databases or slow storage
Async "Recollect" — the button returns in ~0.2s while collection runs in the background, automatically mutual-excluded with the nightly job; a 5-minute cooldown guards against double triggers, and the page's "last collected" timestamp tells you when it finishes
Versioned incremental migrations for the platform store — a new dbpilot_schema_version history table plus embedded migration scripts (V{version}.{seq}__{description}.sql) applied automatically on upgrade. Zero-touch upgrades, no manual DDL; all future schema evolution rides on this mechanism
Table-level fault tolerance for fragmentation scans — a single huge table timing out now only drops that table's fragmentation value (shown as -); the rest of the database's already-collected rows survive. Usage data and fragment scanning are decoupled

🐛 Fixed
Concurrent SQL-template writes failed (unique-key violation on dbpilot_sql_template) — a check-then-insert race between the TopSQL and slow-log/sampling jobs, guaranteed to fire when multiple hosts share a platform store. Both paths now use dialect-native atomic upserts (range locks on SQL Server, ON CONFLICT on PostgreSQL/SQLite, ON DUPLICATE KEY on MySQL); conflicts are silently absorbed by the database
SQL Server platform-store initialization failed with error 2716 — the migration history table mistakenly used DATETIME(3) (the type takes no precision argument); corrected to DATETIME2(3) with a regression test locking the pitfall
Connection wizard falsely flagged rdscore as inaccessible — Alibaba Cloud RDS enforces CONNECT DENY on its internal management database, which no grant can lift. It is now treated as a system database (excluded from the database list, connection checks and collection); self-hosted SQL Server is unaffected

🔧 Improved
MySQL connection test now checks business-schema visibility — accounts holding only server-level grants get a GRANT SELECT hint at onboarding instead of silently missing data later
Index Usage page shows the last-collection timestamp inline (the completion feedback for async recollect)
Deadlock graph legend redesigned as glyph + text mapping (node shapes, edge colors and styles at a glance)

📦 Upgrade notes
Reference the DBPilot 0.5.5 metapackage, or combine engine packages with DBPilot.AspNetCore
Upgrading from 0.5.4: bump the version and restart — the new column and migration history table are applied automatically by startup migrations (works across all four platform-store engines: SQLite / MySQL / PostgreSQL / SQL Server)
Tip for large databases: after onboarding, raise the query timeout in the instance's advanced settings (fragmentation scans benefit most)
Full Changelog: v0.5.4...v0.5.5

v0.5.4

Choose a tag to compare

@SkyChenSky SkyChenSky released this 22 Sep 03:08

.NET 8 support · Connection-test permission guidance · Fixes realtime blocking on Alibaba Cloud RDS

✨ New
.NET 8 support — all NuGet packages now dual-target net8.0 / net10.0, lowering the consumer requirement from .NET 10 to .NET 8
Connection-test permission checks — the test wizard now probes database-level access: on SQL Server it verifies the account's per-database user mapping (VIEW ANY DATABASE only makes databases visible in the list, not accessible); on MySQL it checks business-schema visibility. Missing grants are listed by database name with ready-to-run fix scripts
Collection failure guardrails — per-database collection failures now log a Warning; when every target database is inaccessible the collector fails loudly with fix instructions instead of silently recording an empty batch

🐛 Fixed
Realtime blocking failed on Alibaba Cloud RDS — RDS's security hardening strips certain columns from system DMVs, so the blocking page failed as soon as a real block appeared. The provider now probes column availability per instance and picks a compatible query path (2008–2012 fully supported)
Slow-log duration ratio rendered as a long float on SQLite platform stores (e.g. 86.2745098%) — SQLite's CAST AS DECIMAL performs affinity conversion but no rounding; the dialect now uses ROUND (5 sites)

🔧 Improved
Duration values display with units everywhere (1,234ms, auto-switching to 12.3s above 10 seconds)
Truncated table cells reveal full content on hover (SQL previews, plan hashes, index names, read/write ratios, and more across all pages)
Top SQL ratio columns re-sized to fit their data shape — long content no longer wraps
Refresh buttons added to Overview, Instance Management, Index Usage and Missing Index pages
The DBPilot metapackage is now pure (no empty assembly payload)

📦 Upgrade notes
Reference the DBPilot 0.5.4 metapackage, or mix and match DBPilot.SqlServer / DBPilot.MySql / DBPilot.PostgreSql / DBPilot.Sqlite with DBPilot.AspNetCore
No breaking changes from 0.5.3 — bump the package version and restart the host
Recommended: re-run Test connection on existing instances — the new permission checks will flag any database-level grants required for index diagnosis

Full Changelog: v0.5.3...v0.5.4

v0.5.3

Choose a tag to compare

@SkyChenSky SkyChenSky released this 21 Sep 03:41

v0.5.3 (2026-09-19)

Full release of all nine packages: DBPilot metapackage + AspNetCore/Common/Core/Storage + SqlServer/MySql/PostgreSql/Sqlite.

  • Metapackage purification: the DBPilot metapackage no longer ships an empty
    assembly (IncludeBuildOutput=false); the package contains only icon/README
    and the five-package dependency set — a single reference pulls in the suite
  • Fixed frontend build failure after cloning the source: four imports of
    api/topsql renamed to topSql to match actual file-name casing (vite runs on
    case-insensitive Windows file systems, but vue-tsc -b fails with TS1261)
  • Added setup.bat one-shot first build: frontend build + compile + sample
    appsettings generation, with an optional argument (MySql/Sqlite/PostgreSql)
    to choose the host
  • README revisions in both languages: hash.cs guidance corrected (must be
    placed in a directory without a project file), password-change section
    rewritten as three steps, quick-start and source-debugging steps numbered,
    sample package version bumped to 0.5.3