交易&在外部调用函数时写性能

时间:2012-05-14 18:42:55

标签: postgresql psycopg2

我有一个存储函数,我从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

1 个答案:

答案 0 :(得分:0)

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