У меня есть сценарий PHP, который запускает запрос SQL, который занимает несколько секунд и возвращает около 15K + результатов после сложного вычисления на основе данных, найденных в таблице БД на моем сервере, с именем * 1001. *.
После получения результатов предполагается вставить (используя замену) эти записи в другую таблицу БД на моем сервере.
Сценарий, используемый для безупречной работы, когда table
был простой основной стол. Позже я изменил запрос SQL, чтобы использовать данные из таблицы VIEW, мы можем назвать ее view_table
, которая основана на table
, но имеет дополнительный столбец, который рассчитывается на лету.
Это заставил скрипт начать сбой всего моего SQL сервера, каждый раз в какое-то время, выдав эту ошибку:
PHP Предупреждение: mysqli :: query (): MySQL сервер пропал в /home/user/script.php в строке 109
Ниже находится строка 109:
function getRecordsFromDB(){
logMemoryUtilizationDetails();
file_put_contents(LOG_DIRECTORY.'service.log', date("d/m:H:i").':'."getRecordsFromDB::Entry".PHP_EOL, FILE_APPEND);
global $sourceConn;
$selectQuery = file_get_contents(__DIR__.'/my-query.sql');
$items = array();
$result = $sourceConn->query($selectQuery); // LINE 109
if ($result){
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$item = new Item();
$item->id = $row['id'];
$item->itemId = $row['itemid'];
Я попытался войти в систему, чтобы увидеть, сколько памяти занимает скрипт используйте при запуске и выходе, и когда он успешен, он использует около 37 МБ ОЗУ на пике.
Мой сервер имеет 6 ГБ ОЗУ на 4 ядрах.
Другого нет скрипт, работающий на моем сервере, который вызывает SQL сбой сервера, вот так, поэтому я уверен, что этот скрипт вызывает cra sh.
Вот MY.CNF моего сервера:
[mysqld]
# disable mysql strict mode
sql_mode=""
log-error=/var/lib/mysql/host.myhost.com.err
performance_schema=1
query_cache_type=0
query_cache_size=0
query_cache_limit=0
key_buffer_size=16M
max_connections=200
max_tmp_tables=1
table_open_cache=2000
local-infile=0
thread_cache_size=4
innodb_file_per_table=1
default-storage-engine=MyISAM
innodb_use_native_aio=0
max_allowed_packet=1024M
innodb_buffer_pool_size=800M
open_files_limit=10000
#wait_timeout=500
tmp_table_size=256M
max_heap_table_size=256M
innodb_buffer_pool_instances=1
#general_log=on
#general_log_file = /var/lib/mysql/all-queries.log
slow-query-log=0
slow-query-log-file=/var/lib/mysql/slow_queries.log
long_query_time=1.0
#log_queries_not_using_indexes=1
И это из моего PHP .INI (для PHP 7.2, который я использую):
max_execution_time = 240
max_input_time = 60
max_input_vars = 1000
memory_limit = 512M
[MySQLi]
mysqli.max_persistent = -1
;mysqli.allow_local_infile = On
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
Я не вижу * 10 32 * в этих файлах.
У меня есть много других сценариев, и все они работают нормально, поэтому я не хотел бы что-то менять глобально, так как боюсь, что это может вызвать другие проблемы на моем сервере.