Hello everyone, I nailed the problem with performance, it wasn't the 'big query' not loading collections, but this one:
rsvs = session.query(Reservation).filter(Reservation.project_id.in_(projids)).filter(Reservation.status == 'pending').filter(Reservation.end_date > todaydt).all() The problem with this is that it generates lots of single queries, selecting Reservations one by one according to id (debug log below). I have absolutely no idea why this happens instead of INNER JOIN on NewHosts. I have relations defined as follows: newhosts_table = Table('newhosts',md, Column('id',Integer,primary_key=True), Column('ip',String), Column('hostname',String), Column('location',String), Column('architecture_id',Integer,ForeignKey('architecture.id')), Column('os_kind_id',Integer,ForeignKey('os_kind.id')), Column('os_version_id',Integer,ForeignKey('os_version.id')), Column('virtualization_id',Integer,ForeignKey('virtualization.id')), Column('shareable',SLBoolean), Column('shareable_between_projects',SLBoolean), Column('cpu',String), Column('ram',String), Column('notes',String), Column('physical_box',SLBoolean), Column('project_id',Integer,ForeignKey('project.id'))) reservation_table = Table('reservation', md, Column('id',Integer,primary_key=True), Column('start_date',SLDate), Column('end_date',SLDate), Column('status', String), Column('businessneed', String), Column('notetohwrep',String), Column('email_id',Integer,ForeignKey('email.id')), Column('project_id',Integer,ForeignKey('project.id')) ) reservation_newhosts_assoc_table = Table('reservation_newhosts', md, Column('reservation_id',Integer,ForeignKey('reservation.id')), Column('host_id',Integer,ForeignKey('newhosts.id')) ) mapper(Reservation, reservation_table, properties={'email':relation(Email,order_by=Email.id), 'project':relation(Project, order_by=Project.id), 'hosts':relation(Host, secondary=reservation_hosts_assoc_table,backref='reservation'), 'newhosts':relation(NewHost, secondary=reservation_newhosts_assoc_table,backref='reservationnh')} ) mapper(NewHost, newhosts_table, properties={ 'architecture':relation(Architecture,order_by=Architecture.id,backref='newhosts'), 'os_kind':relation(OS_Kind,order_by=OS_Kind.id,backref='newhosts'), 'os_version':relation(OS_version, order_by=OS_version.id,backref='newhosts'), 'virtualization':relation(Virtualization,order_by=Virtualization.id, backref='newhosts'), 'project':relation(Project,order_by=Project.id, backref='newhosts'), 'reservations':relation(Reservation,secondary=reservation_newhosts_assoc_table, backref='newhost_reservations')} ) SQL: INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT newhosts.id AS newhosts_id, newhosts.ip AS newhosts_ip, newhosts.hostname AS newhosts_hostname, newhosts.location AS newhosts_location, newhosts.architectu re_id AS newhosts_architecture_id, newhosts.os_kind_id AS newhosts_os_kind_id, newhosts.os_version_id AS newhosts_os_version_id, newhosts.virtualization_id AS newhosts_virtualization_id, newhosts.shareable AS newhosts_shareable, newhosts.shareable_between_projects AS newhosts_shareable_between_projects, newhosts.cpu AS newhosts_cpu, newhosts.ram AS newhosts_ram, newhosts.notes AS newhosts_notes, newhosts.physic al_box AS newhosts_physical_box, newhosts.project_id AS newhosts_project_id FROM newhosts, reservation_newhosts WHERE %(param_1)s = reservation_newhosts.reservation_id AND newhosts.id = reservation_newhosts.host_id INFO:sqlalchemy.engine.base.Engine.0x...584c:{'param_1': 902} DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Col ('newhosts_id', 'newhosts_ip', 'newhosts_hostname', 'newhosts_location', 'newhosts_architecture_id', 'newhosts_os_kind_id', 'newhosts_os_version_id', 'newhos ts_virtualization_id', 'newhosts_shareable', 'newhosts_shareable_between_projects', 'newhosts_cpu', 'newhosts_ram', 'newhosts_notes', 'newhosts_physical_box', 'newhosts_project_id') INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT reservation.id AS reservation_id, reservation.start_date AS reservation_start_date, reservation.end_date AS reservation_end_date, reservation.status AS res ervation_status, reservation.businessneed AS reservation_businessneed, reservation.notetohwrep AS reservation_notetohwrep, reservation.email_id AS reservation_email_id, reservation.project_id AS reservation_ project_id FROM reservation WHERE reservation.id = %(id_1)s LIMIT 1 OFFSET 0 INFO:sqlalchemy.engine.base.Engine.0x...584c:{'id_1': 903} DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Col ('reservation_id', 'reservation_start_date', 'reservation_end_date', 'reservation_status', 'reservation_businessneed', 'reservation_notetohwrep', 'reservatio n_email_id', 'reservation_project_id') DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Row (903, datetime.date(2009, 10, 28), datetime.date(2009, 11, 1), 'pending', '#1', '1', 1, 13) INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT newhosts.id AS newhosts_id, newhosts.ip AS newhosts_ip, newhosts.hostname AS newhosts_hostname, newhosts.location AS newhosts_location, newhosts.architectu re_id AS newhosts_architecture_id, newhosts.os_kind_id AS newhosts_os_kind_id, newhosts.os_version_id AS newhosts_os_version_id, newhosts.virtualization_id AS newhosts_virtualization_id, newhosts.shareable AS newhosts_shareable, newhosts.shareable_between_projects AS newhosts_shareable_between_projects, newhosts.cpu AS newhosts_cpu, newhosts.ram AS newhosts_ram, newhosts.notes AS newhosts_notes, newhosts.physic al_box AS newhosts_physical_box, newhosts.project_id AS newhosts_project_id FROM newhosts, reservation_newhosts WHERE %(param_1)s = reservation_newhosts.reservation_id AND newhosts.id = reservation_newhosts.host_id INFO:sqlalchemy.engine.base.Engine.0x...584c:{'param_1': 903} DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Col ('newhosts_id', 'newhosts_ip', 'newhosts_hostname', 'newhosts_location', 'newhosts_architecture_id', 'newhosts_os_kind_id', 'newhosts_os_version_id', 'newhos ts_virtualization_id', 'newhosts_shareable', 'newhosts_shareable_between_projects', 'newhosts_cpu', 'newhosts_ram', 'newhosts_notes', 'newhosts_physical_box', 'newhosts_project_id') INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT reservation.id AS reservation_id, reservation.start_date AS reservation_start_date, reservation.end_date AS reservation_end_date, reservation.status AS res ervation_status, reservation.businessneed AS reservation_businessneed, reservation.notetohwrep AS reservation_notetohwrep, reservation.email_id AS reservation_email_id, reservation.project_id AS reservation_ project_id FROM reservation WHERE reservation.id = %(id_1)s LIMIT 1 OFFSET 0 INFO:sqlalchemy.engine.base.Engine.0x...584c:{'id_1': 904} DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Col ('reservation_id', 'reservation_start_date', 'reservation_end_date', 'reservation_status', 'reservation_businessneed', 'reservation_notetohwrep', 'reservatio n_email_id', 'reservation_project_id') DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Row (904, datetime.date(2009, 10, 28), datetime.date(2009, 11, 1), 'pending', '#58', '58', 58, 13) INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT newhosts.id AS newhosts_id, newhosts.ip AS newhosts_ip, newhosts.hostname AS newhosts_hostname, newhosts.location AS newhosts_location, newhosts.architectu re_id AS newhosts_architecture_id, newhosts.os_kind_id AS newhosts_os_kind_id, newhosts.os_version_id AS newhosts_os_version_id, newhosts.virtualization_id AS newhosts_virtualization_id, newhosts.shareable AS newhosts_shareable, newhosts.shareable_between_projects AS newhosts_shareable_between_projects, newhosts.cpu AS newhosts_cpu, newhosts.ram AS newhosts_ram, newhosts.notes AS newhosts_notes, newhosts.physic al_box AS newhosts_physical_box, newhosts.project_id AS newhosts_project_id FROM newhosts, reservation_newhosts WHERE %(param_1)s = reservation_newhosts.reservation_id AND newhosts.id = reservation_newhosts.host_id INFO:sqlalchemy.engine.base.Engine.0x...584c:{'param_1': 904} DEBUG:sqlalchemy.engine.base.Engine.0x...584c:Col ('newhosts_id', 'newhosts_ip', 'newhosts_hostname', 'newhosts_location', 'newhosts_architecture_id', 'newhosts_os_kind_id', 'newhosts_os_version_id', 'newhos ts_virtualization_id', 'newhosts_shareable', 'newhosts_shareable_between_projects', 'newhosts_cpu', 'newhosts_ram', 'newhosts_notes', 'newhosts_physical_box', 'newhosts_project_id') INFO:sqlalchemy.engine.base.Engine.0x...584c:SELECT reservation.id AS reservation_id, reservation.start_date AS reservation_start_date, reservation.end_date AS reservation_end_date, reservation.status AS res ervation_status, reservation.businessneed AS reservation_businessneed, reservation.notetohwrep AS reservation_notetohwrep, reservation.email_id AS reservation_email_id, reservation.project_id AS reservation_ project_id FROM reservation WHERE reservation.id = %(id_1)s LIMIT 1 OFFSET 0 INFO:sqlalchemy.engine.base.Engine.0x...584c:{'id_1': 905} --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---