1. Home
  2. Docs
  3. Documentation
  4. Release Notes
  5. VersionSQL 1.7 – Performance

VersionSQL 1.7 – Performance

Here’s a shiny new release of VersionSQL for you! ✨

This time around we’re cranking out some serious quality-of-life improvements. Less waiting around while the computer thinks, less sifting through haystacks of database objects, and less hunting through dialogs for stray checkboxes.  I hope these changes make your day-to-day even easier.

(You can download it right now!)

Also trying out long-form release notes. Could just say “bug fixes and performance improvements” like everybody else, but this seems more fun. Be sure to drop me a line and let me know what you think.

If you’d rather have the highlights in bullet-point form, click here for a concise changelog.

Without further ado, let’s take a look at what 1.7 brings:

Key Updates

Performance Improvements

🚀 Significantly speedier scripting!

Not everyone uses Microsoft sample databases day-in and day-out. Many businesses have hulking, ancient databases that nobody would dare to enumerate. Sometimes you print their diagrams out on the marketing department’s large-format printer and hang them on the wall to scare away new hires. Naturally, these things take a while to scan for changes. More so if you’re a piece of software that’s been taught all your life to scan each object individually before moving on to the next, like VersionSQL was. Time to level up your game, software! VersionSQL now scripts objects in bulk. Novel, eh? Definitely not SQL 101. To be fair (to me) there is a good bit of complexity required behind the scenes, but that’s all taken care of now. And guess what – if you do run AdventureWorks at the office, that’s faster now too.

That’s all well and good, but just how much faster are we talking? Glad you asked! We (the beta testers and me) figure it’s between 2x and 10x faster – about 5x faster on average, with larger databases seeing more benefit than smaller ones. Just take a look at the difference in this small database:

Before

After

There are 119 objects in that database, and committing it is 2.5x faster with the new scripting engine. Now just imagine how much better it will be on your database! 🏎️

 

Heartfelt thanks to everyone who tested the newer scripting engine in 1.6.2 while it was scarily marked Experimental 🧪  Especially Ian S. for all the detailed bug reports and system load info!

Backwards Compatibility Note: As a byproduct of this new scripting engine, table scripts now list clustered indexes before nonclustered indexes, instead of purely alphabetically. Some tables may be listed as Modified in your next full-DB commit as a result. If this causes a problem, first please send me an email describing what’s going on, then switch back to the old scripting engine by unchecking “batch scripting for performance” in VersionSQL Menu -> Settings -> Advanced.

 

🏇 Faster change detection and file writing

Disk I/O speed got you drumming fingers on your desk? You might think it’s time to break out the pocketbook: NVMe, RAID, and 10k RPM SCSI drives are all shiny Ferrari solutions to a mundane problem. But man, I like to tinker. Tweaked the buffer sizes, added some system file caching hints, replaced a few file seeks with a patterned directory scan, and binned multiple async reads and writes into a fixed number of background threads.

Checking scripts for changes and scripting files out to disk are now each about twice as fast, depending on your hardware (kicks things up a notch on regular SSDs and fast spinning platter drives; not so much on ramdisks and NVMe drives nor molasses-class laptop and archival platter drives 💾).

Comparing and writing 1,000 changes to slow flash memory.
I would show a before-and-after here, but it’s literally just the dialog sitting on “checking for
changes” for 40 seconds then spitting out file names as quickly as possible.  *yawn* booooring.

 

🏃‍♂️ Quicker git commit

Trimmed out some unnecessary overhead when building the git commit. If you have a large git repository, you’ll see up to a 30 second time savings every single commit. But it’s totally cool if you want to pretend the delay is still there as an excuse to go grab more coffee ☕

Friendlier Commit Progress Window

📜 Streamlined report

Imagine yourself sitting in a plush, red, fold-down seat, a half-empty double-jumbo box of popcorn in your lap, eyes peeled for a post-credits teaser hinting at the next Marvel flick. That huge list of names scrolling by imbues one with a sense of awe, doesn’t it? The sheer scale of the undertaking! Also inspires feelings of… impatience. C’mon, get on to the good part! Similarly, a near-endlessly scrolling list of database object names really gives you a feel of how large and untamed your database is… without informing you one tiny bit how long this process is going to take.

