Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 用pg_stat_语句收集大型统计集?_Performance_Postgresql - Fatal编程技术网

Performance 用pg_stat_语句收集大型统计集?

Performance 用pg_stat_语句收集大型统计集?,performance,postgresql,Performance,Postgresql,根据Postgres文件: 该模块需要与容量成比例的额外共享内存 pg_stat_statements.max。请注意,每当 即使pg_stat_statements.track设置为none,也会加载模块 而且: 代表性查询文本保存在外部磁盘文件中,并且 不要使用共享内存。因此,即使是很长的查询文本 可以成功存储。但是,如果需要许多长查询文本 累积后,外部文件可能会变得无法管理 从这些数据中,我们不清楚高pg_stat_语句的实际内存成本是多少。max会是-比如100k或500k(默认为5k)

根据Postgres文件:

该模块需要与容量成比例的额外共享内存 pg_stat_statements.max。请注意,每当 即使pg_stat_statements.track设置为none,也会加载模块

而且:

代表性查询文本保存在外部磁盘文件中,并且 不要使用共享内存。因此,即使是很长的查询文本 可以成功存储。但是,如果需要许多长查询文本 累积后,外部文件可能会变得无法管理

从这些数据中,我们不清楚高
pg_stat_语句的实际内存成本是多少。max
会是-比如100k或500k(默认为5k)。设定这么高的水平安全吗?这么高的水平会产生负面影响吗?在一定规模以上,通过logstash/fluentd将统计数据聚合到外部数据库是首选方法吗

1.

从我读到的内容来看,它对查询进行散列,并将其保存在DB中,将文本保存到FS中。因此,下一个问题比重载共享内存更值得关注:

如果累积了许多长查询文本,则外部文件可能会增长 难以管理的庞大

文本的散列比文本小得多,因此我认为您不应该担心与长查询相比扩展内存的消耗。特别是知道扩展使用了查询分析器(它将适用于每一个查询无论如何):

queryid哈希值是在解析后分析中计算的 查询的表示

设置pg_stat_语句。最大值要大10倍,我相信共享内存要大10倍。增长应该是线性的文档中没有这样说,但逻辑上应该如此

若将设置设置为distinct value安全或不安全,则并没有答案,因为并没有关于其他配置值和硬件的数据。但是,如果增长应该是线性的,考虑这个答案:“如果将其设置为5K,查询运行时几乎没有增长,那么将其设置为50K将使它几乎延长十倍”。顺便说一句,我的问题是——谁是龚如心挖掘50000条慢语句的人?:)

2.

此扩展已经为“dis-valued”语句进行了预聚合。您可以直接在DB上选择它,因此将数据移动到其他DB并在那里选择它只会给您带来卸载原始DB并加载另一个DB的好处。换言之,您可以节省50MB用于对原始数据进行查询,但在另一个数据上花费相同的内存。这有意义吗?对我来说——是的。这是我自己做的。但我也为语句保存执行计划(它不是pg_stat_语句扩展的一部分)。我相信这取决于你拥有什么和你拥有什么。当然,没有必要仅仅因为有许多查询就这样做。再说一遍,除非你有这么大的文件扩展名

作为一种恢复方法,如果发生这种情况,pg_stat_语句可以选择 放弃查询文本,因此 pg_stat_statements视图将显示空查询字段


我使用大量的物化视图运行,因此高
pg_stat_语句。max
requirement:)不太担心硬盘空间,主要是内存使用会降低实际查询性能。>这是我自己做的。如果可能的话,您可以分享更多关于您的首选设置以及如何处理从统计数据收集卸载主数据库的信息吗?大文件威胁不在于hdd空间,而在于解析它所需的时间。尝试以超级用户(读取语句表单文件)和非超级用户(无语句)的身份查询pg_stat_语句。如果你有一个大文件,时间会有很大的不同。我所做的是一个热修复程序风格的设置-不是最佳的,但这里是:我已经将max设置为1000(而不是更低的5倍)。我有一个作业,它使用dblink(没有查询,但使用它的散列)将pg_stat_语句复制到其他数据库,还有一个作业将散列和查询发送到不同的表(使用FK)。以及另一个保存当前执行计划并使用散列(FK)将其发送到第三个表的作业。通过这种方式,我可以比较执行时间和计划是否随时间变化。。。(Oracle有一些类似的内置CBO)所以基本上我不会从统计数据收集中卸载主数据库-它仍然收集主数据库并进行所有预聚合。但是我使用不同的数据库来保存历史数据和大量的查询。同时,primary只收集1000个数据,并在每个“复制”小时刷新它们。顺便说一句,您如何获取pg_stat_语句项的历史查询计划?