我正在系统的一部分,需要在“IN SHARE ROW EXCLUSIVE MODE NOWAIT”模式中锁定表格。
问题是Autovacumn守护进程(autovacuum:ANALYZE)在工作完成后立即在桌面上启动 - 停止下一个进程采取“IN SHARE ROW EXCLUSIVE MODE NOWAIT”。
桌子很大,所以真空需要一段时间。我可以在尝试锁定启动的事务之前检查这一点,并使用pg_cancel_backend来停止autovacuum守护程序。这有什么后果吗?另一种选择是手动安排吸尘,但在您阅读的任何地方,最好避免这种情况。是否有任何我错过的参数可以调整autovacuum以阻止它出现这样的行为?
由于
答案 0 :(得分:0)
如果你使autovacuum无法正常工作,那么当PostgreSQL关闭以避免因事务ID环绕而导致数据丢失时,你将导致表膨胀并最终导致停机风险。
禁用此表的自动清空(<html>
<body>
<?php while($row = mysql_fetch_assoc($query)): ?>
<div class="NewsItem">
<div>
<h1><?php echo $row['txt']; ?></a> <br>
<span>posted on <?php echo $row['added']; ?></span><span> by <?php echo $row['adder'];?></span>
</div>
<div class="imgdiv"><?php if(($row['imageurl'] == 'NULL') or ($row['imageurl']== '')){
//No images
}
else{
Line 95---- <img src="<?php echo $row['imageurl'];?>" width='300' height='300'/>
}
?></div>
<br>
<div>
<form action="comment.php"method="post" name="addComment"><input type="text" placeholder="kommentaar" name="commenttext" maxlenght="100"><input type="submit" name="addComment" value="Lisa kommentaar">
<input id="prodId3" name="prodId3" type="hidden" value="<?php echo $row['id']; ?>">
</form>
</div>
</div>
<?php
endwhile;
?>
)并定期安排手册ALTER TABLE ... SET (autovacuum_enabled = off)
是一种选择。
但最好改变你的程序,这样你就不必一直明确地锁定表格。