Load Library Tracer Results - Database Structure

Applies to AQTime 8.81, last modified on November 27, 2020

When you export the Load Library Tracer profiler results to a database, AQTime creates a number of tables in it. The contents of most of these tables correspond to the contents of AQTime panels in which the profiling results are displayed. This topic describes the structure of database table that contain the exported Performance profiler results.

The exported results are stored to the following tables:

The relationship between the mentioned tables is illustrated in the image below. This relationship is similar to the relationship of the data in AQTime’s Report and Details panels that contains the Load Library Tracer results.

Relationship between database tables

Click the image to enlarge it.

The “root” table of the database is the INSTANCES table. It contains the list of all exported result sets and is shared by profilers. Each result set is identified by the INST_ID column value, which is unique among the table. All other database tables also have the INST_ID column that indicates the result set to which data of a specific table item belongs.

The LOAD_LIBRARY_TRACER_MODULES table corresponds to the result set that is displayed in the Report panel. Each row in this table corresponds to a module that was loaded to and unloaded from memory during the profiling. The ID column of the table specifies the modules’ identifier that is used by other database tables.

Each module that is listed in the Report panel could be loaded and unloaded several times. Every time the module is loaded, a module copy (or instance) is created in memory. The profiler traces the creation of module instances and displays information about them in the Module Instances table of the Details panels. The data of this table are exported to the LOAD_LIBRARY_TRACER_MODULE_INSTANCES database table.

Each record of this table corresponds to a module instance. The PARENT_ID column contains the module identifier (the same value that is stored in the ID column of the LOAD_LIBRARY_TRACER_MODULES table). The REC_ID column specifies the index of the instance relative to other instances of the same module. The ID column specifies the identifier of the instance in the table.

The profiler collects information about the sequence of function calls that led to the loading of a module in memory. The call stack data is exported to the LOAD_LIBRARY_TRACER_CALL_STACK table. Each row in this table corresponds to a function call. The PARENT_ID column specifies the identifier of the module instance, to which the call sequence corresponds (this is the same value that is stored in the ID column LOAD_LIBRARY_TRACER_MODULE_INSTANCES table). The COL__ column specifies the position of a call in the stack relative to other functions. The function call, whose COL__ is 0, corresponds to the top-most function in the call stack (that is, this is the call that loaded the module in memory).

The LOAD_LIBRARY_TRACER_CALL_STACK table has the REC_ID column that contains the identifier of the routine which corresponds to the call stack entry. Using this identifier you can retrieve information about the routine from the LOAD_LIBRARY_TRACER_META_ROUTINES table.

Note: The ID and REC_ID columns of the LOAD_LIBRARY_TRACER_xxxx tables are not key columns. They may contain repetitive values. In queries you should use these values along with the INST_ID value (the result set identifier).

Below is detailed information about the tables.

The INSTANCES table

This table contains the list of exported result sets. Each result set is identified by the INST_ID value.

Field Name Description
CAPTION String. The name of the result set.
COUNTER_DESCRIPTION String. Reserved.
COUNTER_FREQUENCY Decimal. Reserved.
COUNTER_NAME String. Reserved.
INST_ID Integer. The result set’s identifier.

The LOAD_LIBRARY_TRACER_CALL_STACK table

This table contains information about the sequence of function calls that led to the loading of modules in memory. Each row in it corresponds to a function call. The data stored in this table is used to display the Call Stack table in the Details panel (see Load Library Tracer - Details Panel).

