Cha*_*ieB 2 postgresql performance
我正在评估时间序列应用程序的 postgresql 性能,特别是插入。我正在运行速度测试脚本sqlalchemy
https://docs.sqlalchemy.org/en/13/faq/performance.html#im-inserting-400-000-rows-with-the-orm-and-it-真的很慢。你可以忽略 ORM 的东西,它是显示性能的倒数第二个“核心”行。
我预计每秒会看到 10 到 100k 写入,例如(https://docs.timescale.com/latest/introduction/timescaledb-vs-postgres):
但是,我得到的是以下内容:
所以每秒写入 358 次!相比之下,sqlite 每秒写入 83k。
这对我来说似乎真的很慢,但我在 Windows 安装、Windows 上的 Docker、本机 Ubuntu 和 Ubuntu 上的 Docker 中始终获得这种性能。
我的期望与现实不符,还是我做错了什么?
编辑:
澄清一下,我还没有使用 Timescale DB 的 hyptertables 功能,只是普通的 PostgreSQL 表。我正在使用 TimescaleDB docker 安装进行 docker 测试(尽管不是本机测试)。具体来说,我正在调用
docker run -d --rm -p 5433:5432 -e POSTGRES_PASSWORD=password timescale/timescaledb:latest-pg12
Run Code Online (Sandbox Code Playgroud)
正如 @LaurenzAlb 暗示的那样,使用 SQLAlchemy 获得 PostgreSQL 良好插入性能的技巧是更好地管理事务。SQLAlchemy 可以(但默认情况下不)使用 psycopg2 的executemany
PostgreSQL 帮助程序。
打开这些功能可以提高对同一个表进行多次插入的性能。这是 python 测试的修改后的代码。
engine = create_engine(DB_NAME, echo=False, executemany_mode='values')
Run Code Online (Sandbox Code Playgroud)
和executemany_mode=None
:
SQLAlchemy Core: Total time for 50000 records 95.0814561843872 secs = 525.8648952855459 /s
Run Code Online (Sandbox Code Playgroud)
和executemany_mode="values"
:
SQLAlchemy Core: Total time for 50000 records 1.761573314666748 secs = 28383.71788656377 /s
Run Code Online (Sandbox Code Playgroud)
有关说明,请参阅https://docs.sqlalchemy.org/en/13/dialects/postgresql.html#psycopg2-batch-mode 。
归档时间: |
|
查看次数: |
8419 次 |
最近记录: |