在做服务器负载状态监控的时候,为了避免负载峰值而造成无用报警的问题,我用的办法是取最近10次负载的平均值。之前这个需求直接在django中用程序解决,不过运行一段时间后速度不是很理想。现在解决的思路是先在插入新数据的时候让数据库把负载计算好放在另外一个字段,然后在django中删除计算每台服务器负载平均值的代码,负载值改成直接读取平均值。因为数据库服务器现在压力不大,增加触发器后对性能的影响这些就没怎么考虑。
计算平均值Postgresql计算平均值的sql类似如下:
withsas(selectcast(load_15asfloat)fromasset_serverstatuswheresID_ID=10orderbyIDdesclimit10)selectavg(load_15)froms触发器函数
CREATEORREPLACEFUNCTIONfn_status_loadavg_insert()RETURNStriggerAS$BODY$BEGINupdateasset_serverstatussetload_avg=(withsas(selectcast(load_15asfloat)fromasset_serverstatuswheresID_ID=new.sID_IDorderbyIDdesclimit10)selectavg(load_15)froms)whereID=new.ID;returnnew;END;$BODY$LANGUAGEplpgsqlVolATILECOST100;
用pgsql写了个触发器的函数,基本思路其实就是更新。
为表添加触发器CREATETRIGGERtrg_status_loadavg_insertAFTERINSERTONasset_serverstatusFOREACHROWEXECUTEPROCEDUREfn_status_loadavg_insert();
这样Postgresql数据库中根据某条件,取某字段的平均值,然后插入到另外一个字段的实现就完成了。
记录下。
原文地址:http://www.sijitao.net/2030.HTML
总结以上是内存溢出为你收集整理的PostgreSQL根据某字段取平均值后插入另外字段实现一例全部内容,希望文章能够帮你解决PostgreSQL根据某字段取平均值后插入另外字段实现一例所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)