ZFS:使用PostgreSQL的ARC和缓冲区caching

我正在使用Ubuntu Xenial,zfs和PostgreSQL 9.5以及所有可用的atm更新。 所有的testing都在EC2 m4.xlarge(8GB RAM)和表格大小〜4GB上完成。 PostgreSQL effective_cache_size = 6GB。

第一个版本:primarycache =元数据,arc_max_size = 1GB(testing4和6GB),arc_size =〜160mb,但Ubuntu不使用buff / cache进行顺序扫描(free -m表示buff / cache = 200MB,不增长)而是每次执行查询时从磁盘读取数据。 所以查询非常缓慢。

第二种情况:primarycache = all,arc_max_size = 4GB。 顺序读取被caching,但是无论何时更改数据库(Postgres从主服务器接收到更新),caching都将变为无效(我看到Postgres从磁盘读取数据)。

我做错了什么?

PS

cat /etc/modprobe.d/zfs.conf options zfs zfs_prefetch_disable=1 options zfs zfs_nocacheflush=1 options zfs zfs_arc_max=7073741824 

我在zfs上学到的东西 – 讨论和实验期间:

  • zfs_prefetch_disable = 1 – 显着降低seq扫描的性能 – 不要禁用它
  • zfs_nocacheflush = 1 – 导致数据损坏 – 不启用它

ZFSconfiguration适用于我,甚至比ext4更快的seq读取:

  • recordsize = 8K pg_data_95
  • recordsize = 8K pg_wal_95
  • atime =closurespg_data_95
  • atime =closurespg_wal_95
  • relatime =在pg_data_95上
  • relatime =在pg_wal_95上
  • logbias =吞吐量pg_data_95
  • 压缩= lz4 pg_data_95
  • 压缩= lz4 pg_wal_95
  • xattr = sa pg_data_95
  • xattr = sa pg_wal_95
  • primarycache =元数据pg_wal_95

我也设置ashift = 9,以获得更好的压缩,但它是在EC2 EBS无论如何默认。