PostgreSQL根据某字段取平均值后插入另外字段实现一例
2015-09-07 00:00
357 查看
摘要: 在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负载平均值的代码,负载值改成直接读取平均值。因为数据库服务器现在压力不大,增加触发器后对性能的影响这些就没怎么考虑。
在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负载平均值的代码,负载值改成直接读取平均值。因为数据库服务器现在压力不大,增加触发器后对性能的影响这些就没怎么考虑。
用pgsql写了个触发器的函数,基本思路其实就是更新。
这样PostgreSQL数据库中根据某条件,取某字段的平均值,然后插入到另外一个字段的实现就完成了。
记录下。
原文地址:http://www.sijitao.net/2030.html
在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负载平均值的代码,负载值改成直接读取平均值。因为数据库服务器现在压力不大,增加触发器后对性能的影响这些就没怎么考虑。
计算平均值
PostgreSQL计算平均值的sql类似如下:with s as (select cast(load_15 as float) from asset_serverstatus where sid_id=10 order by id desc limit 10) select avg(load_15) from s
触发器函数
CREATE OR REPLACE FUNCTION fn_status_loadavg_insert() RETURNS trigger AS $BODY$ BEGIN update asset_serverstatus set load_avg=( with s as (select cast(load_15 as float) from asset_serverstatus where sid_id=new.sid_id order by id desc limit 10) select avg(load_15) from s ) where id=new.id; return new; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;
用pgsql写了个触发器的函数,基本思路其实就是更新。
为表添加触发器
CREATE TRIGGER trg_status_loadavg_insert AFTER INSERT ON asset_serverstatus FOR EACH ROW EXECUTE PROCEDURE fn_status_loadavg_insert();
这样PostgreSQL数据库中根据某条件,取某字段的平均值,然后插入到另外一个字段的实现就完成了。
记录下。
原文地址:http://www.sijitao.net/2030.html
相关文章推荐
- PostgreSQL新手入门教程
- PostgreSQL教程(十):性能提升技巧
- PostgreSQL教程(二):模式Schema详解
- PostgreSQL教程(十三):数据库管理详解
- PostgreSQL教程(八):索引详解
- PostgreSQL教程(三):表的继承和分区表详解
- 简单介绍Ruby on Rails对PostgreSQL数组类型的支持
- PostgreSQL教程(十九):SQL语言函数
- PostgreSQL教程(四):数据类型详解
- PostgreSql新手必学入门命令小结
- 用一整天的时间安装postgreSQL NTFS权限
- FREEBSD安装POSTGRESQL笔记
- PostgreSQL8.3.3安装方法第1/2页
- 深入理解PostgreSQL的MVCC并发处理方式
- PostgreSQL教程(一):数据表详解
- PostgreSQL教程(十二):角色和权限管理介绍
- PostgreSQL教程(五):函数和操作符详解(1)
- 15个postgresql数据库实用命令分享
- Windows下Postgresql数据库的下载与配置方法