Uso da memória de consulta do banco de dados do Google App Engine

Quando executo uma consulta em um grande conjunto de objetos pequenos (objetos de 15k com apenas algumas propriedades curtas e booleanas), sem fazer nada com esses objetos, vejo o uso de memória da minha instância aumentando continuamente (aumento de 70Mb). O aumento de memória não parece proporcional à quantidade de dados que ele precisa manter na memória apenas para a consulta.

O loop que eu uso é o seguinte:

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 ter certeza de que isso não se deve a appstats, eu ligoappstats.recording.dont_record() para não registrar nenhuma estatística.

Alguém tem alguma idéia do que pode estar acontecendo? Ou alguma dica sobre como depurar / criar um perfil?

Atualização 1: Eu ligueigc.set_debug(gc.DEBUG_STATS) no código de produção e vejo o coletor de lixo sendo chamado regularmente,é tentando coletar lixo. Quando ligo paragc.collect() no final do loop (também no final da solicitação); retorna0e não ajuda.

Atualização 2: Fiz alguns hackers para que o guppy funcionasse no dev_appserver, e isso pareceu apontar que, depois de um explícitogc.collect() no final do loop, a maior parte da memória foi consumida por um 'ditado de google.appengine.datastore.entity_pb.Property'.

questionAnswers(2)

yourAnswerToTheQuestion