Uso de la memoria de consulta de base de datos de Google App Engine

Cuando ejecuto una consulta en un conjunto grande de objetos pequeños (15k objetos con solo una cadena corta y propiedades booleanas), sin hacer nada con estos objetos, veo que el uso de memoria de mi instancia aumenta continuamente (aumento de 70Mb). El aumento de memoria no parece proporcional a la cantidad de datos que necesita mantener en la memoria solo para la consulta.

El bucle que uso es el siguiente:

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

Para asegurarme de que esto no se deba a las estadísticas de la aplicación, llamoappstats.recording.dont_record() para no registrar ninguna estadística.

¿Alguien tiene alguna idea de lo que podría estar pasando? ¿O algún indicador sobre cómo depurar / perfilar esto?

Actualización 1: Encendígc.set_debug(gc.DEBUG_STATS) en el código de producción, y veo que el recolector de basura se llama regularmente, por lo quees tratando de recolectar basura. Cuando llamo agc.collect() al final del ciclo (también al final de la solicitud); vuelve0y no ayuda

Actualización 2: Hice un poco de pirateo para que guppy funcione en dev_appserver, y esto pareció señalar eso, después de un explícitogc.collect() al final del ciclo, la mayor parte de la memoria fue consumida por un 'dict of google.appengine.datastore.entity_pb.Property'.

Respuestas a la pregunta(2)

Su respuesta a la pregunta