Google App Engine DB-Abfragespeicherauslastung

Wenn ich eine Abfrage für einen großen Satz kleiner Objekte (15.000 Objekte mit nur wenigen kurzen Zeichenfolgen und booleschen Eigenschaften) durchführe, ohne mit diesen Objekten etwas zu tun, steigt die Speichernutzung meiner Instanz kontinuierlich an (um 70 MB). Die Speichererweiterung scheint nicht proportional zu der Datenmenge zu sein, die jemals nur für die Abfrage gespeichert werden muss.

The Schleife, die ich benutze, ist das folgende:

cursor = None
while True:
  query = MyModel.all()
  if cursor:
    query.with_cursor(cursor)
  fetched = 0
  for result in query.run(batch_size = 500):
    fetched += 1

    # Do something with 'result' here. Actually leaving it empty for 
    # testing to be sure I don't retain anything myself

    if fetched == 500:
      cursor = query.cursor()
      break
  else:
    break

Um sicher zu gehen, dass dies nicht an Apps liegt, rufe ich @ aappstats.recording.dont_record(), um keine Statistiken aufzuzeichnen.

Hat jemand eine Ahnung, was los sein könnte? Oder irgendwelche Hinweise, wie man dies debuggt / profiliert?

Update 1: Ich schaltete angc.set_debug(gc.DEBUG_STATS) auf dem Produktionscode, und ich sehe den Garbage Collector regelmäßig aufgerufen, so dass es ist versuchen Müll zu sammeln. Wenn ich ein @ anrugc.collect() am Ende der Schleife (auch das Ende der Anfrage); es gibt @ zurü0, und hilft nicht.

Update 2: Ich habe ein bisschen gehackt, um Guppy dazu zu bringen, auf dev_appserver zu arbeiten, und dies schien darauf hinzudeuten, dass nach einem explizitengc.collect() Am Ende der Schleife wurde der größte Teil des Speichers durch ein "Diktat von google.appengine.datastore.entity_pb.Property" belegt.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage