-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Michael, 

I made some experience with old and slow database access. First I would take a 
look at the database file size.

du -hs /var/lib/postgres or whatever

and how many events have you in your database. For analyze you can throw some 
SQL statements at your DB

SELECT count(*) AS tally FROM events;

shows how many events are stored acknowledged + unacknowledged. I have seen a 
database with 12 Mio. events, OpenNMS WebUI timed out and you will unable to 
see anything, restart is also really painfull. Machine had a RAID-10 with 6 
drives and 512MB BWCC controller :) If you want to cleanup this statement can 
help to identify the most event-UEIs:

SELECT
        count(*) AS tally,
        eventuei
FROM
        events
GROUP BY
        eventuei
ORDER BY
        tally desc
LIMIT
        20;

gives you the top 20 events by eventuei. 

After a long time it is possible you have a 5 or 6 GB large database
file with only a few thousand entries in it. This is the time for 

        vacuumdb -afv

or the faster way, dump and create new with an restore from the opennms db. 

For the last opttion be sure your backup is working :) Just my 2 cents for this 
issue.

Greetings from Fulda

Ronny

On Sep 1, 2010, at 5:01 PM, Michael Seibold wrote:

> Hi all,
> 
> as our database grows -and probably also related to recent upgrades of 
> opennms from 1.7.10 -> 1.8.1 -> 1.8.3 - we get some performance issues when 
> starting opennms (about 7 minutes) and when using KSC graphs (3-5 minutes).
> 
> Using a trace tool we traced down two points where a lot of time gets lost. 
> Attached are the trace results. I'm no db guru but to me it seems as if a 
> method designed to prepare database queries is used in a wrong place. Instead 
> of preparing the statement once and then using it it seems to me as if the 
> prepare-method is called very often.
> 
> First example:
> 
> ------------------------------
> 
> Node Details
> Method:       prepareStatement(java.lang.String)
> Class:        $Proxy38
> Argument:     select onmsassetr0_.id as id1_0_, onmsassetr0_.address1 as 
> address2_1_0_, onmsassetr0_.address2 as address3_1_0_, 
> onmsassetr0_.assetNumber as assetNum4_1_0_, onmsassetr0_.autoenable as 
> autoenable1_0_, onmsassetr0_.building as building1_0_, onmsassetr0_.category 
> as category1_0_, onmsassetr0_.circuitId as circuitId1_0_, onmsassetr0_.city 
> as city1_0_, onmsassetr0_.comment as comment1_0_, onmsassetr0_.connection as 
> connection1_0_, onmsassetr0_.dateInstalled as dateIns12_1_0_, 
> onmsassetr0_.department as department1_0_, onmsassetr0_.description as 
> descrip14_1_0_, onmsassetr0_.displayCategory as display15_1_0_, 
> onmsassetr0_.division as division1_0_, onmsassetr0_.enable as enable1_0_, 
> onmsassetr0_.floor as floor1_0_, onmsassetr0_.userLastModified as 
> userLas19_1_0_, onmsassetr0_.lastModifiedDate as lastMod20_1_0_, 
> onmsassetr0_.lease as lease1_0_, onmsassetr0_.leaseExpires as leaseEx22_1_0_, 
> onmsassetr0_.maintContractExpires as maintCo23_1_0_, 
> onmsassetr0_.maintContract as maintCo24_1_0_, 
> onmsassetr0_.managedObjectInstance as managed25_1_0_, 
> onmsassetr0_.managedObjectType as managed26_1_0_, onmsassetr0_.manufacturer 
> as manufac27_1_0_, onmsassetr0_.modelNumber as modelNu28_1_0_, 
> onmsassetr0_.nodeId as nodeId1_0_, onmsassetr0_.notifyCategory as 
> notifyC29_1_0_, onmsassetr0_.operatingSystem as operati30_1_0_, 
> onmsassetr0_.password as password1_0_, onmsassetr0_.pollerCategory as 
> pollerC32_1_0_, onmsassetr0_.port as port1_0_, onmsassetr0_.rack as rack1_0_, 
> onmsassetr0_.region as region1_0_, onmsassetr0_.room as room1_0_, 
> onmsassetr0_.serialNumber as serialN37_1_0_, onmsassetr0_.slot as slot1_0_, 
> onmsassetr0_.state as state1_0_, onmsassetr0_.supportPhone as support40_1_0_, 
> onmsassetr0_.thresholdCategory as thresho41_1_0_, onmsassetr0_.username as 
> username1_0_, onmsassetr0_.vendor as vendor1_0_, 
> onmsassetr0_.vendorAssetNumber as vendorA44_1_0_, onmsassetr0_.vendorFax as 
> vendorFax1_0_, onmsassetr0_.vendorPhone as vendorP46_1_0_, onmsassetr0_.zip 
> as zip1_0_ from assets onmsassetr0_ where onmsassetr0_.nodeId=?
> Return:       
> Agent:        open...@xxxxxx:7014
> API:  JDBC
> Thread Name:  741098...@qtp-1124264703-10 <741098834>
> Time [ms]:    327427.78       Level:  19      Entry Hops:     5701    Exit 
> Hops:      5702
> 
> Time Details  Total   Exec    %
> Execution Time [ms]:  0.54    0.54    0.00
> Execution CPU Time [ms]:      0.54    0.54    0.00
> Sync Time [ms]:       -       -       -
> Wait Time [ms]:       -       -       -
> Runtime Suspension Time [ms]: -       -       -
> Virtualization Suspension Time [ms]:  -       -       -
> 
> Source Information
> File Name:    -       Line:   -
> 
> ===============
> 
> This rather complex statement was called about 5,700 times using 327 seconds. 
> The execution time of each statement was about 0.54 ms which is not too bad, 
> i think.
> 
> ------------------------------
> 
> Second example:
> 
> 
> Node Details
> Method:       prepareStatement(java.lang.String)
> Class:        $Proxy38
> Argument:     select ipinterfac0_.nodeId as nodeId1_, ipinterfac0_.id as 
> id1_, ipinterfac0_.id as id4_0_, ipinterfac0_.ipAddr as ipAddr4_0_, 
> ipinterfac0_.ipHostName as ipHostName4_0_, ipinterfac0_.ipLastCapsdPoll as 
> ipLastCa4_4_0_, ipinterfac0_.isManaged as isManaged4_0_, 
> ipinterfac0_.isSnmpPrimary as isSnmpPr6_4_0_, ipinterfac0_.nodeId as 
> nodeId4_0_, ipinterfac0_.snmpInterfaceId as snmpInte8_4_0_ from ipInterface 
> ipinterfac0_ where ipinterfac0_.nodeId=?
> Return:       
> Agent:        open...@xxxxxx:7014
> API:  JDBC
> Thread Name:  741098...@qtp-1124264703-10 <741098834>
> Time [ms]:    398295.94       Level:  18      Entry Hops:     90880   Exit 
> Hops:      90881
> 
> Time Details  Total   Exec    %
> Execution Time [ms]:  0.15    0.15    0.00
> Execution CPU Time [ms]:      0.15    0.15    0.00
> Sync Time [ms]:       -       -       -
> Wait Time [ms]:       -       -       -
> Runtime Suspension Time [ms]: -       -       -
> Virtualization Suspension Time [ms]:  -       -       -
> 
> Source Information
> File Name:    -       Line:   -
> 
> 
> ===============
> 
> This rather simple statement was called about 91,000 times using 398 seconds. 
> This number might be about 4 times the number of entries in ipinterface 
> table.  The execution time of each statement was about 0.15 ms so I believe 
> the database is in a good condition.
> 
> ------------------------------
> 
> 
> The trace was done on a solaris 10 with 64bit JVM and OpenNMS 1.8.3. Trace 
> tool was dynatrace.
> 
> I already searched around in the source code but couldn't find the method 
> calling this prepare statements (as preparation is in several steps it's a 
> bit tricky). Maybe someone with more experience with the source code can find 
> it.
> 
> Any help is appreciated. If needed we can trace again (out of office time).
> 
> - Michael


- --
Ronny Trommer (Germany)
Web: http://www.open-factory.org
IRC: irc.freenode.org - #opennms

PGP key: B1BCE829E38398A0
Keyserver: keyserver.pgp.com

-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.14 (Darwin)

iEYEARECAAYFAkx+peQACgkQsbzoKeODmKDxwACdGpA6yEd4XcQVIz0ksebIKHHL
o+MAnRuTzt9O4QMsB79luLaDzaQFTPfz
=U2C1
-----END PGP SIGNATURE-----

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Please read the OpenNMS Mailing List FAQ:
http://www.opennms.org/index.php/Mailing_List_FAQ

opennms-devel mailing list

To *unsubscribe* or change your subscription options, see the bottom of this 
page:
https://lists.sourceforge.net/lists/listinfo/opennms-devel

Reply via email to