Использование памяти для запросов к БД Google App Engine

Когда я выполняю запрос к большому набору небольших объектов (15 тыс. Объектов с несколькими короткими строковыми и логическими свойствами), ничего не делая с этими объектами, я вижу, как постоянно увеличивается использование памяти моего экземпляра (увеличение на 70 МБ). Увеличение памяти не выглядит пропорционально количеству данных, которые ему когда-либо нужно хранить в памяти только для запроса.

Цикл, который я использую, следующий:

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

Чтобы быть уверенным, что это не из-за appstats, я звонюappstats.recording.dont_record() не записывать какую-либо статистику.

Кто-нибудь знает, что может происходить? Или какие-либо указатели о том, как отладить / профиль этого?

Обновление 1: Я включилgc.set_debug(gc.DEBUG_STATS) на производственном коде, и я вижу, что сборщик мусора вызывается регулярно, поэтому онявляется пытаюсь собрать мусор. Когда я звонюgc.collect() в конце цикла (также в конце запроса); это возвращается0и не помогает.

Обновление 2Я сделал несколько взломов, чтобы заставить гуппи работать на dev_appserver, и это, казалось, указывало, что после явногоgc.collect() в конце цикла большая часть памяти была занята «диктом google.appengine.datastore.entity_pb.Property».

Ответы на вопрос(2)

Ваш ответ на вопрос