根据docs
wal_keep_segments(整数)指定过去日志的最小数量 文件段保存在pg_xlog目录中
同时根据我的经验 - 你创建一个slave并从默认值更改wal_keep_segments让它为64,并观察随着xlogs的数量开始增长直到达到64个文件。我认为这是最大值,而不是最小值。
然后,如果你创建一个超过16M * 64 = 1GB的事务,奴隶就会被打破,说它需要删除WAL文件。因为MAXIMUM文件的数量少于需要的数量,对吧? 所以问题是:为什么 MINIMUM ?为什么不 MAXIMUM ?
更新:AS文档在第一句中说明我正在谈论流式复制
这些设置控制内置流媒体的行为 复制功能
master,而不是slave(没有级联复制)
18.6.1。发送服务器
archive_command
是“无所事事”cd .
而restore_command
中的recovery.conf
根本没有设置
答案 0 :(得分:8)
要直接回答您的问题,为什么最低限度,为什么不最大?因为新的WAL段可以比RemoveOldXlogFiles(_logSegNo, recptr)
函数增长得快,所以可以删除旧的段。
另外,计算docs中可能的WAL段数的公式是错误的。我总是比checkpoint_segments + wal_keep_segments + 1
多了几个WAL这个更准确的公式:wal_keep_segments + 2 * checkpoint_segments + 1
这里有一个古老而又非常好的帖子:http://www.postgresql.org/message-id/CAECtzeUeGhwCiNTishH=+kxhiepJsHu7EO0J6-LEVO-ek5oPkg@mail.gmail.com
如果你进行大量插入,你的WAL段将比它们被移除的速度更快。这让我这个星期。我希望pg_xlog保持相对恒定的大小。有一个大型的过程在晚上运行,当我第二天早上上班时,我的postgres实例崩溃了,因为我安装到那些WAL上的音量已经完全充满了。 Postgres填满了音量,试图写更多的WAL,不能,并且突然死亡。幸运的是,我们在pgpool2后面运行复制品。
如果您有好奇心,我建议您浏览postgres源代码。它是巨人而且在C中,但代码注释确实有帮助。这个文件尤其具有启发性,因为它涉及到检查点如何工作以及如何删除旧的WAL段的细节:https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c
答案 1 :(得分:3)
xlogs的数量开始增长,直到达到64个文件。 我认为这是最大值,而不是最小值。
不,这不是最大值。最大值的公式在文档中给出 http://www.postgresql.org/docs/current/static/wal-configuration.html
总会有至少一个WAL段文件,并且通常会 不超过(2 + checkpoint_completion_target)* checkpoint_segments + 1或checkpoint_segments + wal_keep_segments + 1 文件。每个段文件通常为16 MB(尽管此大小可以是 在构建服务器时改变了)。您可以使用它来估计空间 对WAL的要求。
您提到的有关需要删除的WAL文件的从属设备的问题应该在上下文中查看,也就是说,如何配置日志传送或者根本没有配置它,以及您是否正在使用Hot Standby或Streaming Replication。
有关可能比主要文档更容易理解的解释,请参阅https://wiki.postgresql.org/wiki/Binary_Replication_Tutorial。
答案 2 :(得分:1)
这是最小的,因为WAL文件是在你需要恢复的情况下保存的,它们可以在短时间内超过$formName = strtolower($_POST['formName']);
$formPass = $_POST['formPass'];
$con = new mysqli("localhost", "root", "Password1", "project");
if ($con->connect_errno) {
printf("Connect failed: %s\n", $users->connect_error);
exit();
};
$login = $con->prepare("SELECT userID FROM users WHERE userName=?");
$login->prepare("s", $formName);
$login->execute();
$login->store_result();
if($login->num_rows > 0) {
$login->bind_result($userID);
while($login->fetch()) {
$pass = $con->prepare("SELECT userPass FROM users WHERE userID=?");
$pass->bind_param("i", $userID);
$pass->execute();
$pass->bind_result($userPass);
while($pass->fetch()) {
if(hash_equals($userPass, password_hash($formPass,$userPass))) {
echo 'Correct Password';
} else {
echo 'Incorrect password';
}
};
$pass->close();
};
} else {
echo 'Username not found';
};
$login->close();
,但永远不会少,因为WAL文件的数量决定了备用服务器的数量在无法赶上之前落后。