[Checkins] SVN: relstorage/trunk/relstorage/adapters/packundo.py Slicing 4.5 million element lists might not have been the best idea.
Shane Hathaway
shane at hathawaymix.org
Wed Feb 2 10:30:40 EST 2011
Log message for revision 120054:
Slicing 4.5 million element lists might not have been the best idea.
Changed:
U relstorage/trunk/relstorage/adapters/packundo.py
-=-
Modified: relstorage/trunk/relstorage/adapters/packundo.py
===================================================================
--- relstorage/trunk/relstorage/adapters/packundo.py 2011-02-02 15:13:56 UTC (rev 120053)
+++ relstorage/trunk/relstorage/adapters/packundo.py 2011-02-02 15:30:40 UTC (rev 120054)
@@ -124,17 +124,25 @@
del all_refs # Free some RAM
keep_list = list(keep_set)
keep_list.sort()
- log.info("pre_pack: marking objects reachable: %d", len(keep_set))
- while keep_list:
- batch = keep_list[:1000]
- keep_list = keep_list[1000:]
+ log.info("pre_pack: marking objects reachable: %d", len(keep_list))
+ batch = []
+
+ def upload_batch():
oids_str = ','.join(str(oid) for oid in batch)
+ del batch[:]
stmt = """
UPDATE pack_object SET keep = %%(TRUE)s, visited = %%(TRUE)s
WHERE zoid IN (%s)
""" % oids_str
self.runner.run_script_stmt(cursor, stmt)
+ for oid in keep_list:
+ batch.append(oid)
+ if len(batch) >= 10000:
+ upload_batch()
+ if batch:
+ upload_batch()
+
def _traverse_graph_sql(self, cursor):
"""Visit the entire object graph and set the pack_object.keep flags.
More information about the checkins
mailing list