Release Notes: Workbench


  • 8786. Changed vernacular from “license key” to “activation key”.
Release Notes: Workbench


  • 8784: Added new action pane item for `mrcrop sqlid`.
  • 8783: Made mrcrop subcommand man pages more consistent.
  • 8771: Added new `mrcrop sqlid` utility.
Release Notes: Workbench


  • 8780: Updated “Mastering Oracle Trace Data” book content.
Release Notes: Workbench


  • 8777: Fixed a bug that prevented the command utilities from printing a backtrace on Linux.
  • 8776: Command utilities now print more helpful diagnostic information upon abnormal termination.
  • 8775: Fixed a bug where nested .rc files could cause mrskew to abnormally terminate.
Release Notes: Workbench


  • 8774: Fixed a bug preventing mrskew and mrwhen from processing trace files larger than 2GB on Microsoft Windows.
  • 8773: The single environment variable MR_JVM_OPTS supersedes the pair of variables formerly called MRCROP_JVM_OPTS and MRPROF_JVM_OPTS.
Release Notes: Workbench


  • 8770: Fixed a File › Load bug that can occur when selecting both a file and its containing folder.
  • 8769: Fixed a bug that can occur when clicking the checkbox in the files pane header.
  • 8759: Fixed a File › Load dialog bug that could cause .trc files to be grayed out.

Blog Posts Release Announcements

Method R Workbench 9.4

Yesterday, we released Method R Workbench This article is a tour of some of the 50 new application behavior changes.

Command History Scrolling

In Workbench 9.3, it was a pain to try to find a given report in the output pane. For example, do this:

  1. Run the “Time by line range” action upon a 1,000-line trace file, with 1- as the range. The output will be 1,000 lines.
  2. Run the “Duration by call name” action upon the same file. The output will be about 15 lines.
  3. Run the “Time by line range” action again. Another 1,000 lines.
  4. Now, find the “Duration by call name” report, which now is buried between two 1,000-line reports.

This was a fun design problem. My initial idea was a “table of contents” dialog. It would list the actions that had been run, and then clicking on one would scroll the output pane back to the first line of that action’s output. But I hate dialogs.

It sucks when you hate your own best idea. But that’s what teams are for. Jeff proposed a far better idea: simply link the command history feature with the output pane. So now, finding that “Duration by call name” report is as easy as:

  1. Arrow up and down through the command text field until you get to the action you want to the report for. Then, presto!, there’s its report in the output pane.

We want our software to feel like “PFM” (pure magic). This design element is one of the opportunities you seek to fit that description. It wasn’t easy to implement, given that the size of the output pane is variable (View › Zoom), but that’s our problem to worry about, not yours.

CSV for Importing into Excel

One of the stories I like to tell was when we helped a big company fix an overnight batch job duration problem by exporting our files panel content into CSV that you can copy and paste into Excel. As a result of that engagement, we added a new runnable action called “Details by file, for importing into Excel”. It used our mrls utility. The problem is, mrls is slower and less accurate than mrprofk, which creates the information for the files pane.

There’s no need to be slow and wrong when you can be fast and right. So we eliminated the action in the actions pane, and we added a shift-click feature to the existing “Copy selected file rows to output” button. Now it’s the “Copy selected file rows to output (shift-click for CSV)” button. It’s both accurate and blazing fast.


Clearly, most of the information transfer from the Workbench application to your brain occurs through your visual channel. But one day in July 2020, one of our customers said this:

Running mrskew is so fast and the resulting display update so fluid I often cannot even tell if it ran…

After studying the problem a little bit, we decided to begin to use sound as an additional channel for transmitting information from our Workbench application to your brain. Now, when you run a command that might take a while, you’ll get a little thumbs-up or thumbs-down sound when it’s finished. Now you can look away from the screen and still know definitively that your action has finished. We added that feature in August 2020, in Workbench 9.1.

One thing had been bugging me, though: the sounds didn’t really fit in with the other sounds my system makes. On macOS and Windows, there’s actually a system settings option that allows you to specify an alert sound for your system. You get to choose which sound you want, how loud it should play, and which device it should play on. Prior to 9.4, our Workbench application didn’t respect those settings. In 9.4, we do.

It’s nice to fit in.

Undo and Redo

We worked long and hard on undo and redo in this release. Prior to 9.4, undo was restricted to the files pane. You could undo box-checking, and you could undo load and unload operations. We found the feature confusing to use, though, for a variety of reasons. At the same time, we didn’t offer any undo features in the command text field (the text field at the top of the output pane).

So, in 9.4.1, we’ve added good old-fashioned undo and redo with ⌘Z and ⇧⌘Z (Ctrl-Z and Shift-Ctrl-Z on Windows) in the command text field and both the filter fields.

Move to Trash

