Postgres - 使用Auto Vacumn手动锁定冲突

时间:2017-12-05 10:40:36

标签: postgresql locking

我正在系统的一部分,需要在“IN SHARE ROW EXCLUSIVE MODE NOWAIT”模式中锁定表格。

问题是Autovacumn守护进程(autovacuum:ANALYZE)在工作完成后立即在桌面上启动 - 停止下一个进程采取“IN SHARE ROW EXCLUSIVE MODE NOWAIT”。

桌子很大,所以真空需要一段时间。我可以在尝试锁定启动的事务之前检查这一点,并使用pg_cancel_backend来停止autovacuum守护程序。这有什么后果吗?另一种选择是手动安排吸尘,但在您阅读的任何地方,最好避免这种情况。是否有任何我错过的参数可以调整autovacuum以阻止它出现这样的行为?

由于

1 个答案:

答案 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)是一种选择。

但最好改变你的程序,这样你就不必一直明确地锁定表格。