[Zodb-checkins] CVS: ZODB3/ZEO - stats.py:1.17.6.1.18.1
Jeremy Hylton
cvs-admin at zope.org
Wed Nov 26 12:49:10 EST 2003
Update of /cvs-repository/ZODB3/ZEO
In directory cvs.zope.org:/tmp/cvs-serv27452
Modified Files:
Tag: Zope-2_6-branch
stats.py
Log Message:
Add code to compute and display temporal distance.
=== ZODB3/ZEO/stats.py 1.17.6.1 => 1.17.6.1.18.1 ===
--- ZODB3/ZEO/stats.py:1.17.6.1 Wed Oct 16 17:45:59 2002
+++ ZODB3/ZEO/stats.py Wed Nov 26 12:49:08 2003
@@ -66,6 +66,7 @@
dostats = 1
print_size_histogram = 0
print_histogram = 0
+ print_distance = 1
interval = 900 # Every 15 minutes
try:
opts, args = getopt.getopt(sys.argv[1:], "hi:qsSv")
@@ -133,6 +134,7 @@
bysizew = {}
total_loads = 0
byinterval = {}
+ refs = {}
thisinterval = None
h0 = he = None
offset = 0
@@ -203,6 +205,7 @@
if code & 0x70 == 0x20:
oids[oid] = oids.get(oid, 0) + 1
total_loads += 1
+ refs.setdefault(oid, []).append(datarecords)
if code in (0x00, 0x70):
if not quiet:
dumpbyinterval(byinterval, h0, he)
@@ -281,6 +284,47 @@
print
dumpbysize(bysizew, "written", "writes")
dumpbysize(bysize, "loaded", "loads")
+
+ # Compute temporal distance and display histogram
+ if print_distance:
+ dist = {}
+ repeats = 0
+ rest = 0
+ for oid, L in refs.items():
+ if len(L) < 2:
+ rest += 1
+ continue
+ repeats += 1
+ distances = [v - L[i-1] for i, v in enumerate(L) if i >= 1]
+ for d in distances:
+ dist[d] = dist.get(d, 0) + 1
+
+ binsize = 100
+ bins = dict.fromkeys(range(0, max(dist), binsize), 0)
+ for d, count in dist.items():
+ bins[d / binsize * binsize] += count
+ L = bins.items()
+ L.sort()
+
+ print
+ print "Histogram of temporal distance"
+ all = sum(dist.values())
+ print "Total oids with 1 load: %s" % addcommas(rest)
+ print "Total oids with 2 or more loads: %s" % addcommas(repeats)
+ headers = ["Dist", "Count", "Percent"]
+ fmt = "%5s %7s %3s"
+ print fmt % tuple(headers)
+ dots = False
+ for i, (dist, count) in enumerate(L):
+ if not count and dots:
+ continue
+ if not (count or L[i+1][1]):
+ if not dots:
+ print "..."
+ dots = True
+ continue
+ dots = False
+ print fmt % (dist, count, 100 * count / all)
def dumpbysize(bysize, how, how2):
print
More information about the Zodb-checkins
mailing list