The power of Omniscope on the desktop is due in part from its unique client-side in memory architecture. All the data in the file is held in the memory of the local machine, at maximum granularity and with aggregated transforms, simultaneously. As files get larger in terms of row and column counts, the RAM required on the local machine increases. As computers gain ever more RAM and processing power at ever lower prices, Omniscope-based solutions become ever more compelling regardless of the size of the data sets. However, some scaling and performance considerations should be borne in mind when deploying Omniscope in situations where very large data sets will be used.
Omniscope is a locally-installed in-memory application with no inherent data volume limits in terms of record or cell counts (cells = rows x columns) in the application itself. If you have sufficient memory addressing capacity in your operating system (64-bit systems have much more than 32-bit systems), plus sufficient RAM and fast processors, the upper limits of Omniscope files extend to multi-million record data sets on 64-bit systems running 64-bit Java with 2+ GB of RAM. Because reporting/publishing chains may include less powerful 32-bit machines on 'downstream' user desktops, reporting/publishing solutions involving very large data sets may require various optimisation techniques and tools. The sections below discuss options and issues related to Omniscope scaling and performance in detail:
Managing scaling & performance in Omniscope
see also
Highly-scalable Omniscope-based solutions should be organised as a 'waterfall', where the most RAM-intensive tasks are done on servers or the desktops of a few power users, such that the resulting 'downstream' report files are less RAM-intensive and perform well on the standard desktops of the downstream users. In a typical, fully-automated Enterprise-based, 'waterfall' implementation, a set of Omniscope .IOK/.IOM files are maintained as single table (and soon multi-table) data marts refreshing directly from data warehouses running on the same powerful 64-bit servers with abundant RAM. Power users at the heads of the reporting/workflow chain can use smaller, desktop versions of these .IOK/.IOM files which have the 'data mart' files (not the data warehouse SQL reporting views) as their linked source and which automatically refresh from the larger 'data mart' files kept on the server. The power users in turn re-configure their own smaller .IOK/.IOM files to generate/refresh yet smaller, more specialised reporting files for onward distribution to standard desktops. Using Omniscope Professional .IOK/.IOM as source files, even smaller reporting subsets or dashboards can also be generated as universally-accessible Flash DataPlayers for interactive web page display and embedding in documents (see below for information on the data capacity limits of DataPlayers).
Due to inherent limitations in Flash, .SWF DataPlayers will always have much lower capacity for data in terms of record or cell counts (cells = rows x columns) than does a highly-scalable, locally-installed data analysis, management and reporting solution like Omniscope. In general, DataPlayers can contain at least 10,000 records (rows), but various factors specific to the data can affect performance and impose lower limits on record count. We are re-writing the Flash generatring code in ActionScript 3, and expect both scaling and performance improvements in DataPlayers soon. Smaller data sets, aggregations (e.g. daily data rather than hourly) or defined subsets (Named Queries) from larger Omniscope .IOK files can be automatically converted to DataPlayer 'dashboards' according to a routine schedule, or on-demand using personalised XML data sets delivered to the Generator from back-end repositories and/or analytical staging 'data marts'.
Managing .SWF DataPlayer scaling & performance
How much data can Omniscope handle? Omniscope software has no fixed upper limit on the number of rows and columns that can be managed in a single file. The effective upper limit depends on the specification of the machine running the Omniscope file, and a complex relationship between processor speed, available Windows and Java memory addressing, data types, density of the columns and the number and type of Omniscope views employed in a given file. Effective Omniscope data volume is principally related to the number of cells (rows x columns), while the effective capacity of a computer (for this purpose) is principally related to the addressing space and amount of RAM in the machine. The best way to determine how large data sets (over 5 million cells) or very large data sets (over 15 million cells) will perform in machines with different amounts of RAM is to try it with Omniscope Professional, or request an Enterprise trial key to use more powerful 64-bit servers with more RAM.
In general, a recent 32-bit computer with:
The less than proportional increase between 1.0 and 2.0 GB of RAM results because the 32-bit Windows/Java addressing limit is reached at about 1.2 GB...well before the 32-bit computer can utilise its full 2.0 GB. Computers running 64-bit operating systems with 2.0 GB or more of RAM will have much higher limits. We have documented files of 8 million rows and 15 columns (120,000,000 cells) running on 64-bit servers with 8 GB of RAM, and some prototyping installations are currently using up to 16 GB of RAM.
A 64-bit version of Omniscope is now available. More info.
If you are dealing with very large data sets, or plan to distribute very large Omniscope report files to desktop machines with 256 MB or less of RAM, you can minimise peak Omniscope memory use by hiding all unused columns (use Edit > Manage Fields > Hide Field). A data field (column) is not loaded into memory until it is actually displayed, so opening views that display many fields, like the Chart View and the Table View, should display only the most useful fields. Fields rarely needed for filtering should be shown in views only on Report Pages for users who need to view and filter by the values in that field. Users who never open these Report Pages will have lower peak RAM requirements and better performance.
Omniscope includes tools to help analyse memory use and optimise very large files for a range of recipient machines. These tools are documented here.
The use of certain views limits scalability and performance in the upper reaches of file size. Omniscope performance in some views is also sensitive to the number of unique category values being used in the view.
Tree View: this view is not currently architected for very large data sets. If you do not need it, you should hide this view so that users are not tempted to try it with very large data sets. If you need to use the Tree View with very large data sets, please contact us for assistance. Future versions will perform better.
Pivot View: currently does not handle very large numbers of categories well, especially on slower processors. If you encounter slow performance, try reducing the number of unique categories used in the Pivot View by setting wider category limits ( 'buckets' ). Future versions will perform better with more unique categories. For more information, see Pivot View Data Truncation.
Back to Scaling & Performance
Beginning with Omniscope 2.4, a 64-bit installer is now provided. From the download page you can now select "Windows (64-bit)" under the section entitled "Also available for". If you choose the full installer, a 64-bit private version of Java will also be installed. Both 64 and 32-bit versions of java can run on the same machine, but both 32 and 64-bit versions of Omniscope cannot run on the same machine at present.
Devices running 32-bit Windows and Java can only allocate for Omniscope use a little over 1 GB of system memory, limiting Omniscope file size to a little over a million records. Devices running 64-bit Windows and Java are limited only by the amount of RAM physically present. It is now quite easy to purchase PCs at consumer prices with say 4 GB or more of memory, although the PC must have a 64-bit Windows operating system installed to use more than about 3 GB.
If you have 64-bit Windows, and also 64-bit Java and 64-bit Omniscope, the following will be unavailable:
If you have 64-bit Windows and you install 32-bit Java and 32-bit Omniscope (use the offline bundled 32-bit Installer for both Java and Omniscope), full functionality will be available, but maximum file size/RAM utilisation will be the same as for 32-bit Omniscope. Note: If you have 64-bit Windows, and you install only 32-bit Java, you cannot install 64-bit Omniscope.
Operating systems and programs both come in two versions; 32-bit (each instruction processed is 32 bits long) and 64-bit (each instruction processed is 64-bits long). Most processors are 64-bit capable now, and most powerful servers have already been converted to 64-bit because of its superior speed and higher memory-addressing limits. Vista is available for the desktop in both 32-bit and 64-bit, and the trend is to convert 32-bit desktop computers to 64-bit as they are replaced over the next few years. Windows XP, 2003 Server and Vista are all available in 64-bit versions. The 32-bit version of Omniscope (which can be installed on both 32-bit and 64-bit Windows) suffers from the Windows-imposed memory limit, effectively limiting the typical Omniscope file size to about 1.2 million records because Windows is unable to provide Omniscope with access to more than about 1 GB of installed RAM. Running 64-bit Omniscope on 64-bit platforms removes this limit (like using longer telephone numbers permits more numbers to be issued) and allows Omniscope to scale up to multi-million record capability on machines with 4 or more GB of installed RAM.
The 64-bit version of Omniscope provides far greater capabilities in terms of data volume than the 32-bit version, but requires a 64-bit processor (almost all now are) and a 64-bit version of Windows (x64 version of XP, 2003 or Vista 64-bit) and also the 64-bit version of Java (installed along with Omniscope 64-bit full install). The 64-bit Omniscope installer is a different installer, but it installs to the same location, and there is no additional licensing implication of running on 64-bit systems. However, existing licenses should be de-activated before, and re-activated after, switching between the 32-bit and 64-bit installation. If you are installing Omniscope on a machine running a 64-bit version of Windows, for example, you will not escape the addressing memory limit in the default 32-bit Java unless you also install and run the 64-bit version of Java bundled as a PVM with 64-bit Omniscope. To switch between 32-bit and 64-bit Omniscope on a 64-bit Windows PC, you must de-activate your license (if you have one), re-install Omniscope using whichever installer you choose, then re-activate your license if your are outside the free trial period.
By default, the 64-bit version of Omniscope limits Omniscope to 75% of physical RAM memory. If you wish to increase or decrease this, read on.
In the Omniscope Program Folder (typically found in Windows at C:\Program Files\Visokio Omniscope ) there is a file called installconfig.properties. Open this file in Notepad (it should look similar to the text below) and look for the line starting #MAX_MEMORY_MB= (highlighted below). By default this line is commented out with a #. Remove the # in front (and leave no spaces at the beginning of the line), and enter the value in MB (e.g. 3500 for approximately 3.5GB) at the end of the line. Save the file with this change. Note: if you change back to the 32-bit version, this line must be commented out again....
# This is an optional manually-specified max memory cap for the Java VM, an integer specifying the ...
# megabytes to allow the JVM. Must be at least 64.
# If unspecified, 75% of physical RAM will be used as the cap.
# MAX_MEMORY_MB=300
Back to Scaling Omniscope
The current version of the Pivot View has a memory use profile that prohibits large datasets and large cell counts. To avoid out-of-memory errors, which can be fatal, the Pivot View automatically truncates the number of rows and/or columns shown when necessary.
When this happens, Omniscope dipslays warning in red below the pivot table such as:
Warning: data has been truncated to show only the first 70 columns and 71 rows. Click for details.
The truncation of the X and/or Y values happens irrespective of sorts, so do not assume the smallest values are truncated first.
To avoid this behaviour:
If you are a power user, you may wish to experiment with disabling this safety check because the imposed limit is conservative. Please save your work before proceeding.
To disable truncation for the duration of your Omniscope session, click the red warning label and choosing Show all values.
To disable truncation permanently, un-tick Tools menu > Advanced tools > Application-wide settings > Misc. > Truncate rows/columns in Pivot view to avoid out-of-memory errors.
You may need to re-open the file.
Back to Scaling & Performance
Omniscope 2.3 introduced new tools to help Visokio diagnose specific memory problems, whether leaks or out of memory errors. A memory leak is when Omniscope's memory footprint increases over time during the same session for no apparent reason, resulting in eventual slow-down (typically over a significant period of time). An 'out of memory' error occurs when an operation is attempted for which there is not enough physical memory in your PC allocated to Omniscope.
To use these tools, you will need Java 1.5.0 b7+ or Java 1.6+. Check your active version of Java in Help > About. Use Java 6 if possible, as the memory tool support is much better. You will also need Omniscope 2.3 or later.
If Omniscope appears to slow down over time, when the data and view complexity is relatively constant, particularly after a long period of use, this is likely to be a memory leak. Please see Memory leak analysis.
There are some datasets that Omniscope can't handle if there is not enough memory available. However, you may discover a fault where Omniscope attempts to request more memory than it should. If this occurs, you can configure automatic generation of memory dump files, which you can send to Visokio for analysis.
Open the Memory Diagnosis tool by pressing Ctrl+Shift+Alt+M or choosing Tools > Advanced tools > Diagnose memory use.
If you have Java 5 (1.5) or earlier you will see a Force out-of-memory button which is used to trigger a memory dump. Naturally occuring out-of-memory errors will also trigger this. You will need to have edited your installconfig.properties file to enable "heap dump on out of memory" prior to starting Omniscope. When you are confident a memory leak is apparent, make sure you have saved your work, and click this button. This will cause a memory dump file (*.hprof) to be created in the program folder.
If you have Java 6, you will see a tickbox Dump memory on out-of-memory. Tick this box to enable memory dumping. You will also see the button Dump memory. Use this button to create an ad-hoc memory dump file - you will be prompted to choose for a save location, then Omniscope will freeze for a few seconds as it generates the dump file.
Note that memory dumps can take up a lot of space on disk, so generate memory dumps sparingly and clean up old files.
Please contact us before attempting to produce or send memory dumps. If you are trying to open 1 million records on a Windows 98 PC with 64 MB of RAM, for example, this will never work. Memory dumps can be large, so please compress using ZIP or another common format. Please be sure to give us the full product version (e.g. "2.3 b231") if you send us a dump file.
Back to Scaling & Performance
A memory leak may be the cause if Omniscope's memory footprint increases over time for no reason. memory leaks are unlikely in production releases of Omniscope, but more likely in daily, alpha or beta releases. If you suspect a memory leak in Omniscope, please follow these steps to verify the leak.
The Memory Diagnosis tool is used to observe the patterns in the Omniscope's memory use. Press Ctrl+Shift+Alt+M in Omniscope to open this tool.
Memory management algorithms in the Java VM used by Omniscope can cause apparently random fluctuations - sudden increases and drops, or small continuous changes. We will use the Extreme GC button (which takes about 8 seconds) to ask Omniscope to free up as much non-essential memory as possible, removing this "noise" from the results. We will leave the Memory Diagnosis window open throughout this analysis.
First you must identify and narrow down the task or group of tasks causing the leak.
Then do the same exact task 3 times (or more) in a row.
After both iterations 2 and 3 (and perhaps further), click the Extreme GC button and note the memory usage. Ignore small changes (1% differences), but anything larger is a potential leak.
Example results:
Not a leak:
- exit and open report page X
- exit and open report page X -> Extreme GC -> 150mb
- exit and open report page X -> Extreme GC -> 150mb +/- approx. 1%
Probably a leak:
- exit and open report page X
- exit and open report page X -> Extreme GC -> 150mb
- exit and open report page X -> Extreme GC -> 160mb
You have to do at least 3 iterations, but may choose to do more. If, for example, you do 5 iterations, and there is a steady increase across several of the iterations, this is an even more compelling proof of a leak.
Note: it is not considered a leak if a task consumes memory which isn't released immediately, but only if the exact same task done repeatedly consumes more and more memory in a memory-confined situation (simulated by Extreme GC). This is why we discount any increase in memory used for iterations 1 to 2.
Please report from inside Omniscope using Help > Error reporting -> Report a problem.
In the report, describe the task you are repeating in precise detail. Include the results of your memory diagnosis.
You may be subsequently contacted to ask for the IOK file (in confidence), so keep a copy of the file in the correct state needed to reproduce the problem (layout, data, settings, etc.). We may also ask for a memory dump, although this is unlikely.
Back to Omniscope Scaling
The maximum number of records that will perform well inside a DataPlayer depends on the content as well as the configuration of the DataPlayer. In general, 5000 records or less will perform very well. Depending on content and configuration, 10,000 record (and beyond) DataPlayers are possible. The best way to determine how your data will perform with various record counts inside the DataPlayer is to use the free 30-day trial to make some for testing.
This section provides some working examples of relatively large-record set DataPlayers, together with some hints regarding performance optimisation in the data and settings necessary to accommodate relatively large numbers of records:
We are constantly improving the scalability achievable in Flash, and Flash itself is also improving. Arguably, this demo has too many columns to be useful, since the values in most of the columns are not used for selecting, only shown in details. The record details could just as easily be shown on linked pages, rather than embedded inside the Flash file. This demo is displayed here for reference only.
This demo normally loads without warning notices and runs well in most recent browsers. However, when loading this page, some older browsers and less powerful machines may see a notice (sometimes repeatedly) from the Adobe Flash plug in:
"A script in this movie is causing Adobe Flash Player 9 to run slowly. If it continues to run your computer may become unresponsive. Do you want to abort this script?" If the user presses No, (sometimes repeatedly) the loading will continue and the DataPlayer should eventually display:
Back to Scaling & Performance