Field Name Description
COL__ Integer. The position of the function calls relative to the calls in the stack. 0 in the column indicates the topmost function in the stack. This is the same value that is displayed in the # column of the Call Stack table in the Details panel.
COL_CLASS_NAME String. Specifies the name of the class to which the function belongs. This is the same value that is displayed in the Class Name column of the Call Stack table in the Details panel.
COL_CODE_TYPE String. Specifies the type of the function’s code (x86, x64 and so on). This is the same value that is displayed in the Code Type column of the Call Stack table in the Details panel.
COL_LINE_NO Integer. Specifies the number of the source line that contains the call to the function. This is the same value that is displayed in the Line No column of the Call Stack table in the Details panel.
COL_MODULE_NAME String. Specifies the name of the module that contains the binary code of the function. This is the same value that is displayed in the Module Name column of the Call Stack table in the Details panel.
COL_NAMESPACE String. Specifies the name of the namespace to which the function belongs. This is the same value that is displayed in the Namespace column of the Call Stack table in the Details panel.
COL_SOURCE_FILE String. Specifies the name of the source file that contains the function’s source code. This is the same value that is displayed in the Source File column of the Call Stack table in the Details panel.
COL_SOURCE_LINE Integer. Specifies the line number at which the function’s code starts in the source file. This is the same value that is displayed in the Source Line column of the Call Stack table in the Details panel.
COL_TOKEN Integer. Specifies the function’s token. This is the same value that is displayed in the Token column of the Call Stack table in the Details panel.
COL_UNIT_NAME String. Specifies the name of the unit that contains the function’s code. This is the same value that is displayed in the Unit Name column of the Call Stack table in the Details panel.
INST_ID Integer. The identifier of the result set to which the row belongs. This is the same value as the result set’s INST_ID value in the INSTANCES table.
ID Integer. The identifier of the call stack entry that is relative to other entries generated for the same result set.
PARENT_ID Integer. The identifier of the module instance (the same value that is stored in the ID column of the LOAD_LIBRARY_TRACER_MODULE_INSTANCES table).
REC_ID Integer. The identifier of the function in the LOAD_LIBRARY_TRACER_META_ROUTINES table.

The LOAD_LIBRARY_TRACER_META_ROUTINES table

This table contains information about routines included in the Load Library Tracer results (see Load Library Tracer - Details Panel).

Field Name Description
COL_ANALYSIS_RESULT String. Specifies whether the function was instrumented or not. If it was, the field is empty. Else, the filed contain of the following strings that specify the cause of why the instrumentation failed:
  • Less than 5 bytes (for 32-bit applications)
  • Less than 6 bytes (for 64-bit applications)
  • No line info
  • Unsafe code
  • No ret instruction
  • Duplicated code

This field is not shown in the Call Stack table of the Details panel.

COL_CLASS_NAME String. The type of the class to which the function belongs.
COL_CODE_TYPE String. Specifies the type of the function’s code (x86, x64 and so on).
COL_MODULE_NAME String. The fully-qualified name of the module that contains the routine’s implementation.
COL_MODULE_BASE Decimal. Specifies the address, at which the module that contains the function, was loaded in memory.
COL_NAMESPACE String. Specifies the name of the namespace to which the function belongs.
COL_SOURCE_FILE String. The name of the file that contains the function’s code.
COL_SOURCE_LINE Integer. The number of the source line at which the function’s code starts in the source file.
COL_PROFILELINES Integer. Used for helper purposes. Always contains 0.
COL_ROUTINENAME String. Specifies the function’s name. This is the same value that is displayed in the Routine Name column of the Call Stack table in the Details panel.
COL_RVA Decimal. The relative-virtual address of the function in memory. This value is not displayed in the Call Stack table.
COL_SYMBOL_MONIKER String. Used for helper purposes.
COL_TOKEN Integer. Specifies the function’s token. This is the same value that is displayed in the Token column of the Call Stack table in the Details panel.
COL_UNIT_NAME String. Specifies the name of the unit that contains the function’s code. This value is not displayed in the Call Stack table.
ID Integer. The identifier of the row in the table.
INST_ID Integer. The identifier of the result set to which the row belongs. This is the same value as the result set’s INST_ID value in the INSTANCES table.
PARENT_ID Integer. Not used.
REC_ID Integer. The identifier of the function in the result set.

The LOAD_LIBRARY_TRACER_MODULES table

This table contains a list of modules that were loaded in memory during the profiling. This table is used to display results of the Load Library Tracer profiler in the Report panel (see description of the Load Library Tracer results).

