1

我有一个从 python 脚本(使用 psycopg2)调用的存储函数,它平均执行大约 10 个 UPDATE 或 INSERT 语句。iostat 显示我经常达到 15k 写入/秒和 100% 的利用率。

我希望我可以改变一些东西来减少那些 iostat 数字,因为我需要该功能尽快运行。

在这种情况下,关于事务和功能的最佳策略是什么?我应该什么时候执行提交?

我记得在某处读过这样的调用我存储的函数会自动开始和结束我的事务。做其他事情会更好吗,比如将所有函数参数插入一个充当队列的表中,然后我修改我的函数以读取该表并完成它的工作?

从评论中的链接输出,

version                      | PostgreSQL 9.1.3 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-51), 64-bit
checkpoint_completion_target | 0.9
checkpoint_segments          | 32
client_encoding              | UTF8
default_statistics_target    | 100
effective_cache_size         | 8GB
lc_collate                   | en_US.UTF-8
lc_ctype                     | en_US.UTF-8
log_destination              | stderr
log_rotation_age             | 1d
log_rotation_size            | 0
log_truncate_on_rotation     | on
logging_collector            | on
maintenance_work_mem         | 64MB
max_connections              | 30
max_stack_depth              | 2MB
port                         | 5432
server_encoding              | UTF8
shared_buffers               | 4GB
synchronous_commit           | off
temp_buffers                 | 128MB
TimeZone                     | US/Eastern
wal_buffers                  | 16MB
work_mem                     | 128MB
4

1 回答 1

0

除了 kgrittin 提出的改进磁盘子系统的建议之外,我想对事务提出一点意见。事务在 WAL 上强制执行 fsync,因此提交越少,强制的物理写入就越少。一般来说,事务的逻辑分组比性能更重要,但这确实意味着较长的事务,只要它们不互相等待,将比大量较短的事务执行得更好。

于 2013-04-01T12:15:20.097 回答