Sometimes in our Workbench workflow, we come across files that we know we’re never going to want to load again. Those are the files with zero durations, or files with trace level 0 (see our new “Level” column, which reveals each file’s Oracle tracing level). Going to the filesystem browser to delete those files is tedious and dangerous—I hate look-here, but click-there workflows. It’s just easier to select the files you don’t want and delete them, with File › Move to Trash (it’s Move to Recycle Bin on Windows), right in the Workbench application.

It may sound dangerous, but don’t worry, Move to Trash just moves items to your trash can. If you make a mistake, you can still retrieve them.

If you don’t see the Move to Trash (or …Recycle Bin) option in your File menu, then you should update your JDK version to 9+. You can see the version you’re using by clicking Help › Diagnostics.

Label Expressions

In my August 2023 article called “A Design Decision,” I talked about an enhancement that lets you use expressions in --group-label and --select-label values. What we didn’t realize at the time was that, in those expressions, mrskew wouldn’t let you refer to functions you’d defined yourself in the mrskew --init block. In 9.4.1, we’ve fixed that problem.

It’s a neat feature. We use it now in our three histogram RC files (disk.rc, p10.rc, ssd.rc) to make our code more elegant. The ability to use --group-label='label(0)' is the trick. I expect our users to push the feature even harder. See, for example, Jared Still’s amazing --init blocks on Slack.

And More…

In the past few years, we’ve been increasingly required to carve through hundreds or thousands of trace files. We’re talking so many files that referring to “*” on the command line overfills the command line buffer. So each release in 2023 and 2024 has had some features to make managing lots of trace files easier. You can see all about what we’ve done at our Workbench Release Notes page.

I hope you enjoy!

Release Notes: Workbench


  • 8766: Fixed a bug causing the output pane content to not survive a Workbench upgrade.
  • 8765: Moved the Clear Application menu item from the View menu to the Edit menu. Moved the Clear Output item into the group of Clear… items in the Edit menu.
  • 8762: Relaxed the spacing around the edges of the output pane.
  • 8761: Relaxed the height of the command text widget.
  • 8760: Shift-click upon the checkbox in the files pane header row now inverts the selection.
  • 8758: New Edit › Clear Command History menu option.
  • 8753: New mrskew –top=all and –top=none options.
  • 8750: Extended the application’s undo/redo feature to cover edits in the command text widget, the action filter, and the file filter.
  • 8749: Moved “Save Output” menu item from the “File” menu to the “Edit” menu, so that now the option is proximal to the Cut, Copy, and Clear functions. Also re-ordered the buttons on the application.
  • 8747: Changed mrprof HTML report title from “Profile” to “Method R Receipt for Response Time™”.
  • 8744: Changed the default Z value to 0.01 seconds for island-related actions.
  • 8743: Moved Select menu options into the Edit menu, which is consistent with other application menus.
  • 8742: Fixed a bug causing Workbench to print a partial “Load files” report into the output pane when the File › Load… dialog has been opened and canceled.
  • 8741: mrskew disk.rc, p10.rc, and ssd.rc files are now cleaner and more maintainably written.
  • 8740: Improved the option order for the LIO and PIO count actions.
  • 8739: Fixed a bug preventing mrskew –group-label and –select-label expressions from accessing functions defined in the –init block, and that prevented the proper processing of UTF-8 strings in the –group-label and –select-label options.
  • 8737: Removed the mrls utility from the distribution. The Workbench application now performs all mrls functions more accurately and more efficiently than mrls did.
  • 8736: Removed the “Summary by file” action, because our “Copy selected file names to output (shift-click for FQPN)” button performs the same function more accurately and more efficiently.
  • 8735: Removed the “Details by file, for importing into Excel” action. The “Copy selected file rows to output (shift-click for CSV)” button performs the same function more accurately and more efficiently.
  • 8733: Fixed a bug with the checkbox column header’s tool tip in the files pane.
  • 8732: Fixed a bug with the tool tip on empty (normal) Status column values.
  • 8727: Fixed a bug causing Shift-Click to work improperly sometimes in the files pane.
  • 8725: Workbench now uses the system’s proper alert sound, played upon the proper alert sound output device, at the proper alert volume.
  • 8723: The File › Load operation now opens a more functional file open dialog on macOS.
  • 8721: Workbench now sounds an audible warning when you press Up at the top of your command history, or Dn at the bottom.
  • 8718: When focus is in the Workbench command text widget, you can use Up/Dn to scroll through your command history. Opt-Up/Dn will now move your cursor to the start/end of your command. Cmd-Up/Dn will move your cursor to the top/bottom of your command history list.
  • 8717: Clear Application now clears Undo and Redo.
  • 8710: Clear Application now clears the command text history.
  • 8708: Workbench now lets you open an HTML profile report by clicking on a value in the Version column.
  • 8707: HTML profile report exposes new Oracle tracing level attribute.
  • 8706: Fixed a problem where the Workbench SQLite database could have duplicate FILE rows.
  • 8704: Throughput numbers printed at the conclusion of a file load operation are now rounded, not truncated.
  • 8701: Modified an error message to suggest using mr1011 instead of Profiler
  • 8698: Workbench now processes WAIT lines created by Oracle Database 23c.
  • 8697: Workbench now replaces Action parameters even if an Action’s command text is modified.
  • 8696: Workbench now restores command execution history upon startup.
  • 8695: Workbench application now automatically cleans its file cache upon startup.
  • 8694: Workbench has a new File › Move to Trash feature that allows you to clean up your filesystem through the Workbench application interface, on systems using JDK 9+.
  • 8693: Exit codes ($? values) and stderr vs stdout decisions are now more consistent with good *nix programming standards.
  • 8692: Fixed a problem that occurs when a file is loaded, moved to another folder, and then reloaded.
  • 8691: Workbench now exposes the trace-level of each input file in the files pane.
  • 8689: Fixed a bug where loading duplicate files resulted in mrprof errors.
  • 8688: Command output window now scrolls in sync with command text widget scrolling.
  • 8684: Fixed a problem with spacing in the output pane when using the “Copy selected file rows to output” button.
  • 8683: New “Copy selected file names to output” button makes it easy to list the names of all the currently selected files.
  • 8682: The Workbench application no longer lists file names at the tail of the command text in the output pane. The list of files is already available using either a tool’s –verbose option or the new “Copy selected file names to output” button.
  • 8681: Deleted the “Details by file, for importing into Excel” action, because our “Copy selected file rows to output” button performs the same function more accurately and more efficiently.
  • 8678: Exposed debugging interface to all of the mrcrop man pages.
  • 8677: mrcrop command line option semantic errors are easier to identify
  • 8672: Workbench now prints MB processed figure to the output pane when an action completes.

