当我运行自己创建的PHP程序时,我的系统上发生了一个奇怪的问题。我从两个表中获取数据,并对表A和表B中的数据进行比较。如果该记录不在表A中,则将该记录写入表B。我发现该程序运行正常,但至少有一条记录必须首先在表B中。在我第一次成功运行后,表A中将有16000+条记录,现在表B中将有15000+条记录。我知道这将需要一些时间来处理。奇怪的是,我注意到程序运行时硬盘驱动器正在失去可用空间。我尝试手动运行垃圾回收。我还查看了会话文件的存储位置,只发现了一些很小的文件。我还尝试将会话文件的存储时间从1440秒调整为30秒。当我说我在“失去”可用空间时,有一些东西正在填满我的硬盘。我已经从6GB增加到5.75GB,如果我允许程序运行更长的时间,我只会损失更多的空间。我也尝试过只是重新启动系统,而我只能重新获得丢失的一小部分空间。在这一点上,我不确定该怎么做才能阻止这种情况的发生。以下是我的代码示例:
<?php
include('./connect_local_pdo.php'); //Includes DB Connection Script
ini_set('max_execution_time', 5400); //5400 seconds = 90 minutes
gc_disable();
try {
$tbl_a_data = $conn->prepare('SELECT col_a, col_b, col_c from table_a');
$tbl_a_data->execute();
$tbl_b_data = $conn->prepare('SELECT col_a, col_b, col_c from table_b');
$tbl_b_data->execute();
$tbl_b_array = $tbl_b_data->fetchAll(PDO::FETCH_ASSOC);
while($tbl_a_array = $tbl_a_data->fetch(PDO::FETCH_ASSOC)){
foreach ($tbl_b_array as $tbl_b_array2){
if ($tbl_a_array['col_a'] !== $tbl_b_array2['col_a']){
$stmt = $conn->prepare("INSERT INTO table_b
(col_a, col_b, col_c)
VALUES
(:col_a, :col_b, :col_c)");
$stmt->bindParam(':col_a', $tbl_a_array['col_a']);
$stmt->bindParam(':col_b', $tbl_a_array['col_b']);
$stmt->bindParam(':col_c', $tbl_a_array['col_c']);
$stmt->execute();
} else {
$stmt = $conn->prepare("update table_b
set
col_b = table_a.col_b,
col_c = table_a.col_c
from table_a
where table_b.col_a = table_a.col_a ");
$stmt -> execute();
}
}
}
gc_collect_cycles();
gc_mem_caches();
clearstatcache();
} catch (PDOException $a) {
echo $a->getMessage();//Remove or change message in production code
}
在此方面提供的任何帮助将不胜感激!截至本文发布之时,我已经失去了2个运行该程序的空间。
答案 0 :(得分:0)
与您一行
server <- function(input, output) {
output$placeholder <- renderUI(selectInput("dat", "Select Data:",
choices = c("mtcars", "ChickWeight")))
outputOptions(output, "placeholder", suspendWhenHidden=FALSE)
output$out <- renderPrint(summary(get(req(input$dat))))
}
我认为它是本地主机上的数据库。
数据库随着您的条目的增长而增长。添加行将需要空间。