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

How Did You Make mrskew 20× Faster?

A couple of years ago (June 30, 2020), we released Method R Workbench version It had 113 new features and bug fixes. One of those features was case 7800: “mrskew is now 10–20× faster than before.”

We’re prone to sneaking in performance improvements like that. It’s because we, too, use the software we sell, and we don’t like waiting around for answers any more than you do.

mrskew, in case you don’t know, creates flexible, variable-dimension profiles. It’s a skew analyzer for Oracle trace files.

…A what?

It’s a tool that can query across trace files (thousands of them, if that’s how many you have) and answer questions like these:

  1. What kinds of calls dominated the response time of your user’s experience? Imagine for the sake of this example that the answer is “read calls.” How much time did read calls take? How many read calls did your program make?
  2. Were all your read calls the same duration? Or did some take longer than the others? How much time could you save if you eliminated the slowest 10,000 read calls?
  3. How many blocks did the longest read calls read?
  4. What are the file and block IDs of the longest read calls?
  5. Are the slowest read calls associated with a particular file?
  6. Are they associated with a particular SQL statement?
  7. On what line of what trace file can you find information about your longest read call?

Our mrskew tool can answer questions like these and more.

Here are the commands to do it. Don’t let these scare you. You can summon any one of them (or any of 30+ others) with just a click, in our Method R Workbench:

  1. mrskew *.trc
  2. mrskew --name='read' --rc=p10.rc *.trc
  3. mrskew --name='read' --group='"$p3"' --gl='"BLKS/READ"' *.trc
  4. mrskew --name='read' --group='"$p1:$p2"' --gl='"FILE#:BLOCK#"' *.trc
  5. mrskew --name='read' --group='"$p1"' --gl='"FILE"' *.trc
  6. mrskew --name='read' --group='"$sqlid"' --gl='"SQLID"' *.trc
  7. mrskew --name='read' --group='"$base:$line"' --gl='"FILE:LINE"' *.trc

Now, imagine trying to ask 2GB of trace data all these questions. Without mrskew, it would probably take you a day or more to fish the answers out of your trace files (don’t bother looking in AWR or ASH; they’re not there).

A Workbench 8 mrskew execution on 2GB of input takes about 4 minutes. That’s about half an hour to run all seven commands. That’s pretty good compared to a day or two of fishing.

A Workbench 9 mrskew execution on the same input takes only about 12 seconds. That’s less than 2 minutes to answer all the questions I’ve posed here. That’s remarkable.

2019 MacBook Pro (Intel)mrskew *.trc (2GB)
Method R Workbench 8240 seconds (4 minutes)
Method R Workbench 912 seconds
mrskew execution times before and after the Method R Workbench 9 upgrade.

So, an interesting question, then, might be, “How did you do that?”

Well, that’s easy: a long time ago, I hired Jeff Holt.

How did Jeff do it?

Simple. He rewrote mrskew in C.

In Workbench 8, mrskew was a Perl program that I had written in 2009. Perl is admittedly slow, but I was interested in having a program that users could interact with using Perl’s full expression syntax.

mrskew worked really well, and we used it a lot. But it always felt weird that it was so much slower than our other utilities that do even more work (like mrprof). So Jeff, in his spare time, investigated whether he could rewrite mrskew in C. It was no small feat, given that I insisted upon keeping the full Perl expression interface.

One day he surprised me. The new C version of mrskew was passing all our automated tests and we could probably ship it now. I asked him how much faster it was. He said about 20×.

I’m used to this kind of thing with Jeff by now. But still.

The result of Jeff’s investigation is that now we have a skew analysis tool that works just as fast as our other outrageously fast tools, even when you’re battling data by the gigabyte. Today, mrskew is a standard feature of pretty much every performance improvement project we hook into, and we’re grateful that it doesn’t make us wait a long time for the answers we need.

To get a better understanding of what skew is and why it’s important, see chapter 38 of How to Make Things Faster. If you’re interested in more detail about mrskew, visit our mrskew manual page.

Release Notes: Workbench


  • 8671: Workbench now respects the “report_output_font_name” GUI property in ~/.method-r/workbench/version/
  • 8668: ERROR lines now populate the $tim, $tim1, and $tim0 mrskew variables.
  • 8637: Fixed a bug causing the command text area not to resize properly when zooming.

Release Notes: Workbench


  • 8661: Fixed a bug where Workbench on macOS would not load a .trc file that is dragged onto the application icon.
  • 8656: Fixed some “Show example output” previews to match what a given action’s output will really look like.
  • 8654: Replaced “Duration by database block address (DBA) for /db.*read/ calls” and “Duration by database file ID for /db.*read/ calls” action labels with more general “Duration by p1 for a given call name pattern” and “Duration by p1:p2 for a given call name pattern”. This will make it easier for people to extend these actions to other calls.
  • 8652: Enhanced launcher logging and new content at makes installation and troubleshooting easier.
  • 8648: Fixed a bug causing the Check for Updates… download progress dialog to truncate the bottom third of the “Cancel” button.
  • 8645: Updated “Mastering Oracle Trace Data” book to reflect new spec for –group-label.
  • 8641: Made the “Duration by SQL ID, SQL text, and call name” report a little easier to read when the input trace is missing a PARSING IN CURSOR section.
  • 8640: Fixed a bug causing the “Duration by SQL ID, SQL text, and call name” action to malfunction.
  • 8639: mrskew now exits with an error code if any input file cannot be opened
  • 8634: mrskew now allows an expression value (not just a string value) for –group-label and –select-label.
  • 8633: Workbench now ships with our new “Tracing Oracle” book included; access it by clicking the button with the red-stripe book icon.
  • 8628: Workbench now runs natively on Apple silicon, about 3× times faster than on x86_64.
  • 8624: Confirmed that Method R Workbench application runs fine on Rosetta.