Oracle Object Statistics Test

This test is used for finding waits that are associated with a specific Oracle table. The most important of these object-level wait events will give you clues to the source of the contention. The Oracle Object Statistics test monitors these waits and reports the number and type of waits.

Note:

To perform this test , you have to set the STATISTICS_LEVEL parameter in the Init parameter file (in the <ora_home>\ora<oracle_version>\database\ directory by default) either to Typical or ALL. By default it is Typical. Otherwise the Oracle will not be able to collect the Object level statistics.

This test is disabled by default. To enable the test, go to the enable / disable tests page using the menu sequence : Agents -> Tests -> Enable/Disable, pick Oracle Database as the Component type, Performance as the Test type, choose this test from the disabled tests list, and click on the << button to move the test to the ENABLED TESTS list. Finally, click the Update button.

Target of the test : An Oracle server (9i and 10g)

Agent deploying the test : An internal agent

Outputs of the test : One set of results for every username.objectname configured.

Configurable parameters for the test
  1. TEST PERIOD - How often should the test be executed
  2. Host – The host for which the test is to be configured
  3. Port - The port on which the server is listening
  4. User – In order to monitor an Oracle database server, a special database user account has to be created in every Oracle database instance that requires monitoring. A Click here hyperlink is available in the test configuration page, using which a new oracle database user can be created. Alternatively, you can manually create the special database user. When doing so, ensure that this user is vested with the select_catalog_role and create session privileges.

    The sample script we recommend for user creation (in Oracle database server versions before 12c) for eG monitoring is:

    create user oraeg identified by oraeg

    create role oratest;

    grant create session to oratest;

    grant select_catalog_role to oratest;

    grant oratest to oraeg;

    The sample script we recommend for user creation (in Oracle database server 12c) for eG monitoring is:

    alter session set container=<Oracle_service_name>;

    create user <user_name>identified by <user_password> container=current default tablespace <name_of_default_tablespace> temporary tablespace <name_of_temporary_tablespace>;

    Grant create session to <user_name>;                                

    Grant select_catalog_role to <user_name>;

    The name of this user has to be specified here.

  5. Password – Password of the specified database user

    This login information is required to query Oracle’s internal dynamic views, so as to fetch the current status / health of the various database components.

  6. Confirm password – Confirm the password by retyping it here.
  7. object_name – Provide the names of the objects to be monitored in the following format: <username>.<objectname>. For eg., to monitor user john’s alarm table, the object_name would be: john.alarm. Multiple username.objectname pairs can be provided as a comma-separated list.
  8. ISPASSIVE – If the value chosen is yes, then the Oracle server under consideration is a passive server in an Oracle cluster. No alerts will be generated if the server is not running. Measures will be reported as “Not applicable" by the agent if the server is not up.
  9. SSL- By default, this flag is set to No, as the target Oracle database is not SSL-enabled by default. If the target database is SSL-enabled, then set this flag to Yes.
  10. SSL Cipher-This parameter is applicable only if the target Oracle database is SSL-enabled, if not, set this parameter to none. A cipher suite is a set of cryptographic algorithms that are used before a client application and server exchange information over an SSL/TLS connection. It consist of sets of instructions on how to secure a network through SSL (Secure Sockets Layer) or TLS (Transport Layer Security). In this text box, provide a comma-seperated list of cipher suites that are allowed for SSL/TLS connection to the target database. By default, this parameter is set to none.
  11. TRUSTSTORE FILE- This parameter is applicable only if the target Oracle database is SSL-enabled, if not, set this parameter to none. TrustStore is used to store certificates from Certified Authorities (CA) that verify and authenticate the certificate presented by the server in an SSL connection. Therefore, the eG agent should have access to the truststore where the certificates are stored to authenticate and connect with the target database and collect metrics. For this, first import the certificates into the following default location <eG_INSTALL_DIR>/lib/security/mytruststore.jks. To know how to import the certificate into the truststore, refer toPre-requisites for monitoring Oracle Cluster. Then, provide the truststore file name in this text box. For example: mytruststore.jks. By default, none is specified against this text box.
  12. TRUSTSTORE TYPE-This parameter is applicable only if the target Oracle database is SSL-enabled, if not, set this parameter to none.Specify the type of truststore that contains the certificates for server authentication in this text box. For eg.,JKS. By default, this parameter is set to the value none.
  13. TRUSSTORE PASSWORD-This parameter is applicable only if the target Oracle database is SSL-enabled, if not, set this parameter to none. If a Truststore File name is provided, then, in this text box, provide the password that is used to obtain the associated certificate details from the Truststore File. By default, this parameter is set to none.