Field Name Description
COL_IMAGE_SIZE__BYTES_ Integer. Specifies the size of the module in memory (in bytes). This value is displayed in the Image Size (bytes) column of the Report panel.
COL_LIBRARY_NAME String. The name and extension of the module. This value is displayed in the Library Name column of the Report panel.
COL_LIBRARY_PATH String. The module’s path. This value is displayed in the Library Path column of the Report panel.
COL_LOAD_COUNT Integer. Specifies the number of times the module was loaded in memory during profiling. This value is displayed in the Load Count column of the Report panel.
COL_PREFERRED_LOAD_ADDRESS Decimal. The preferred load address that is specified in the module’s header. This value is displayed in the Preferred Address column of the Report panel.
COL_RELOCATION_COUNT Integer. The number of times the module was relocated in memory. This value is displayed in the Relocation Count column of the Report panel.
COL_SIZE__BYTES_ Integer. Specifies the size of the module’s file in bytes. This value is displayed in the Size (bytes) column of the Report panel.
COL_STATIC Integer. Contains -1 or 0-1 indicates that the module is loaded in memory at load time (that is, when the application’s module is loaded in memory and the application is starting functioning). 0 indicates that the module is dynamically loaded at run time. For instance, it may be loaded in memory by the LoadLibrary or LoadLibraryEx WinAPI functions. This value is used by the Static column of the Report panel.
COL_SUCCESSFULLY_UNLOADED Integer. Contains either -1, or 0. Specifies whether the library was unloaded from memory successfully (-1) or not (0). This value is displayed in the Successfully Unloaded column of the Report panel.
COL_UNLOAD_COUNT Integer. Specifies the number of times the module was unloaded from memory during profiling. This value is displayed in the Unload Count column of the Report panel.
ID Integer. The identifier of the module within the result set. This is the same value that is displayed in the # column of the Report panel when it is showing the LoadLibrary Tracer results.
INST_ID Integer. The identifier of the result set to which the row belongs. This is the same value as the result set’s INST_ID value in the INSTANCES table.
PARENT_ID Reserved.
REC_ID Integer. The identifier of the row in the table.

The LOAD_LIBRARY_TRACER_MODULE_INSTANCES table

A DLL can be loaded and unloaded into the application several times. Every time it is loaded, the module instance is created in memory. This table contains information about module instances that were created while the application functions. This table is used to display results of the Load Library Tracer profiler in the Module Instances table of the Details panel (see description of the Load Library Tracer results).

Field Name Description
COL_DELTA__MS_ Integer. The number of milliseconds which the module instance remained in memory during profiling. 0 indicates this time period cannot be determined. This value is displayed in the Delta (ms) column of the Module Instances table in the Details panel.
COL_LOAD_ADDRESS Decimal. Specifies the address at which the module was loaded in memory. This value is displayed in the Load Address column of the Module Instances table in the Details panel.
COL_LOAD_TIME__MS_ Integer. The number of milliseconds passed since the profiling start to the moment, when the module instance was loaded in memory. This value is displayed in the Load Time (ms) column of the Module Instances table in the Details panel.
COL_RELOCATION_OCCURRED Integer. Contains either -1, or 0. Specifies whether the module was relocated in memory (-1), or not (0). This value is displayed in the Relocation Occurred column of the Module Instances table in the Details panel.
COL_THREAD_ID Integer. Specifies the identifier of the thread, which loaded the module in memory. This value is displayed in the Thread Id column of the Module Instances table in the Details panel.
COL_UNLOAD_THREAD_ID Integer. Specifies the identifier of the thread, which unloaded the module from memory. This value is displayed in the Unload Thread Id column of the Module Instances table in the Details panel.
COL_UNLOAD_TIME__MS_ Integer. The number of milliseconds passed since the profiling start to the moment, when the module instance was unloaded. This value is displayed in the Unload Time (ms) column of the Module Instances table in the Details panel.
ID Integer. The identifier of the module instance within the result set.
INST_ID Integer. The identifier of the result set to which the row belongs. This is the same value as the result set’s INST_ID value in the INSTANCES table.
PARENT_ID Integer. Specifies the identifier of the module to which the given instance corresponds. This field contains the same values that are stored in the ID field of the LOAD_LIBRARY_TRACER_MODULES table.
REC_ID Integer. Specifies the position of the module instance among other instances of the same module.

The RELATIONS table

This table contains information about parent-child relationships between the database tables.

Field Name Description
COL_CHILD_TABLE String. The name of a child table.
COL_PARENT_TABLE String. The name of a parent table. If this field contains NULL, it means that the table specified by the COL_CHILD_TABLE is a top-level table.
ID Integer. The identifier of a specific relation within the RELATIONS table.
INST_ID Integer. The identifier of the INSTANCES table item corresponding to the result set whose data the tables hold.

See Also

Exporting Profiling Results to Database
Load Library Tracer - Overview
Load Library Tracer - Report Panel
Load Library Tracer - Details Panel
Using Actions
Using Triggers

Highlight search results