Monitor BigFix SQL Indexing Job

Wanted to share something I ran into recently in case it saves someone else a debugging session.

The default "BFEnterprise Full Database Index Reorganization" SQL Agent job was reporting Succeeded every night, no exceptions. Meanwhile, BESAdmin.exe /checkdbindexfrag showed one index sitting at 98% fragmentation for weeks.

Turned out the job was hitting Lock request time out period exceeded on a handful of tables (FIXLETRESULTS, VERSIONS, EXTERNAL_OBJECT_DEFS were the recurring offenders in my environment), catching the error internally, and moving on to the next index — all while the job's overall status stayed green. The only way to actually see it was reading the message column in sysjobhistory line by line, not just checking run_status.

Once I confirmed the pattern was recurring rather than a one-off, I put together:

  • A PowerShell script that checks the job's last-run output for that specific error and writes a small rolling status log

  • A Scheduled Task that runs it nightly

  • A BigFix Analysis (Relevance + a few properties) that surfaces the result, so I don't have to remember to go check SQL Agent manually

Full writeup with the working script, the exact BESAdmin commands, and the Relevance (including a few rounds of debugging I had to go through to get the string-parsing right) is here:

https://www.linkedin.com/pulse/bigfix-monitor-sql-reindex-job-brad-sexton-nmmme

Curious if anyone else has hit this same lock-timeout pattern on their reindex job, or has a different approach to monitoring it. Happy to share the raw script directly here too if useful.

2 Likes

FYI from an MS SQL POV there is no error, the lock simply could not be acquired in the provided interval. All raised exceptions are logged with a suitable return code.

There are a variety of issues that can block lock acquisition. There is a reason why MS put online utilities in MS SQL Enterprise. :slight_smile:

Note fragmentation levels can be very high at low page counts due to “statistical reality”. The page thresholds we use can be seen in the script. You should apply the same thresholds in any analysis.

1 Like