Measurements made by the test
Measurement Description Measurement Unit Interpretation

ITL waits:

 

Indicates the number of times ITL waits have occurred during the last measurement period.

 

Number

 

In oracle, when a row is locked by a transaction, that information is placed in the block header where the row is located. When another transaction wishes to acquire the lock on the same row, it has to travel to the block containing the row anyway, and upon reaching the block, it can easily tell that the row is locked from the block header. There is no need to queue up for some single resource like a lock manager.

ITL is the portion of the block header that contains information on locking. It is a simple data structure called “Interested Transaction List(ITL), a linked list data structure that maintains information on transaction address and rowid. ITL contains several slots or place holders for transactions. When a row in the block is locked for the first time, the transaction places a lock in one of the slots with the rowid of the row that is locked. In other words, the transaction makes it known that it is interested in the row.

During the table creation, the INITRANS parameter defines how many slots are initially created in the ITL. When the transactions exhaust all the available slots and a new transaction comes in to lock a row, the ITL grows to create another slot. The ITL can grow up to the number defined by the MAXTRANS parameter of the table, provided there is space in the block.

Sometimes, transaction may not be able to find a free slot to place its lock information. This can occur because either (i) the block is so packed that the ITL cannot grow to create a free slot, or (ii) the MAXTRANS has already been reached.

To overcome this, do the following:

  • Reorganizing the table by setting a high value of INITRANS will make sure that there are enough free slots in the ITL, and there will be minimal or no dynamic extension of the ITL.
  • The other option is to make sure the data is less packed so that ITL can grow enough to accommodate the surges in ITL.

Buffer busy waits:

Indicates the number of times Buffer Busy waits that have occurred during the last measurement period.

Number

Buffer busy waits occur within Oracle when a task goes to fetch a data block, but it must wait because another task has control of the data block in the buffer.  A buffer busy wait is often caused by contention on an Oracle table header block because multiple tasks are waiting their turn to grab a freelist to place their new data rows.

This buffer busy wait condition happens for two reasons:

  • Another session has the buffer block locked in a mode that is incompatible with the waiting session’s request.
  • The block is being read into the buffer by another session, so the waiting session must wait for the block read to complete.

Ideally, value of this measure should be low. If this measure is high, you can reduce the buffer busy wait events by doing the following:

  • By tuning the SQL to access this object’s rows with fewer block reads by adding indexes;
  • Adding freelists to tables and indexes, or by adding this object to keep cache.

Row lock waits:

Indicates the number of times Row Lock Waits have occurred on this object during the last measurement period.

Number

 

Physical reads:

Indicates the number of physical reads that occurred on this object during the last measurement period.

Number

Physical reads/writes – whether direct or not – increase the processing overheads incurred by the database. Therefore, ideally, the value of these measures should be kept at a minimum at all times.

In the event of an unusually high number of Buffer busy waits, you might want to take a look at the values of these measures, to identify the bottleneck.

Direct physical reads:

Indicates the number of times direct physical reads occurred on this object during the last measurement period.

Number

Physical writes:

Indicates the number of physical writes that occurred on this object during the last measurement period.

Number

Direct physical writes:

Indicates the number of times direct physical writes occurred on this object during the last measurement period.

Number

Logical reads:

Indicates the number of logical reads that occurred on this object during the last measurement period.

Number