Blog Posts

Method R Workbench Party Notes 2023-12-01

If you had a chance to join my Workbench Party today, thank you for your time with us. If not, then I hope to see you next time.

Here are a few links that should help fortify what we covered:

  1. “Solving the Unsolvable Performance Problem” white paper (2 pages)
  2. Method R Software workflow (1:54)
  3. Method R software
  4. Introduction to Method R Trace (2:26)
  5. Video introduction to Method R Workbench (5:34)
  6. Demo: airport OS with five timeouts per hour (4:58)
  7. Method R Workbench video tips
  8. Installation instructions for Method R Trace extension for SQL Developer
  9. Installation instructions for Method R Workbench
  10. Documentation pages for all Method R software tools
  11. Method R on Slack
Blog Posts

Coherency Delay

Today, a reader of How to Make Things Faster asked a question about coherency delay (chapter 47): How does coherency delay manifest itself in trace files?

My own awareness of the concept of coherency delay came from studying Neil Gunther’s work, where he defines it mathematically as the strength β that’s required to make your scalability curve fit the Universal Scalability Law (USL) model.

Such a definition can be correct without being especially helpful. It doesn’t answer the question of what kind of Oracle behaviors cause the value of β to change.

think that one answer may be “the gc stuff.” But I’m not sure. One way to find out would be to do the following:

  1. Find a workload that motivates a lot of gc events on a multi-node RAC system.
  2. Fit that configuration’s behavior to Gunther’s USL model.
  3. Run the same workload on a single node.
  4. Fit that configuration’s behavior to USL.
  5. If the value of β decreases significantly from the first workload to the second, then there’s been a reduction in coherency delay, and there is a strong possibility that the gc events were the cause of it.

That may not feel like a particularly practical proof (it would require a lot of assets to conduct), but it’s the best proposal I can think of here at the moment.

The biggest problem with executing this “proof” (whether it really is a proof or not is subject to debate) is that there’s probably not much payout at the end of it. Because what does it really matter if you know how to categorize a particular response time contributor? If a type of event (like “gc calls”) dominates your response time, then who cares what its name or its category is, your job is to reduce its call count and call durations.

(Lots of people have already discovered this peril of categorization when they realized that—oops!—an event that contributes to response time is important, even if the experts have all agreed to categorize it using a disparaging name, such as “idle event.”)

Whether the gc events are aptly categorizable as “coherency delays” or not, my teammates and I have certainly seen RAC configurations where the important user experience durations are dominated by gc events. In fact, our very first Profiler product customer back in roughly the year 2000 was having ~20% of their response times consumed by gc stuff on a two-node cluster back when RAC was called Oracle Parallel Server (OPS).

We solved their problem by helping them optimize their application (indexes, SQL rewrites, etc.), so that their workload ended up fitting comfortably on a single node. When they decommissioned the second node of their 2-node cluster, their gc event counts and response time contributions dropped to 0. And another department got a new computer the company didn’t have to pay for.

The way you’d fix that problem if you could not run single-instance is to make all your buffer cache accesses as local as possible. It’s usually not easy, but that’s the goal. And of course, RAC does a much better job of minimizing gc event durations than OPS did 23 years ago, so globally it’s not as big of a problem as it used to be.

Bottom line, it might be an interesting beer-time conversation to wonder whether gc events are coherency delays or not, but the categorization exercise is only a curiosity. It’s not something you have to do in order to fix real problems.