Behold, progress indicators! 🎉 Now VersionSQL summarizes what it’s doing at a usefully high level, counting the objects instead of listing them one by one. For operations not easily counted (or where it’s much faster if they’re left uncounted), there’s a nice spinner to at least let you know it is still hard at work.

(I really want to put another GIF here, but it’d just be a combination of the previous ones. So do me a favor and scroll up a bit, would you please? Thanks!)

 

🎬 Cancel button more responsive

There’s nothing more frustrating than when a computer ignores you. I clicked that button dagnabit, what are you even doing in there? And unresponsive cancel buttons are even worse – you just want the computer to stop doing anything. This isn’t a freight train; it should be able to turn on a dime! Well, I hear you. I went over each and every step in the process with a fine-toothed comb to ensure they drop everything they’re doing when you click that cancel button. For things that are freight trains (e.g. large queries), VersionSQL now returns control to you immediately while the operation finishes sorting out how to cancel itself on its own time.

 

⚙️ Progress dialog more responsive

Roughly 98% of the steps required for a commit operation now run on background threads, leaving the commit progress window as alert and attentive as my 5-year-old daughter when I’m trying to sneak open the container of Oreos 👧

There are a couple of holdouts still: A few Subversion operations are tightly bound to the UI thread (just in case they need to pop up an auth dialog). It’d take a partial rewrite of the client library to loosen their hold, so chalk that one up under “maybe someday.” Also, loading tens of thousands of checkboxes into the commit message window freezes the window for a few seconds… but I have a plan to flip that interface on its head in the noncommittal future, so stay tuned.

Normal Updates

Self-signed Certificate Prompt

No paid SSL/TLS certificate for your intranet-hosted version control server? Corporate firewall MITM’ing all your web traffic? No problem! (Well, no technical problem.) VersionSQL now looks to you for reassurance instead of flatly refusing to eat its peas. Any question about a certificate’s validity will pop open a dialog with pertinent information, asking whether you really trust the certificate issuer enough to place your precious SQL in its care.

VersionSQL also now supports the sslVerify=false gitconfig setting, just in case you value convenience over caution. No judgment here.

Many thanks to Justin M. for sticking his finger in the dyke while I coded this up.

Advanced object Filtering

Developing within an ERP database (or some other large off-the-shelf system) is kind of like renting a room from an ad on the college pinboard. At first, you’re careful to keep your stuff separate and organized, but a few years and a few chapters of Marie Kondo later you’re checking object by object for Sharpie’d initials and calling ex-roommates to figure out if it was yours or their copy of Mario Kart in the couch cushions. Wouldn’t it be easier if you could write a filter to automatically pull out all your stuff?

Well, VersionSQL isn’t going to track down that guy who worked here six years ago, but it will (with a bit of guidance) filter down commits to the objects he so helpfully prefixed with his initials. You can also set it up to completely ignore all the not-mine stuff owned by the commercial database you’re living in, provided it has any kind of naming scheme. One step closer to tidy 😊

Thanks to Didrik P., Eric N., Isaac A., and Jeff R. for requesting this feature. I hope it brings you joy.
Read more about blacklisting and whitelisting objects in the ignore pattern documentation.

Settings Search

Wow, there’s a lot of settings! More are being added with every release. How do you remember where everything is? VersionSQL now lets you ignore the question and just search for stuff like everybody else does nowadays. Seriously, when’s the last time you organized your Start Menu? Probably Windows XP.

Bugfixes

🐜 Availability Group detection no longer logs permission errors when users with limited permissions access a non-Availability Group server

🐛 Errors encountered while loading context menu items now display inline rather than in a dialog

🦋 MSI silent installation no longer opens the thank-you page (thanks Jeff!)

🐝 Several progress dialog graphical glitches are resolved (specifically: flickering, jitteriness, and that pesky horizontal scrollbar)

🐞 Windows filesystem reserved words are now escaped (thanks Alon!)

Wrapping Up

That’s it for this episode.  Thanks for reading!  Thanks especially to everyone who beta tested – you guys make my inbox brighter.

Just in case your scroll wheel is tired, here’s that download link again: Download VersionSQL

As usual, send all bug reports, reviews, complaints, well-wishes, holiday cards, and sticker requests to [email protected].

Like the release notes?  How ’bout a high five! 🖐 (c’mon, don’t leave me hanging here…)

Was this article helpful to you? No Yes

How can we help?