pg_stat_statements是否使用相同的stats_temp_directory目录?我们的stats_temp_directory位于居住在tmps的/var/run/postgresql下。我们在一个实例中有大约500个数据库,并将pg_stat_statements.max设置为10000000 (20000条语句/ db)。
我们不希望pg_stat_statements成为i/o的一个主要因素(我们执行大量短时间运行的查询)。似乎无法在pg_状态_语句中找到这些信息。
postgres=# select version();
version
-------------------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 9.6.10 on x86_64-pc-linux-gnu (Ubuntu 9.6.10-1.pgdg16.04+1), compiled by gcc (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609, 64-bit
(1 row)发布于 2018-09-23 19:36:09
pg_stat_statements总是使用文字目录"pg_stat_tmp",即使"stats_temp_directory“参数已更改为指向其他位置。
请参阅源代码中的本说明:
外部查询文本文件的位置。我们不把它保存在核心系统的stats_temp_directory中。核心系统可以安全地使用该GUC设置,因为统计数据收集器临时文件路径只设置一次,作为更改GUC的一部分,但是pg_stat_statements无法避免竞争条件。此外,对于查询字符串,我们只期望适度的、不频繁的I/O,因此将文件放置在更快的文件系统上是不太必要的。
大量的短运行查询都是完全不同的查询吗?如果它们都标准化到一组较小的查询(即仅在提供的参数值上不同的组,而不是在SQL语法元素或SQL标识符中),那么它们将不会生成IO,因为pg_stat_statements只需要更新内存中的计数器,而不是磁盘上的规范化查询文本。
发布于 2018-09-23 17:33:42
pg_stat_statements将整个pg_stat_statements.max保存在内存中。所以请检查一下你是否有足够的内存。所有内存都是在开始时分配的,即使您不需要所有内存。当postgres服务器停止时,所有统计信息都将保存到磁盘中,如果您激活它,请在pg_stat_statements.save中选中postgresql.conf。
因此,好消息是,没有IO加载:)再次,请检查可用内存。
https://dba.stackexchange.com/questions/218351
复制相似问题