Thanks Mike - will the full profile ASAP.

On Monday, March 7, 2016, Mike Bayer <clas...@zzzcomputing.com> wrote:

> What will make inserts slow is network as well as indexes.   If you aren't
> comparing your script to some other backend then there's probably a whole
> lot of other things that can get in the way like unicode encoding, large
> columns or other surprises in the model.   If you run the full profile
> version from the FAQ (please refer to the 1.0 documentation... Also you're
> on sqla 1.0 right?) I can identify where the time is spent with a full
> Python profile.
>
> On Mar 7, 2016, at 7:12 PM, jbrownst...@clearcosthealth.com
> <javascript:_e(%7B%7D,'cvml','jbrownst...@clearcosthealth.com');> wrote:
>
> I've run sqlalchemy on MySQL dbs and never had a problem with performance,
> but when I started writing an app that connected to Microsoft SQL Server
> 2014 via pyodbc I ran into a serious performance problem.
> I'm running the app on my laptop and the database server IS in a VPN but
> my internet is fast enough and the vpn connection is reportedly fast.
>
> I decided to run the performance script via the
> http://docs.sqlalchemy.org/en/rel_0_8/faq.html (copied below for
> convenience)
> The FAQ reports being able to insert ***100,000 rows in ~14seconds** *when
> I run the script below I am inserting ***1000 rows in ~100 seconds***
>
> Is there some additional profiling that I can do?
> Is there something wrong with my connection set up?
>
> *OUTPUT:*
> before init
> engine: 0.0750000476837
> session remove: 0.0759999752045
> session configure: 0.0770001411438
> drop all: 1.02800011635
> create all: 1.28400015831
> init complete 1.28600001335
> flush complete 0.192000150681 // total rows added: [0]
> flush complete 115.700000048 // total rows added: [1000]
> flush complete 220.65199995 // total rows added: [2000]
>
>
> CODE
> import time
>
> from sqlalchemy.ext.declarative import declarative_base
> from sqlalchemy import Column, Integer, String,  create_engine
> from sqlalchemy.orm import scoped_session, sessionmaker
>
> import urllib
>
> Base = declarative_base()
> DBSession = scoped_session(sessionmaker())
> engine = None
>
> server = "xx.xxx.xx.xx,xxxxx"
> database = "test"
>
> raw_connection_string = "DRIVER={SQL Server Native Client
> 11.0};Server=%s;Database=%s;TDS_Version=8.0;Trusted_Connection=yes;" %
> (server, database)
> quoted = urllib.quote_plus(raw_connection_string)
> connection_string = "mssql+pyodbc:///?odbc_connect={}".format(quoted)
>
> ECHO = None # "debug"
>
>
> class Customer(Base):
>     __tablename__ = "customer"
>     id = Column(Integer, primary_key=True)
>     name = Column(String(255))
>
> def init_sqlalchemy(dbname='jason'):
>     global engine
>     t0 = time.time()
>     engine = create_engine(connection_string, echo=ECHO)
>     print 'engine: %s' % str(time.time() - t0)
>     DBSession.remove()
>     print 'session remove: %s' % str(time.time() - t0)
>     DBSession.configure(bind=engine, autoflush=False,
> expire_on_commit=False)
>     print 'session configure: %s' %  str(time.time() - t0)
>     Base.metadata.drop_all(engine)
>     print 'drop all: %s' %  str(time.time() - t0)
>     Base.metadata.create_all(engine)
>     print 'create all: %s' %  str(time.time() - t0)
>
> def test_sqlalchemy_orm(n=100000):
>     t0 = time.time()
>     print 'before init'
>     init_sqlalchemy()
>     print 'init complete %s' % str(time.time() - t0)
>
>     t0 = time.time()
>     for i in range(n):
>
>         customer = Customer()
>         customer.name = 'NAME ' + str(i)
>         DBSession.add(customer)
>         if i % 1000 == 0:
>             DBSession.flush()
>             print 'flush complete %s // total rows added: [%s]' %
> (str(time.time() - t0), i)
>     DBSession.commit()
>     print("SQLAlchemy ORM: Total time for " + str(n) +
>                 " records " + str(time.time() - t0) + " secs")
>
>
> if __name__ == '__main__':
>     test_sqlalchemy_orm(100000)
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to sqlalchemy+unsubscr...@googlegroups.com
> <javascript:_e(%7B%7D,'cvml','sqlalchemy%2bunsubscr...@googlegroups.com');>
> .
> To post to this group, send email to sqlalchemy@googlegroups.com
> <javascript:_e(%7B%7D,'cvml','sqlalchemy@googlegroups.com');>.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/sqlalchemy/2Safb9uhgjg/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com
> <javascript:_e(%7B%7D,'cvml','sqlalchemy%2bunsubscr...@googlegroups.com');>
> .
> To post to this group, send email to sqlalchemy@googlegroups.com
> <javascript:_e(%7B%7D,'cvml','sqlalchemy@googlegroups.com');>.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to