Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.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
PostgreSql查询缓存逻辑_Postgresql - Fatal编程技术网

PostgreSql查询缓存逻辑

PostgreSql查询缓存逻辑,postgresql,Postgresql,所以我有一个有1.4亿条目的数据库。第一次查询大约需要500毫秒,重复查询需要8毫秒。所以有一些缓存 我想了解更多关于这个缓存存在多长时间的信息,它被刷新的条件是什么,等等-时间或者表中新条目的数量 向表中添加约1500个新条目仍会产生大约10毫秒的查询。但添加150k将重置缓存。因此,可能两者都有,或者只有事务计数 谁有好的资源,这样我就可以得到更多的信息 我做了负载测试。PostgreSQL使用简单的时钟扫描算法来管理PostgreSQL行话中的缓存“共享缓冲区” 共享缓冲区位于共享内存中,

所以我有一个有1.4亿条目的数据库。第一次查询大约需要500毫秒,重复查询需要8毫秒。所以有一些缓存

我想了解更多关于这个缓存存在多长时间的信息,它被刷新的条件是什么,等等-时间或者表中新条目的数量

向表中添加约1500个新条目仍会产生大约10毫秒的查询。但添加150k将重置缓存。因此,可能两者都有,或者只有事务计数

谁有好的资源,这样我就可以得到更多的信息


我做了负载测试。

PostgreSQL使用简单的时钟扫描算法来管理PostgreSQL行话中的缓存“共享缓冲区”

共享缓冲区位于共享内存中,所有对数据的访问都是通过该缓存进行的。缓存在RAM中的8kB块也称为缓冲区

无论何时使用缓冲区,其使用计数都会增加,最多为5

存在使用计数为0的可用缓冲区列表。如果空闲列表为空,任何搜索要替换的受害者缓冲区的人都会以循环方式通过共享缓冲区,并减少他们遇到的每个缓冲区的使用计数。如果使用计数为0,缓冲区将被逐出并重新使用


如果缓冲区脏了,它已被修改,但尚未写入磁盘,则必须先将其写出来,然后才能将其逐出。大多数脏缓冲区在一个常规检查点期间被写入,少数脏缓冲区在检查点之间被后台编写器写入。有时,正常的工作进程也必须这样做,但这应该是一个例外。

查询结果不会被缓存。它是缓存的基础表数据。如果您不知道,那么您得到的答案可能没有多大意义。@jjanes如果扫描表,那么为什么所有查询都没有那么快?在本例中,是缓存索引分区的真实表吗?底层索引数据块也可以缓存,就像底层表的块一样。