Querying load balancing information from the Load Balancing Advisory

I use what is below to periodically gather what the load balancing advisory posts. The data reflects the percentage of connections to distribute to each instance for a given service in a RAC.

#!/home/oracle/local/bin/python

import cx_Oracle, string

conn = cx_Oracle.connect(mode = cx_Oracle.SYSDBA)
cursor = conn.cursor()

cursor.execute("select to_char(from_tz(enq_time,'GMT') at time zone sessiontimezone,'YYYY/MM/DD HH24:MI:SS'),t.user_data.srv,t.user_data.payload from sys.sys$service_metrics_tab t order by t.enq_time")

"""

VERSION=1.0 database=wcprod service=wcpfan { {instance=wcprod3 percent=14 flag=GOOD aff=TRUE}{instance=wcprod1 percent=20 flag=GOOD aff=TRUE}{instance=wcprod2 percent=66 flag=GOOD aff=TRUE} }

"""

for r in cursor:
  payload = r[2]
  dist=payload[payload.find("{ {") + 2:payload.rfind("}")]
  while dist.find("}") > 0:

    tmp=dist[dist.find("{ {") + 2:dist.rfind("}")]
    tmp=tmp[:tmp.find("}")]
    instance=tmp[:tmp.find(" ")+1]
    instance=instance[instance.find("=")+1:]
    tmp=tmp[tmp.find(" ")+1:]
    print r[0],instance,

    instance=tmp[2:tmp.find(" ")+1]
    tmp=tmp[tmp.find(" "):]
    instance=instance[instance.find("=")+1:]
    tmp=tmp[tmp.find(" ")+1:]
    print instance,

    instance=tmp[2:tmp.find(" ")+1]
    tmp=tmp[tmp.find(" "):]
    instance=instance[instance.find("=")+1:]
    tmp=tmp[tmp.find(" ")+1:]
    print instance

    dist=dist[dist.find("}")+1:]

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.