Postgres持续30%的CPU使用率

时间:2015-10-26 12:56:42

标签: windows postgresql centos database-migration

我最近将Postgres数据库从Windows迁移到CentOS 6.7。 在Windows上,数据库从未使用过多CPU,但在Linux上我看到它使用的是常量~30%的CPU(使用top)。 (机器上的4核心)

任何人都知道这是正常的,还是为什么会这样做? 该应用程序似乎运行良好,并且比Windows快或快。

注意,它是一个大型数据库,100gb +数据,1000多个数据库。

我尝试使用Pgadmin监控服务器状态,但服务器状态挂起,无法运行,错误" log_filename参数必须相等"

2 个答案:

答案 0 :(得分:3)

有1000个数据库,我希望真空工作者和统计数据收集者花大量时间检查需要维护的内容。

我建议你做两件事

  • 提高private class ItemFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { String filterString = constraint.toString().toLowerCase(); FilterResults results = new FilterResults(); final List<Movie> list = movieItems; int count = list.size(); final ArrayList<Movie> nlist = new ArrayList<Movie>(count); String filterableString ; for (int i = 0; i < count; i++) { filterableString = list.get(i).getName(); if (filterableString.toLowerCase().contains(filterString)) { nlist.add(list.get(i)); } } results.values = nlist; results.count = nlist.size(); return results; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence constraint, FilterResults results) { movieItems= (ArrayList<String>) results.values; notifyDataSetChanged(); } } 参数以减少检查次数
  • autovacuum_naptime放在ramdisk

您可能还设置了一个高stats_temp_directory限制,允许您的客户端使用那些大量的数据库,这是另一个可能的CPU负载来源,因为有大量的“插槽”和#39;每次后端必须与其他人同步时进行检查。

答案 1 :(得分:0)

增加服务器负载可能有多种原因。

  1. 如果要在服务器上查找查询级别加载,则应使用pg_stat_activity系统表将特定的Postgres后端ID与系统进程ID匹配。
  2.   

    SELECT pid,datname,usename,query FROM pg_stat_activity;

    一旦你知道正在运行什么查询,你可以进一步调查(EXPLAIN / EXPLAIN ANALYZE;检查锁等)。

    1. 您可能会遇到锁定争用问题,可能是由于 max_connections 非常高。如果是这种情况,请考虑降低max_connections并使用连接池。但这可以增加客户连接的周转时间。

    2. 可能是Windows系统阻塞连接而不允许使用系统。而现在Linus允许其连接使用CPU并且执行速度更快。 :P

    3. 另外值得一读:

      1. How to monitor PostgreSQL
      2. Monitoring CPU and memory usage from Postgres