Я нашел лучший способ, особенно потому, что я хотел, чтобы вывод был зарегистрирован, должен был использовать пакет «daemonize». Если вы находитесь в CentOS / Redhat, как показано ниже. Вероятно, для него есть и apt-пакет.
- name: yum install daemonize
yum:
name: daemonize
state: latest
- name: run in background, log errors and standout to file
shell: daemonize -e /var/log/myprocess.log -o /var/log/myprocess.log /opt/myscripts/myprocess.sh
Вы должны использовать запрос INSERT с оператором SELECT, который выполняется намного быстрее. Пример:
INSERT INTO table (column1, column2)
SELECT column1,
column2
FROM table2
, где table2 - ваша таблица 0_suppliers.
mysqli_begin_transaction($daffff);
$result= mysqli_query($daffff, "select * from 0_suppliers");
while ($tran_pucha1we = mysqli_fetch_array($result)) {
//Several Inserts here
}
mysqli_commit($daffff);
$result= mysqli_query($daffff, "select * from 0_suppliers");
$insert1 = mysqli_prepare($daffff, "INSERT INTO MyTable1 (col1, col2, col3) VALUES (?, ?, ?)");
$insert2 = mysqli_prepare($daffff, "INSERT INTO MyTable2 (col1, col2, col3) VALUES (?, ?, ?)");
while ($tran_pucha1we = mysqli_fetch_array($result)) {
mysqli_stmt_bind_param($insert1, "sss", $tran_pucha1we[0], $tran_pucha1we[1], $tran_pucha1we[2]);
mysqli_stmt_execute($insert1);
mysqli_stmt_bind_param($insert2, "sss", $tran_pucha1we[3], $tran_pucha1we[4], $tran_pucha1we[5]);
mysqli_stmt_execute($insert2);
}
INSERT INTO MyTable (col1, col2, col3) VALUES
(?, ?, ?), (?, ?, ?), (?, ?, ?), ...
Вы можете комбинировать все описанные выше методы.
Вам также может понравиться, что вы можете изменить тайм-аут PHP. См. Этот вопрос: Как увеличить тайм-аут выполнения в php?
вот разбиение на страницы, используя ваш код, это тайм-аут, но в результате он уязвим. Не используйте это, может быть, просто получите идею.
$howMany = queryExec("select count(*) from 0_suppliers") -> fetch_array()[0];
$current = 0;
// this is how many records to process per loop, if it times out still, make it smaller.
$numToProcess = 100;
// this is what you really came for... but be careful:
set_time_limit();
while($current <= $howMany){
$result= mysqli_query($daffff, "select * from 0_suppliers limit $numToProcess, $current");
while ($tran_pucha1we = mysqli_fetch_array($result)) {
//Several Inserts here
$current++;
}
}
, как многие другие предположили, это действительно лучшая идея для рефакторинга и, если это возможно, сделать многострочную вставку, она МНОГО быстрее.