Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在大型PostgreSQL表上更新查询太慢_Database_Postgresql_Database Performance_Amazon Rds_Postgresql 9.3 - Fatal编程技术网

Database 在大型PostgreSQL表上更新查询太慢

Database 在大型PostgreSQL表上更新查询太慢,database,postgresql,database-performance,amazon-rds,postgresql-9.3,Database,Postgresql,Database Performance,Amazon Rds,Postgresql 9.3,我试图提高简单更新查询的速度,但一行需要0.7-1.5秒,这太慢了 UPDATE users SET firstname = 'test' WHERE userid=2120; 以下是解释: Update on users (cost=0.43..8.45 rows=1 width=331) (actual time=0.068..0.068 rows=0 loops=1) -> Index Scan using users_pkey on users (cost=0.43..8.

我试图提高简单更新查询的速度,但一行需要0.7-1.5秒,这太慢了

UPDATE users SET firstname = 'test' WHERE userid=2120;
以下是解释:

Update on users  (cost=0.43..8.45 rows=1 width=331) (actual time=0.068..0.068 rows=0 loops=1)
->  Index Scan using users_pkey on users  (cost=0.43..8.45 rows=1 width=331) (actual time=0.039..0.040 rows=1 loops=1)
    Index Cond: (userid = 2120)
Trigger updatemv: time=727.372 calls=1
Total runtime: 727.487 ms
数据库总大小为20GB,约60个表。我对包含136万行的表“users”有问题。表“users”有36列(4个bigint、5个整数、10个字符(从32到255)和其他布尔字段),其中一半对于许多行为空。“用户”表上还有6个索引。数据库托管在Amazon RDS db.m4.2xlarge上,带有8个vCPU、32 GB RAM和100 GB SSD。PostgresSQL的版本是9.3

我试着用真空吸尘器分析表格,这很有帮助,但还是太慢了

UPDATE users SET firstname = 'test' WHERE userid=2120;
我读过关于升级RAM/CPU、在postgresql.conf中调优数据库、为大表创建单独的表空间等内容,但我不确定处理百万行大表的最佳方法是什么

按照目前的趋势,我的表在未来12个月内将增长到2000万行,所以我需要持久的解决方案


任何关于如何提高大型表的更新查询速度的建议都很有帮助。

调整postgresql.conf中的参数会产生巨大的影响,而且是免费的,因此我将从这里开始。默认值太低了

谢谢@joop我解决了我的问题。我必须触发刷新物化视图。当我删除它时,更新查询只需要0.123毫秒,而不是727.487毫秒,快了6000倍


我以不同的方式组织了物化视图。

我遗漏了一些东西。136万行的20GB为每行l5k。只分布在36列中?这些都是非常大的列,特别是当大多数都是
NULL
Trigger updatemv:time=727.372 calls=1
此表上有触发器,或者其他具有引用它的FKs的表?@GordonLinoff数据库有大约60个表,总大小为20GB。我对最大的表“users”有问题,它有136万行。我认为没有大的专栏。它是4个bigint、3个整数、15个字符(从32到255)、5个时间戳和布尔字段。检查显而易见的问题:其他修改事务是否会锁定?您似乎有一个物化视图,当此表更改时,该视图将被更新。视图的更新似乎是由名为updatemv的触发器触发的。