
The Kodo profiling capability allows for profiling of application code. It is designed to help optimize the use of Kodo, and is not intended to be a generic profiling tool. Only Kodo specific APIs are instrumented.
| ![[Important]](img/important.gif) | Important | 
|---|---|
| This feature requires Kodo Enterprise Edition or Kodo Standard Edition with the Performance Pack. | 
	The profiling capability can either be used standalone
	using the Kodo Profiling Console, or inside
	the Kodo Management Console using the
	Profiling MBean.  To use the profiling capability within the
	Kodo Management Console see
	Section 12.4.8, “Profiling MBean”.
	
		The profiling capability can be used standalone locally.
		To bring up the Kodo Profiling Console,
		set the following property (see 
		Section 2.7.41, “kodo.ManagementConfiguration”):
		
JPA XML format:
<property name="kodo.ManagementConfiguration" value="profiling-gui"/>
JDO properties format:
kodo.ManagementConfiguration: profiling-gui
		The left pane of the Profiling Console contains a tree.  Each node in
		the tree represents a call in a call stack.  The root of each call
		stack is an EntityManager or
		PersistenceManager. 
		
Each node may be composed of three items - the node name, the amount of time spent in each node, and the percentage of the total time spent in the parent node that this child node contributes. You can see details about a node in the right panes by selecting a node. The top right pane(s) yield detailed information about the node (e.g. the location in code where a transaction was started, or the SQL generated for a query), and the bottom right pane contains statistics about the node.
The Profiling Console has a Profiling Toolbar. It has the following controls:
				Refresh:  Refreshes the statistics shown
				in the tree.
			
				Refresh slider:  Set the interval at which
				the tree will be refreshed.
			
				Show descendants:  Show the tree with
				EntityManagers / 
				PersistenceManagers as roots.  
				
				This is the normal view.  This option is available only when the
				Show ancestors view is in use.  See the
				Show ancestors feature below.
			
				Export...:  Export the current profiling
				data to a file for later viewing.  Exported profiling data
				is stored in files ending in .prx.
				The export can be viewed using the 
				profilingviewer application.
				To do this run the profilingviewer
				application and pass in the name of the exported file.
			
				Reset:  Resets the statistics shown
				in the tree.
			
				Show SQL:  Show an inverted tree
				where the root nodes are SQL statements, and their ancestors
				are shown as children in the tree.
			
The profiling call tree has a context menu containing the following options:
				Refresh:  Refreshes the statistics shown
				in the tree.
			
				Show ancestors:  Show an inverted tree
				where the nodes of the same name and description as the
				selected node are used as the roots, and their ancestors
				are shown as children in the tree.
			
				Show descendants:  Show the tree with
				EntityManagers / 
				PersistenceManagers as roots.  
				
				This is the normal view.  This option is available only when the
				Show ancestors view is in use.
			
				Export...:  Export the current profiling
				data to a file for later viewing.  Exported profiling data
				is stored in files ending in .prx.
				The export can be viewed using the 
				profilingviewer application.
				To do this run the profilingviewer
				application and pass in the name of the exported file.
			
				Reset:  Resets the statistics shown
				in the tree.
			
		The detail information for an EntityManager
		or PersistenceManager
		includes information about objects that were fetched in the
		context of that manager.  The detail area consists of information 
		about where in code the manager was created, and a table
		with information on each field in each persistence-capable class.
		The table has the following columns:
		
				Field Name:  The name of the persistent 
				field.
			
				Total:  The total number of times the 
				object containing that field was loaded in the context of
				the containing manager.
			
				Fetched / % Used:  The first number 
				represents the number of times the field was fetched
				during the initial load.  The second number represents
				the percentage of initially fetched fields that are actually
				accessed.  A low percentage indicates that perhaps that
				field should not be in the default fetch group or in a
				fetch group configured for initial load.
			
				Unfetched / % Used:  The first number 
				represents the number of times the field was 
				not fetched
				during the initial load.  The second number represents
				the percentage of the time the initially unfetched field
				is actually accessed.  A high percentage indicates that
				perhaps that field should be in the default fetch group or
				in a fetch group configured for initial load.
			
|    |