我在AWS RDS(m4.large 2vCPU,8GB内存)上具有Postgres(10.2)服务器,具有标准设置(关闭了同步提交),并且与我本地的SQLite相比,任何类型的SQLALchemy插入都非常慢笔记本电脑。
我运行了official SQLAlchemy docs中的性能脚本,请参见页面底部。
基本上,脚本所做的是创建一个表Customer
,该表具有一个主整数键id
和一个字符串列name
。该脚本只是以各种方式调用"INSERT INTO customer (name) VALUES (?)"
来插入1000行。
对于每月花费近200美元的AWS设置,结果确实是灾难性的:
SQLite结果:
SQLAlchemy ORM:1000条记录的总时间0.17040562629699707秒
SQLAlchemy ORM pk已给出:1000条记录的总时间0.08621740341186523秒
SQLAlchemy ORM bulk_save_objects():1000条记录的总时间0.027913570404052734秒
SQLAlchemy ORM bulk_insert_mappings():1000条记录的总时间0.014255523681640625秒
SQLAlchemy Core:1000条记录的总时间 0.010448455810546875秒
AWS Postgres结果:
SQLAlchemy ORM:1000条记录的总时间18.51957869529724秒
SQLAlchemy ORM pk已给出:1000条记录的总时间18.049689054489136秒
SQLAlchemy ORM bulk_save_objects():1000条记录的总时间18.0506489276886秒
SQLAlchemy ORM bulk_insert_mappings():1000条记录的总时间17.969014644622803秒
SQLAlchemy核心:1000条记录的总时间 22.948890209197998秒
所有插入方法都慢得多,核心方法甚至可以超过1000倍。这是Postgres配置问题吗?我的网络延迟不会那么糟:-)。谢谢!
由于@Laurenz,我使用pg_stat_statements
进行了调查,查询时间完全可以了。我怀疑这是网络问题。此外,我在与数据库相同的VPC中启动了一个小型EC2实例,并再次运行了性能脚本:性能提高了几个数量级(仅比SQLite慢5-20倍,但这是我所期望的)。 / p>
任何想法如何解决此网络问题?这可能是什么原因?我的意思是说,相对于需要通过互联网传输的字节而言,带有一些字符串数据的1000行并不多。是否有人在VPC中遇到了与AWS DB相同的问题?