powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP+MySQL: тормозит добавление записи в таблицу
81 сообщений из 81, показаны все 4 страниц
PHP+MySQL: тормозит добавление записи в таблицу
    #39717963
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это копия аналогичной темы из подфорума по MySQL, т.к., возможно, причина проблемы кроется в PHP-части.
Если кратко: есть php-скрипт, в числе функций которого добавление новой записи в таблицу (или же обновления существующей, если запись для данного пользователя уже есть). В боевом режиме функция может дёргаться примерно 50 раз в секунду, при этом скорость добавления записей достигает максимум 5 в секунду, т.е. добавление 7500 записей закончится только через неприличные 25 минут. select-запросы из той же таблицы выполняются за приемлемое время.

Структура таблицы – 4 поля: одно int(11), одно datetime и два varchar длиной 10 и 32, последний из которых primary index (кривоватый момент, но, судя по всему, он бы скорее влиял на скорость выборки). InnoDB. Как видно из кода ниже, сам запрос тоже довольно простой.

Пока не могу понять, лежит ли причина в php или mysql-части. Явно что-то не так. Пробовал менять innodb_flush_log_at_trx_commit на 0 и 2 (настройка в MySQL), ощутимой разницы не дало. Использование в php постоянных кэшируемых соединений помогло предотвратить перегрузки сервера, имевшие место ранее при подобных нагрузках.

Самый частый ответ на подобный вопрос – объединять insert-запросы в один, но, как было упомянуто ранее, все данные приходят от разных пользователей, и мой нубский мозг не может пока представит, возможно ли вообще объединение инсертов в этой ситуации.

php-код:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
header("Access-Control-Allow-Origin: *");

$hostname = 'localhost';
$username = 'user';
$password = 'pass';
$database = 'user_table';

$f = $_POST['f'];
$upts = $_POST['p'];
$uid = $_POST['u'];
$time = date("Y-m-d H:i:s");
$gid = $_POST['gi'];
$sg=$_POST['sg'];
//ещё несколько параметров получаются через POST

$dbh = new PDO("mysql:host=$hostname; dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_PERSISTENT, true);
$stmt = $dbh->query("SET NAMES utf8");

//прочие функции

function user_insert($dbh,$upts,$uid,$time,$gid)
{
try
  {
    $uuid=str_replace(".".$gid,"",$uid);
    $stmt1 = $dbh->query("SELECT COUNT(*) from `banned` WHERE tb_uid = '$uuid'");
    $result1 = $stmt1->fetchColumn();
    if ($result1 > 0)
      $upts=0;
    if ($upts>0)
    {
      $stmt = $dbh->prepare("INSERT INTO users_table (tb_pts, tb_time, tb_uid, tb_gid) VALUES(:upts, :time, :uid, :gid)
      ON DUPLICATE KEY UPDATE tb_pts = GREATEST(:upts2, tb_pts), tb_time = :time2, tb_gid = :gid2");
      $stmt ->bindparam(':upts', $scdc, PDO::PARAM_STR);
      $stmt ->bindparam(':time', $time, PDO::PARAM_STR);
      $stmt ->bindparam(':uid', $uid, PDO::PARAM_STR);
      $stmt ->bindparam(':gid', $gid, PDO::PARAM_STR);
      $stmt ->bindparam(':upts2', $scdc, PDO::PARAM_STR);
      $stmt ->bindparam(':time2', $time, PDO::PARAM_STR);
      $stmt ->bindparam(':gid2', $gid, PDO::PARAM_STR);

      $stmt->execute();
      echo "1";
    }
    else
      echo "0";
    }
    catch (PDOExecption $ex)
    {
      echo "0";
    }
    //$dbh = null;
}

//прочие функции

switch ($f)
{
  //case fname...
  case 'ui': user_insert($dbh,$upts,$uid,$time,$gid); break;
  //case fname..
  //default: echo "0";
}



Буду рад любой помощи.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39717985
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо смотреть в что сервер упирается.
Скорее всего затык на COUNT(*)
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39717993
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettСкорее всего затык на COUNT(*)Возможно, если поле tb_uid не проиндексировано.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718003
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, нафига семь параметров биндить поодиночке как строковые? Возвращаемых то значений нет. Можно массивом в execute() передать.

Другой вопрос, все ли передаваемые в запрос параметры должны быть строковыми? Возможно, :uid и :gid, если это какие-то идентификаторы юзера/группы, есть числовые.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718013
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HettСкорее всего затык на COUNT(*)

Точно нет, там пока таблица пустая, да и с единственным уникальным столбцом. Отрубил выборку оттуда – результат тот же.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718018
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleДругой вопрос, все ли передаваемые в запрос параметры должны быть строковыми? Возможно, :uid и :gid, если это какие-то идентификаторы юзера/группы, есть числовые.

:uid и :gid строки, :uid первичный и уникальный.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718034
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleHettСкорее всего затык на COUNT(*)Возможно, если поле tb_uid не проиндексировано.
в innodb индекс не поможет, движок все таки версионный
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718053
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting:uid и :gid строки, :uid первичный и уникальный.Эх, строки всяко дольше/сложнее сравнивать, а это непременно произойдет при проверке по уникальному индексу. В этом смысле числа существенно выигрывают.

Ну и сам движок InnoDB не слишком быстрый в ряде случаев. Не пробовали таблицу конвернуть в MyISAM?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718056
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettв innodb индекс не поможет, движок все таки версионныйЭммм... Не вполне понимаю, что Вы имеете в виду.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718070
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleНе пробовали таблицу конвернуть в MyISAM?
Пробовал. Если что, на данный момент таблица крохотная, ~100 записей, т.е. тормоза вряд ли вызваны сравнением.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718112
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коннект долгий?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718138
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingна данный момент таблица крохотная, ~100 записейНу это совсем ни о чем. Есть смысл построить временной профиль выполнения скрипта с целью поискать долгое место. http://php.net/manual/ru/function.microtime.php поможет.

Ну и ещё момент.gpbetatestingВ боевом режиме функция может дёргаться примерно 50 раз в секундуНадо полагать, функция вызывается из единожды запущенного скрипта. Если так, то какой смысл 50 раз в секунду коннектиться к серверу (а это штука накладная, даже на локалхосте) и подготавливать запрос prepare()? Это можно сделать один раз за пределами функции.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718144
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleНадо полагать, функция вызывается из единожды запущенного скрипта. Если так, то какой смысл 50 раз в секунду коннектиться к серверу (а это штука накладная, даже на локалхосте) и подготавливать запрос prepare()? Это можно сделать один раз за пределами функции.

Вот здесь был бы очень благодарен за просвещение, как именно можно реализовать подобное. По сути дела да, сейчас схема такая: дёргается скрипт -> выполняется коннект -> выполняется функция.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718188
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Про коннект прогнал, он же и так за пределами функции. Ну туда же и prepare() просится. Внутрь функции $stmt передать по ссылке или через global, $dbh тоже. Не вполне понимаю смысл передачи подобных ресурсов по значению.

gpbetatestingПо сути дела да, сейчас схема такая: дёргается скрипт -> выполняется коннект -> выполняется функция.Только я не понял теперь, действительно ли весь скрипт вместе с коннектом вызывается 50 раз в секунду (о, тут веселый шанс впереться в лимит на кол-во коннектов у мускуля!), или, всё же, скрипт запущен единожды и из него на одном коннекте 50 раз в секунду вызывается функция добавления строки. Например, в цикле.

gpbetatestingвсе данные приходят от разных пользователейЭммм... Это веб-страничка регистрации пользователя на каком-то сайте или что?


Ещё момент.
Агрегатную функцию из запроса "SELECT COUNT(*) from `banned`..." вполне можно убрать. Думаю, вполне достаточно что-то вроде "SELECT 1 FROM `banned` WHERE `tb_uid` = '$uuid' LIMIT 1". А в результате смотреть, вернулась ли одна запись или ноль записей. При таком раскладе поиск в таблице прекращается после первой найденной записи, в то время как для COUNT() требуется найти все записи (даже если их всего одна) и потом посчитать количество не-NULL-евых значений (впрочем, для варианта с COUNT(*) есть какая-то внутренняя оптимизация). Для таблицы из сотни строк на глазок не будет заметно, конечно, но сделайте миллион записей с повторяющимися значениями...
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718200
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleТолько я не понял теперь, действительно ли весь скрипт вместе с коннектом вызывается 50 раз в секунду (о, тут веселый шанс впереться в лимит на кол-во коннектов у мускуля!), или, всё же, скрипт запущен единожды и из него на одном коннекте 50 раз в секунду вызывается функция добавления строки. Например, в цикле.
Первый случай, вкупе с "PDO::ATTR_PERSISTENT, true" и заранее увеличенным лимитом подключений.

vkleЭммм... Это веб-страничка регистрации пользователя на каком-то сайте или что?
Похожий принцип, отправка данных с созданием новой записи, если её ещё нет для данного пользователя, или с обновлением существующей. Насчёт добавления в цикле, как быть, если мы хотим отправить клиенту результат добавления именно его записи? Ведь там в конце функции идёт echo для этого. А цикл, насколько я понимаю, будет добавлять их "пачками".

Про SELECT COUNT(*) учту, спасибо.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718232
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingА цикл, насколько я понимаю, будет добавлять их "пачками".Цикл это будет делать на одном ресурсе коннекта, а не на полусотне вновь создаваемых. Ибо, ресурс, ссылка на который хранится в переменной $dbh, не манна небесная, с неба не падает. Экземпляр класса PDO с соответствующим драйвером создается с нуля при каждом запуске скрипта. Это затратно, несмотря на атрибут "постоянный".

Временной профиль выполнения скрипта сделали? Определили, сколько микросекунд занимает коннект, сколько селект и сколько инсерт/апдейт? Из того, что Вы сказали ранее о почти пустых таблицах, проблема видится только в долгом коннекте.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718240
Polar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще можно в 2 раза меньше дергать MySQL server.

Вместо 2-х prepare() и execute()
использовать только query() заранее подготовив строку запроса.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718270
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотрел время создания коннекта через
Код: php
1.
2.
3.
4.
5.
6.
$contime=microtime(true);
$dbh = new PDO("mysql:host=$hostname; dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_PERSISTENT, true);
$contime="contime: "+(microtime(true)-$contime);


В функции вставки в случае успеха клиенту приходил ответ с $contime. Число не выходит за пределы 0.0001-0.0002 секунд. Кроме того, ответ приходит моментально, а вот в phpmyadmin видно, что записи добавляются медленно, но в логах их скорость тоже почему-то высокая.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718274
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сама же вставка вместе с подготовкой во время аналогичной проверки выдавала 0.0003-0.0005с, редко были числа порядка 0.01
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718318
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingСама же вставка вместе с подготовкой во время аналогичной проверки выдавала 0.0003-0.0005с, редко были числа порядка 0.01Ага, другими словами, этот фрагмент скрипта легко может лететь аж до тысячи вставок в секунду, а то и быстрее.
Очевидно, проблема не в этом месте. Как ведут себя остальные этапы, сколько времени вообще выполняется скрипт от первой до последней строчки? Справедливости ради замечу, что это будет время _выполнения_ скрипта, в которое не входит, например, его разбор и проверка синтаксиса интерпретатором PHP при запуске.

gpbetatestingа вот в phpmyadmin видно, что записи добавляются медленноВизуально медленно или по выводимому времени?
Визуально медленно вполне объяснимо, это же довольно монструозное приложение с кучей всяких файлов и скриптов. Пока всё отработает, загрузится, да браузер пошевелится...
Ну а если по выводимому времени судить, то сколько численно показывает? И да, Вы знаете алгоритм вычисления времени в phpMyAdmin, знаете, что именно означает это число и в каких условиях оно получено? Вот я не знаю, а значит, и не могу судить о том, насколько хорошо или плохо работает запрос. ;-) Но могу сравнить с чем-то аналогичным.
А ещё можно выполнить запрос в консольном клиенте mysql, он тоже время показывает.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718344
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Весь скрипт выполняется в среднем за 0.0006с.

Сейчас попробовал отправить 100 запросов со скоростью 60 в секунду и параллельно дёргать функцию, показывающую число записей в таблице – все отправленные записи добавились только через 30 секунд.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718350
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingпараллельно дёргать функцию, показывающую число записей в таблицеСмотрите реальное число записей функцией COUNT() или из статистики дергаете? Статистика на InnoDB и дольше тормозить умеет. А вот если реальное... это странно вообще.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718356
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Через COUNT()
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718375
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Ну это уж явно не PHP-шная проблема.

А можете пояснить попобробнее вот этот момент?gpbetatestingдобавление 7500 записей закончится только через неприличные 25 минутПри 50 запросов/сек это получается 150 секунд или 2,5 минуты на все вставки от начала и до окончания.
Вот прогнали Вы эти 7500 запросов за 2,5 минуты. А в таблице новые записи одна за другой неспешно стали появляться в последующие 22,5 минуты, или как?

Сперва то, прочитав Ваш пост, я понял его так, что следующая вставка начинается после окончания предыдущей, что весь скрипт выполняется слишком долго, образуется очередь...
Но теперь, спустя пол-дня, удалось понять, что скрипт работает быстро, и проблема в чем-то в другом. Но сама проблема стала менее понятной.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718376
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё момент: проверил – стоял маленький innodb_buffer_pool_size (128M при оперативке сервера в 4G). Поставил 3G, но это никак не повлияло на скорость Была мысль, что там занимается весь пул, и свежие запросы ждут, пока старые его освободят.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718377
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleА можете пояснить попобробнее вот этот момент?gpbetatestingдобавление 7500 записей закончится только через неприличные 25 минутПри 50 запросов/сек это получается 150 секунд или 2,5 минуты на все вставки от начала и до окончания.
Вот прогнали Вы эти 7500 запросов за 2,5 минуты. А в таблице новые записи одна за другой неспешно стали появляться в последующие 22,5 минуты, или как?


Если вкратце, максимальная скорость добавления записей в таблицу около 5 в секунду. Соответственно я хоть 1000 запросов за секунду могу отправлять, они там как будто в очередь выстраиваются.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718429
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

По большому счету, без очереди не получится. Другое дело, как быстро она движется.

Вот смотрите, на таблице имеется уникальный ключ. При совпадении значения ключевого поля запрос должен изменить свое поведение с инсерта на апдейт.
Теперь ситуация. Таблица пустая. Пришли одновременно два запроса с одним и тем же значением ключевого поля. Каков ожидаемый результат, на Ваш взгляд? ;-)
Давайте по порядку. Две записи в таблице с одинаковым первичным ключом не имеют права существовать. В этой ситуации необходимо сделать один инсерт и один апдейт. Следовательно, какой-то из этих двух запросов станет первым, а какой-то вторым. Соответственно, второй запрос не может быть выполнен до тех пор, пока не закончится первый. Иначе запись не будет обновлена, а у Вас возникнут претензии к разработчикам СУБД. Это вкратце к вопросу о том, откуда в такой простейшей ситуации берутся очереди. Думаю, подробнее и глубже расскажут в профильном форуме.

Кроме того, используемая методика измерения времени может лажать. Ведь от запроса не требуется возвращать никаких данных, кроме успешно/ошибка. А когда у СУБД будет достаточно данных, для формирования такого ответа? Если коротко, то много раньше окончания выполнения запроса.

Может пригодится для размышления:
Когда у меня впервые возникла необходимость в целях оптимизации сделать временной профиль выполнения ХП (вызывалась запросом CALL() через PDO) с несколькими различной "тяжелости" запросами внутри и с несколькими возвращаемыми рекордсетами в контексте пхпшного скрипта, неожиданно оказалось, что что сам вызов (запрос CALL) в пхпшном скрипте проходит очень быстро (какие-то миллисекунды, вроде), но в некоторые моменты очередную возвращаемую порцию данных от "тяжелого" запроса пхп-скрипт ожидает подолгу, сотни миллисекунд. В этом смысле измеренные временные промежутки заставили меня задуматься от том, что именно я измеряю в тот или иной момент.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718434
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Подумалось вот о чем. Конечно, если у Вас есть желание поэкспериментировать и разобраться.
Добавьте в Ваш скрипт после инсерт/апдейта ещё один запрос - селект со значениями потенциально измененяемых полей записи для этого первичного ключа и выводом значений. Кроме того, можно в самом начале и в самом конце запросить у СУБД ещё и текущее врамя для сравнения его с пхпшным.
Понимаю, что в таких опытах можно застрять по уши, но без детального анализа тут вряд ли можно получить готовый ответ о причинах ситуации.
Если интересно, есть мысль о паре более страшных тестов :-)))
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718435
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingпараллельно дёргать функцию, показывающую число записей в таблицеА как именно это делаете?
Надеюсь, из консольного клиента mysql ?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718443
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

В нашем случае практически исключена ситуация одновременного поступления двух запросов с одинаковыми полями (сейчас структура таблицы такова, что есть два поля, которые сами по себе не уникальны, но их комбинации в строке - да).


miksoft,

да, через консоль. Сейчас опять отправил 100 запросов за полторы секунды и вызывал пару раз в секунду count(*) в консоли, картина такая:
mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 8 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 12 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 15 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 17 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 18 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 19 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 20 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 22 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 22 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 24 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 25 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 25 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 26 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 27 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 28 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 29 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) from `users_table` WHERE `tb_gid`='LOADTEST1';
+----------+
| COUNT(*) |
+----------+
| 30 |
+----------+
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718446
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingВ нашем случае практически исключена ситуация одновременного поступления двух запросов с одинаковыми полямиАга, только СУБД об этом не знает! )))) А если б и знала, то вряд ли поменяла алгоритм обработки запросов на желаемый Вами.
Хотя, если убрать уникальный (он же праймари) индекс и реализовать уникальность поля дополнительным запросом... Но не уверен, это пробовать надо.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718447
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingвызывал пару раз в секунду count(*) в консолиДобавьте в запрос получение текущего времени, чтобы интервалы времени были понятны.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718450
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,


mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 11 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:00 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 16 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:02 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 18 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 21 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:05 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 25 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:06 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 29 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:07 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 32 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:09 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 36 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:10 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 38 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:11 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 40 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:12 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 42 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:13 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 44 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:14 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 45 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:15 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 48 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:16 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 51 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:17 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 53 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:18 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 54 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:19 |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(*) FROM `users_table` WHERE `tb_gid`="LOADTEST1"; SELECT NOW();
+----------+
| COUNT(*) |
+----------+
| 57 |
+----------+
1 row in set (0.00 sec)

+---------------------+
| NOW() |
+---------------------+
| 2018-10-16 21:33:20 |
+---------------------+
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718453
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Дичь какая-то... так быть не должно.

Добавьте в скрипт, который вставляет записи, логирование в файл в моменты начала и конца скрипта с указанием времени (с долями секунд) и какого-нибудь идентификатора (PID или типа того, не знаю что есть в PHP), чтобы разные запуски скрипта друг от друга отличать.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718457
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

Лог 39 запросов, отправленных за ~0.5c:

PID 29280, start time 1539716426.7522
PID 29280 connected at 1539716426.7525
PID 17201, start time 1539716435.044
PID 17201 connected at 1539716435.0444
PID 17201 query successfully ended at 1539716435.0452
PID 23306, start time 1539716435.2123
PID 23306 connected at 1539716435.2127
PID 23079, start time 1539716435.4447
PID 23079 connected at 1539716435.445
PID 1519, start time 1539716435.4854
PID 1519 connected at 1539716435.4858
PID 1519 query successfully ended at 1539716435.4864
PID 22242, start time 1539716435.6199
PID 22242 connected at 1539716435.6202
PID 1520, start time 1539716435.7779
PID 1520 connected at 1539716435.7782
PID 2154, start time 1539716435.9515
PID 2154 connected at 1539716435.9518
PID 21226, start time 1539716435.9527
PID 2154 query successfully ended at 1539716435.9528
PID 21226 connected at 1539716435.9529
PID 23307, start time 1539716436.0826
PID 23307 connected at 1539716436.083
PID 29280, start time 1539716436.2331
PID 29280 connected at 1539716436.2335
PID 29280 query successfully ended at 1539716436.234
PID 17201, start time 1539716436.3766
PID 17201 connected at 1539716436.3769
PID 23306, start time 1539716436.3911
PID 23306 connected at 1539716436.3915
PID 23079, start time 1539716436.5826
PID 23079 connected at 1539716436.5829
PID 23079 query successfully ended at 1539716436.5834
PID 1519, start time 1539716436.8674
PID 1519 connected at 1539716436.8678
PID 22242, start time 1539716436.981
PID 22242 connected at 1539716436.9814
PID 1520, start time 1539716437.17
PID 1520 connected at 1539716437.1703
PID 1520 query successfully ended at 1539716437.171
PID 2154, start time 1539716437.3192
PID 2154 connected at 1539716437.3196
PID 21226, start time 1539716437.4105
PID 21226 connected at 1539716437.411
PID 23307, start time 1539716437.56
PID 23307 connected at 1539716437.5604
PID 23307 query successfully ended at 1539716437.561
PID 29280, start time 1539716437.7036
PID 29280 connected at 1539716437.7041
PID 17201, start time 1539716437.7088
PID 17201 connected at 1539716437.7091
PID 23306, start time 1539716437.8488
PID 23306 connected at 1539716437.8491
PID 23306 query successfully ended at 1539716437.8498
PID 23079, start time 1539716437.9841
PID 23079 connected at 1539716437.9846
PID 1519, start time 1539716437.9924
PID 1519 connected at 1539716437.9927
PID 22242, start time 1539716438.1241
PID 22242 connected at 1539716438.1244
PID 22242 query successfully ended at 1539716438.125
PID 1520, start time 1539716438.2517
PID 1520 connected at 1539716438.252
PID 2154, start time 1539716438.2652
PID 2154 connected at 1539716438.2656
PID 21226, start time 1539716438.4812
PID 21226 connected at 1539716438.4817
PID 21226 query successfully ended at 1539716438.4821
PID 23307, start time 1539716438.5143
PID 23307 connected at 1539716438.5147
PID 29280, start time 1539716438.6191
PID 29280 connected at 1539716438.6195
PID 17201, start time 1539716438.7526
PID 17201 connected at 1539716438.753
PID 17201 query successfully ended at 1539716438.7538
PID 23306, start time 1539716438.8758
PID 23306 connected at 1539716438.8762
PID 23079, start time 1539716438.8909
PID 23079 connected at 1539716438.8913
PID 1519, start time 1539716439.0461
PID 1519 connected at 1539716439.0465
PID 1519 query successfully ended at 1539716439.0471
PID 22242, start time 1539716439.146
PID 22242 connected at 1539716439.1464
PID 1520, start time 1539716439.1939
PID 1520 connected at 1539716439.1943
PID 2154, start time 1539716439.334
PID 2154 connected at 1539716439.3344
PID 2154 query successfully ended at 1539716439.335
PID 21226, start time 1539716439.445
PID 21226 connected at 1539716439.4454
PID 23307, start time 1539716439.4789
PID 23307 connected at 1539716439.4793
PID 29280, start time 1539716439.6265
PID 29280 connected at 1539716439.6269
PID 29280 query successfully ended at 1539716439.6276
PID 17201, start time 1539716439.7121
PID 17201 connected at 1539716439.7126
PID 23306, start time 1539716439.7637
PID 23306 connected at 1539716439.7641
PID 23079, start time 1539716440.0621
PID 23079 connected at 1539716440.0625
PID 23079 query successfully ended at 1539716440.0631
PID 1519, start time 1539716440.2111
PID 1519 connected at 1539716440.2115
PID 22242, start time 1539716440.3511
PID 22242 connected at 1539716440.3515
PID 1520, start time 1539716440.5052
PID 1520 connected at 1539716440.5056
PID 1520 query successfully ended at 1539716440.5061
PID 2154, start time 1539716440.6368
PID 2154 connected at 1539716440.6372
PID 21226, start time 1539716440.646
PID 21226 connected at 1539716440.6464
PID 23307, start time 1539716440.7957
PID 23307 connected at 1539716440.796
PID 23307 query successfully ended at 1539716440.7967
PID 29280, start time 1539716440.9049
PID 29280 connected at 1539716440.9052
PID 17201, start time 1539716440.9385
PID 17201 connected at 1539716440.9388
PID 23306, start time 1539716441.1038
PID 23306 connected at 1539716441.1041
PID 23306 query successfully ended at 1539716441.1047
PID 23079, start time 1539716441.2346
PID 23079 connected at 1539716441.235
PID 1519, start time 1539716441.2476
PID 1519 connected at 1539716441.2479
PID 22242, start time 1539716441.4
PID 22242 connected at 1539716441.4004
PID 22242 query successfully ended at 1539716441.401
PID 1520, start time 1539716441.566
PID 1520 connected at 1539716441.5664
PID 2154, start time 1539716441.6172
PID 2154 connected at 1539716441.6175
PID 21226, start time 1539716441.7431
PID 21226 connected at 1539716441.7435
PID 21226 query successfully ended at 1539716441.7441
PID 29280, start time 1539716441.874
PID 23307, start time 1539716441.874
PID 29280 connected at 1539716441.8743
PID 23307 connected at 1539716441.8743
PID 17201, start time 1539716442.0127
PID 17201 connected at 1539716442.0131
PID 17201 query successfully ended at 1539716442.0137
PID 23306, start time 1539716442.1364
PID 23306 connected at 1539716442.1368
PID 23079, start time 1539716442.1512
PID 23079 connected at 1539716442.1515
PID 1519, start time 1539716442.3884
PID 1519 connected at 1539716442.3888
PID 1519 query successfully ended at 1539716442.3894
PID 22242, start time 1539716442.3931
PID 22242 connected at 1539716442.3934
PID 1520, start time 1539716442.5177
PID 1520 connected at 1539716442.518
PID 2154, start time 1539716442.646
PID 2154 connected at 1539716442.6465
PID 2154 query successfully ended at 1539716442.647
PID 21226, start time 1539716442.7659
PID 21226 connected at 1539716442.7663
PID 29280, start time 1539716442.7808
PID 29280 connected at 1539716442.7812
PID 23307, start time 1539716442.9044
PID 23307 connected at 1539716442.9047
PID 23307 query successfully ended at 1539716442.9052
PID 17201, start time 1539716443.0343
PID 17201 connected at 1539716443.0346
PID 23306, start time 1539716443.0494
PID 23306 connected at 1539716443.0498
PID 23079, start time 1539716443.1885
PID 23079 connected at 1539716443.1889
PID 23079 query successfully ended at 1539716443.1895
PID 1519, start time 1539716443.3081
PID 1519 connected at 1539716443.3084
PID 22242, start time 1539716443.3232
PID 22242 connected at 1539716443.3236
PID 1520, start time 1539716443.4575
PID 1520 connected at 1539716443.4578
PID 1520 query successfully ended at 1539716443.4584
PID 2154, start time 1539716443.5977
PID 2154 connected at 1539716443.5981
PID 21226, start time 1539716443.6714
PID 21226 connected at 1539716443.6718
PID 29280, start time 1539716443.8861
PID 29280 connected at 1539716443.8865
PID 29280 query successfully ended at 1539716443.8871
PID 23307, start time 1539716443.8989
PID 23307 connected at 1539716443.8992
PID 17201, start time 1539716444.0219
PID 17201 connected at 1539716444.0222
PID 23306, start time 1539716444.1668
PID 23306 connected at 1539716444.1672
PID 23306 query successfully ended at 1539716444.1679
PID 23079, start time 1539716444.2599
PID 23079 connected at 1539716444.2602
PID 1519, start time 1539716444.31
PID 1519 connected at 1539716444.3104
PID 22242, start time 1539716444.4414
PID 22242 connected at 1539716444.4418
PID 22242 query successfully ended at 1539716444.4424
PID 1520, start time 1539716444.9212
PID 1520 connected at 1539716444.9216
PID 2154, start time 1539716445.3391
PID 2154 connected at 1539716445.3395
PID 2154 query successfully ended at 1539716445.3409
PID 21226, start time 1539716445.4828
PID 21226 connected at 1539716445.4831
PID 29280, start time 1539716445.6461
PID 29280 connected at 1539716445.6466
PID 23307, start time 1539716446.0106
PID 23307 connected at 1539716446.011
PID 23307 query successfully ended at 1539716446.0116
PID 17201, start time 1539716446.1476
PID 17201 connected at 1539716446.1479
PID 23306, start time 1539716446.657
PID 23306 connected at 1539716446.6575
PID 23079, start time 1539716446.6712
PID 23079 connected at 1539716446.6715
PID 23079 query successfully ended at 1539716446.6721
PID 1519, start time 1539716446.8096
PID 1519 connected at 1539716446.81
PID 22242, start time 1539716446.9308
PID 22242 connected at 1539716446.9312
PID 1520, start time 1539716447.1816
PID 1520 connected at 1539716447.182
PID 1520 query successfully ended at 1539716447.1826
PID 2154, start time 1539716447.2011
PID 2154 connected at 1539716447.2015
PID 21226, start time 1539716447.3252
PID 21226 connected at 1539716447.3256
PID 29280, start time 1539716447.3338
PID 29280 connected at 1539716447.3342
PID 23307, start time 1539716447.5683
PID 23307 connected at 1539716447.5686
PID 23307 query successfully ended at 1539716447.5692
PID 17201, start time 1539716447.7054
PID 17201 connected at 1539716447.7058
PID 23306, start time 1539716447.8413
PID 23306 connected at 1539716447.8417
PID 23079, start time 1539716448.2261
PID 23079 connected at 1539716448.2265
PID 23079 query successfully ended at 1539716448.227
PID 1519, start time 1539716448.3593
PID 1519 connected at 1539716448.3596
PID 22242, start time 1539716448.4961
PID 22242 connected at 1539716448.4965
PID 1520, start time 1539716448.8571
PID 1520 connected at 1539716448.8575
PID 1520 query successfully ended at 1539716448.858
PID 2154, start time 1539716448.9431
PID 2154 connected at 1539716448.9434
PID 21226, start time 1539716448.9929
PID 21226 connected at 1539716448.9934
PID 29280, start time 1539716449.1301
PID 29280 connected at 1539716449.1305
PID 29280 query successfully ended at 1539716449.131
PID 23307, start time 1539716449.2635
PID 23307 connected at 1539716449.2639
PID 17201, start time 1539716449.3154
PID 17201 connected at 1539716449.3157
PID 23306, start time 1539716449.5901
PID 23306 connected at 1539716449.5905
PID 23306 query successfully ended at 1539716449.5911
PID 23079, start time 1539716449.7222
PID 23079 connected at 1539716449.7225
PID 1519, start time 1539716449.7743
PID 1519 connected at 1539716449.7747
PID 22242, start time 1539716449.9226
PID 22242 connected at 1539716449.923
PID 22242 query successfully ended at 1539716449.9235
PID 1520, start time 1539716450.0114
PID 1520 connected at 1539716450.0117
PID 2154, start time 1539716450.0718
PID 2154 connected at 1539716450.0722
PID 29280, start time 1539716461.9396
PID 29280 connected at 1539716461.9399
PID 23307, start time 1539716462.077
PID 23307 connected at 1539716462.0774


start time - начало скрипта, connected - сразу после подключения, query successfully ended - после $stmt->execute(). Что интересно, последний пункт записался далеко не у всех PID, однако, все записи добавились в таблицу без потерь.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718461
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

А чего так неравномерно start time идут?
Интервал колеблется от 0 до почти 12 секунд.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718464
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

А вот этого я сразу и не заметил. Моя "атака" это отправка запросов через равный промежуток (доли секунды), т.е. между ними очень мало времени. Вот чуть более ровный лог, но всё равно сильный отрыв в конце:

PID 23079, start time 1539718037.4256
PID 23079 connected at 1539718037.4259
PID 23307, start time 1539718037.5401
PID 23307 connected at 1539718037.5406
PID 29280, start time 1539718037.5478
PID 29280 connected at 1539718037.5482
PID 29280 query successfully ended at 1539718037.549
PID 1520, start time 1539718037.5639
PID 1520 connected at 1539718037.5642
PID 1520 query successfully ended at 1539718037.5648
PID 21226, start time 1539718037.5819
PID 21226 connected at 1539718037.5822
PID 21226 query successfully ended at 1539718037.5828
PID 22242, start time 1539718037.606
PID 22242 connected at 1539718037.6064
PID 22242 query successfully ended at 1539718037.6069
PID 1519, start time 1539718037.6109
PID 1519 connected at 1539718037.6111
PID 23306, start time 1539718037.6115
PID 23306 connected at 1539718037.6118
PID 2154, start time 1539718037.653
PID 2154 connected at 1539718037.6534
PID 2154 query successfully ended at 1539718037.6539
PID 17201, start time 1539718037.6592
PID 17201 connected at 1539718037.6596
PID 17201 query successfully ended at 1539718037.66
PID 23079, start time 1539718037.7174
PID 23079 connected at 1539718037.7178
PID 23307, start time 1539718037.7332
PID 23307 connected at 1539718037.7335
PID 23307 query successfully ended at 1539718037.734
PID 29280, start time 1539718037.7547
PID 29280 connected at 1539718037.7551
PID 29280 query successfully ended at 1539718037.7557
PID 1520, start time 1539718037.7614
PID 21226, start time 1539718037.7616
PID 1520 connected at 1539718037.7618
PID 21226 connected at 1539718037.7618
PID 22242, start time 1539718037.7623
PID 21226 query successfully ended at 1539718037.7626
PID 22242 connected at 1539718037.763
PID 22242 query successfully ended at 1539718037.7635
PID 1519, start time 1539718037.7669
PID 1519 connected at 1539718037.7672
PID 2154, start time 1539718037.7955
PID 23306, start time 1539718037.7955
PID 2154 connected at 1539718037.7959
PID 23306 connected at 1539718037.7959
PID 17201, start time 1539718037.8971
PID 17201 connected at 1539718037.8975
PID 23079, start time 1539718037.9335
PID 23307, start time 1539718037.9337
PID 23079 connected at 1539718037.9338
PID 23307 connected at 1539718037.9339
PID 29280, start time 1539718037.9342
PID 1520, start time 1539718037.9345
PID 23079 query successfully ended at 1539718037.9345
PID 1520 connected at 1539718037.9348
PID 29280 connected at 1539718037.935
PID 21226, start time 1539718037.9355
PID 22242, start time 1539718037.9384
PID 1519, start time 1539718037.9384
PID 29280 query successfully ended at 1539718037.9386
PID 22242 connected at 1539718037.9387
PID 1519 connected at 1539718037.9387
PID 21226 connected at 1539718037.9389
PID 22242 query successfully ended at 1539718037.9391
PID 21226 query successfully ended at 1539718037.9393
PID 23306, start time 1539718037.9396
PID 23306 connected at 1539718037.9398
PID 23306 query successfully ended at 1539718037.9401
PID 2154, start time 1539718038.072
PID 2154 connected at 1539718038.0725
PID 17201, start time 1539718038.0755
PID 17201 connected at 1539718038.0762
PID 23079, start time 1539718038.1031
PID 23079 connected at 1539718038.1035
PID 23079 query successfully ended at 1539718038.1041
PID 23307, start time 1539718038.1128
PID 23307 connected at 1539718038.1131
PID 29280, start time 1539718038.1154
PID 22242, start time 1539718038.1155
PID 22242 connected at 1539718038.1158
PID 22242 query successfully ended at 1539718038.1164
PID 1520, start time 1539718038.1165
PID 21226, start time 1539718038.1166
PID 29280 connected at 1539718038.1168
PID 21226 connected at 1539718038.1169
PID 1520 connected at 1539718038.118
PID 1520 query successfully ended at 1539718038.1185
PID 1519, start time 1539718038.2831
PID 1519 connected at 1539718038.2835
PID 1519 query successfully ended at 1539718038.2841
PID 2154, start time 1539718038.2854
PID 23306, start time 1539718038.2854
PID 17201, start time 1539718038.2856
PID 2154 connected at 1539718038.2857
PID 23306 connected at 1539718038.2858
PID 17201 connected at 1539718038.2858
PID 23306 query successfully ended at 1539718038.2864
PID 23079, start time 1539718038.2878
PID 23079 connected at 1539718038.288
PID 23079 query successfully ended at 1539718038.2884
PID 23307, start time 1539718038.2892
PID 22242, start time 1539718038.2902
PID 23307 connected at 1539718038.2904
PID 22242 connected at 1539718038.2936
PID 22242 query successfully ended at 1539718038.2941
PID 29280, start time 1539718038.4281
PID 29280 connected at 1539718038.4285
PID 21226, start time 1539718038.4582
PID 1520, start time 1539718038.4582
PID 1519, start time 1539718038.4584
PID 23306, start time 1539718038.4586
PID 1520 connected at 1539718038.4586
PID 23306 connected at 1539718038.4588
PID 2154, start time 1539718038.4591
PID 21226 connected at 1539718038.4594
PID 1519 connected at 1539718038.4599
PID 21226 query successfully ended at 1539718038.46
PID 2154 connected at 1539718038.4603
PID 17201, start time 1539718038.4603
PID 1519 query successfully ended at 1539718038.4604
PID 17201 connected at 1539718038.4605
PID 2154 query successfully ended at 1539718038.4609
PID 23307, start time 1539718038.464
PID 22242, start time 1539718038.4642
PID 23307 connected at 1539718038.4642
PID 22242 connected at 1539718038.4645
PID 23079, start time 1539718038.4646
PID 23307 query successfully ended at 1539718038.4647
PID 23079 connected at 1539718038.4648
PID 29280, start time 1539718038.4651
PID 23079 query successfully ended at 1539718038.4652
PID 29280 connected at 1539718038.4656
PID 23306, start time 1539718038.6381
PID 1520, start time 1539718038.6382
PID 1520 connected at 1539718038.6385
PID 23306 connected at 1539718038.6385
PID 1519, start time 1539718038.6389
PID 21226, start time 1539718038.639
PID 23306 query successfully ended at 1539718038.6391
PID 21226 connected at 1539718038.6393
PID 1519 connected at 1539718038.6396
PID 1519 query successfully ended at 1539718038.64
PID 2154, start time 1539718038.6401
PID 2154 connected at 1539718038.6404
PID 17201, start time 1539718038.6424
PID 17201 connected at 1539718038.6426
PID 23307, start time 1539718038.6429
PID 17201 query successfully ended at 1539718038.643
PID 23307 connected at 1539718038.6433
PID 22242, start time 1539718038.6465
PID 22242 connected at 1539718038.6486
PID 22242 query successfully ended at 1539718038.649
PID 23079, start time 1539718038.6522
PID 23079 connected at 1539718038.6524
PID 29280, start time 1539718038.6524
PID 29280 connected at 1539718038.6527
PID 29280 query successfully ended at 1539718038.6531
PID 23306, start time 1539718038.8162
PID 23306 connected at 1539718038.8165
PID 21226, start time 1539718038.8167
PID 1519, start time 1539718038.8168
PID 21226 connected at 1539718038.8169
PID 23306 query successfully ended at 1539718038.8171
PID 1520, start time 1539718038.8175
PID 1519 connected at 1539718038.8176
PID 2154, start time 1539718038.8179
PID 2154 connected at 1539718038.8181
PID 17201, start time 1539718038.8186
PID 17201 connected at 1539718038.8189
PID 1520 connected at 1539718038.819
PID 23306, start time 1539718038.8191
PID 23306 connected at 1539718038.8193
PID 1520 query successfully ended at 1539718038.8195
PID 17201 query successfully ended at 1539718038.8196
PID 23306 query successfully ended at 1539718038.8199
PID 22242, start time 1539718038.8217
PID 22242 connected at 1539718038.8219
PID 29280, start time 1539718038.9842
PID 21226, start time 1539718038.9845
PID 23079, start time 1539718038.9845
PID 29280 connected at 1539718038.9845
PID 23079 connected at 1539718038.9847
PID 29280 query successfully ended at 1539718038.9852
PID 21226 connected at 1539718038.9855
PID 23307, start time 1539718038.9856
PID 1519, start time 1539718038.9856
PID 23307 connected at 1539718038.9858
PID 1519 connected at 1539718038.9859
PID 21226 query successfully ended at 1539718038.9861
PID 23307 query successfully ended at 1539718038.9864
PID 17201, start time 1539718039.1245
PID 17201 connected at 1539718039.1249
PID 1520, start time 1539718039.1491
PID 2154, start time 1539718039.1493
PID 1520 connected at 1539718039.1494
PID 2154 connected at 1539718039.1495
PID 1520 query successfully ended at 1539718039.1501
PID 23306, start time 1539718039.1666
PID 29280, start time 1539718039.1674
PID 22242, start time 1539718039.1675
PID 23079, start time 1539718039.1676
PID 22242 connected at 1539718039.1677
PID 23079 connected at 1539718039.1678
PID 23307, start time 1539718039.1683
PID 29280 connected at 1539718039.1688
PID 23306 connected at 1539718039.1689
PID 23307 connected at 1539718039.1692
PID 21226, start time 1539718039.1693
PID 23306 query successfully ended at 1539718039.1694
PID 21226 connected at 1539718039.1695
PID 23307 query successfully ended at 1539718039.1697
PID 21226 query successfully ended at 1539718039.1703
PID 1519, start time 1539718039.3282
PID 17201, start time 1539718039.3284
PID 1520, start time 1539718039.3284
PID 1519 connected at 1539718039.3286
PID 17201 connected at 1539718039.3286
PID 1520 connected at 1539718039.3286
PID 2154, start time 1539718039.3288
PID 2154 connected at 1539718039.329
PID 17201 query successfully ended at 1539718039.3294
PID 1519 query successfully ended at 1539718039.3294
PID 22242, start time 1539718039.3339
PID 22242 connected at 1539718039.3341
PID 22242 query successfully ended at 1539718039.3346
PID 23079, start time 1539718039.335
PID 29280, start time 1539718039.3355
PID 23306, start time 1539718039.3355
PID 23079 connected at 1539718039.3358
PID 23307, start time 1539718039.3358
PID 23307 connected at 1539718039.336
PID 21226, start time 1539718039.3365
PID 22242, start time 1539718039.3366
PID 21226 connected at 1539718039.3367
PID 23306 connected at 1539718039.3368
PID 29280 connected at 1539718039.337
PID 22242 connected at 1539718039.3372
PID 23306 query successfully ended at 1539718039.3374
PID 29280 query successfully ended at 1539718039.3375
PID 22242 query successfully ended at 1539718039.3377
PID 1520, start time 1539718039.4731
PID 1520 connected at 1539718039.4735
PID 17201, start time 1539718039.5156
PID 17201 connected at 1539718039.516
PID 17201 query successfully ended at 1539718039.5167
PID 2154, start time 1539718039.5173
PID 2154 connected at 1539718039.5176
PID 1519, start time 1539718039.5222
PID 1519 connected at 1539718039.5224
PID 1519 query successfully ended at 1539718039.523
PID 23079, start time 1539718039.5234
PID 23079 connected at 1539718039.5236
PID 23307, start time 1539718039.5236
PID 23307 connected at 1539718039.5238
PID 23079 query successfully ended at 1539718039.5239
PID 29280, start time 1539718039.6955
PID 29280 connected at 1539718039.6959
PID 23306, start time 1539718039.6963
PID 23306 connected at 1539718039.6965
PID 29280 query successfully ended at 1539718039.6966
PID 21226, start time 1539718039.703
PID 21226 connected at 1539718039.7032
PID 22242, start time 1539718039.7034
PID 22242 connected at 1539718039.7036
PID 1520, start time 1539718039.7037
PID 21226 query successfully ended at 1539718039.7038
PID 17201, start time 1539718039.7039
PID 1520 connected at 1539718039.7041
PID 21226, start time 1539718039.7049
PID 2154, start time 1539718039.705
PID 17201 connected at 1539718039.705
PID 21226 connected at 1539718039.7054
PID 2154 connected at 1539718039.7054
PID 17201 query successfully ended at 1539718039.7055
PID 2154 query successfully ended at 1539718039.7059
PID 23079, start time 1539718039.7131
PID 23079 connected at 1539718039.7133
PID 23307, start time 1539718039.8778
PID 23307 connected at 1539718039.8781
PID 29280, start time 1539718039.8785
PID 23307 query successfully ended at 1539718039.8787
PID 29280 connected at 1539718039.8787
PID 23306, start time 1539718039.8863
PID 23306 connected at 1539718039.8865
PID 1519, start time 1539718039.8866
PID 1519 connected at 1539718039.8868
PID 22242, start time 1539718039.8869
PID 23306 query successfully ended at 1539718039.8871
PID 22242 connected at 1539718039.8871
PID 1520, start time 1539718039.8879
PID 1520 connected at 1539718039.8887
PID 17201, start time 1539718039.8888
PID 21226, start time 1539718039.8888
PID 2154, start time 1539718039.8897
PID 21226 connected at 1539718039.8899
PID 23307, start time 1539718039.8901
PID 2154 connected at 1539718039.8901
PID 23079, start time 1539718039.8904
PID 21226 query successfully ended at 1539718039.8904
PID 23079 connected at 1539718039.8907
PID 23307 connected at 1539718039.8908
PID 17201 connected at 1539718039.8908
PID 23079 query successfully ended at 1539718039.8911
PID 23307 query successfully ended at 1539718039.8912
PID 17201 query successfully ended at 1539718039.8914
PID 29280, start time 1539718040.0275
PID 29280 connected at 1539718040.0279
PID 1519, start time 1539718040.0776
PID 23306, start time 1539718040.0777
PID 1520, start time 1539718040.0779
PID 1519 connected at 1539718040.0779
PID 23306 connected at 1539718040.078
PID 1519 query successfully ended at 1539718040.0787
PID 23306 query successfully ended at 1539718040.0788
PID 22242, start time 1539718040.079
PID 22242 connected at 1539718040.0792
PID 21226, start time 1539718040.0803
PID 21226 connected at 1539718040.0806
PID 1520 connected at 1539718040.0808
PID 21226 query successfully ended at 1539718040.0811
PID 2154, start time 1539718040.0823
PID 2154 connected at 1539718040.0825
PID 23079, start time 1539718040.237
PID 17201, start time 1539718040.2372
PID 17201 connected at 1539718040.2374
PID 23307, start time 1539718040.2375
PID 23307 connected at 1539718040.2377
PID 17201 query successfully ended at 1539718040.2381
PID 23306, start time 1539718040.2381
PID 29280, start time 1539718040.2382
PID 23079 connected at 1539718040.2383
PID 29280 connected at 1539718040.2384
PID 23306 connected at 1539718040.2388
PID 23079 query successfully ended at 1539718040.2388
PID 1519, start time 1539718040.2404
PID 1519 connected at 1539718040.2406
PID 1519 query successfully ended at 1539718040.2409
PID 22242, start time 1539718040.4185
PID 22242 connected at 1539718040.4188
PID 21226, start time 1539718040.4189
PID 1520, start time 1539718040.4196
PID 1520 connected at 1539718040.4199
PID 2154, start time 1539718040.4201
PID 17201, start time 1539718040.4202
PID 23079, start time 1539718040.4211
PID 23307, start time 1539718040.4212
PID 29280, start time 1539718040.4213
PID 17201 connected at 1539718040.4214
PID 23306, start time 1539718040.422
PID 22242 query successfully ended at 1539718040.422
PID 23307 connected at 1539718040.4225
PID 29280 connected at 1539718040.4227
PID 23306 connected at 1539718040.423
PID 23307 query successfully ended at 1539718040.423
PID 23079 connected at 1539718040.4233
PID 29280 query successfully ended at 1539718040.4233
PID 23306 query successfully ended at 1539718040.4234
PID 2154 connected at 1539718040.4238
PID 21226 connected at 1539718040.4238
PID 1519, start time 1539718040.4249
PID 1519 connected at 1539718040.4251
PID 1519 query successfully ended at 1539718040.4256
PID 17201, start time 1539718040.4261
PID 17201 connected at 1539718040.4264
PID 17201 query successfully ended at 1539718040.427
PID 22242, start time 1539718040.568
PID 22242 connected at 1539718040.5684
PID 1520, start time 1539718040.6277
PID 1520 connected at 1539718040.6281
PID 23307, start time 1539718040.6285
PID 23306, start time 1539718040.6287
PID 1520 query successfully ended at 1539718040.6287
PID 29280, start time 1539718040.6287
PID 2154, start time 1539718040.6299
PID 1519, start time 1539718040.63
PID 29280 connected at 1539718040.6301
PID 17201, start time 1539718040.6302
PID 21226, start time 1539718040.6302
PID 23079, start time 1539718040.631
PID 22242, start time 1539718040.631
PID 1520, start time 1539718040.6311
PID 17201 connected at 1539718040.6312
PID 23307 connected at 1539718040.6313
PID 1519 connected at 1539718040.6314
PID 29280, start time 1539718040.632
PID 22242 connected at 1539718040.6322
PID 23306 connected at 1539718040.6326
PID 23079 connected at 1539718040.6326
PID 21226 connected at 1539718040.6328
PID 2154 connected at 1539718040.6331
PID 29280 connected at 1539718040.6334
PID 1520 connected at 1539718040.6334
PID 23079 query successfully ended at 1539718040.6335
PID 23306 query successfully ended at 1539718040.6335
PID 21226 query successfully ended at 1539718040.6338
PID 29280 query successfully ended at 1539718040.6342
PID 2154 query successfully ended at 1539718040.6343
PID 17201, start time 1539718040.809
PID 17201 connected at 1539718040.8094
PID 17201 query successfully ended at 1539718040.8099
PID 23307, start time 1539718040.8107
PID 23079, start time 1539718040.8115
PID 1519, start time 1539718040.8115
PID 21226, start time 1539718040.8119
PID 21226 connected at 1539718040.8122
PID 23307 connected at 1539718040.8122
PID 22242, start time 1539718040.8125
PID 29280, start time 1539718040.8125
PID 29280 connected at 1539718040.8129
PID 1519 connected at 1539718040.813
PID 23306, start time 1539718040.8134
PID 1519 query successfully ended at 1539718040.814
PID 2154, start time 1539718040.8144
PID 2154 connected at 1539718040.8146
PID 23079 connected at 1539718040.8149
PID 22242 connected at 1539718040.815
PID 2154 query successfully ended at 1539718040.8151
PID 23079 query successfully ended at 1539718040.8153
PID 23306 connected at 1539718040.8154
PID 22242 query successfully ended at 1539718040.8155
PID 1520, start time 1539718040.9719
PID 17201, start time 1539718040.9719
PID 21226, start time 1539718040.9721
PID 1520 connected at 1539718040.9722
PID 17201 connected at 1539718040.9722
PID 17201 query successfully ended at 1539718040.9729
PID 1519, start time 1539718040.9734
PID 23307, start time 1539718040.9736
PID 21226 connected at 1539718040.9737
PID 1519 connected at 1539718040.9738
PID 23307 connected at 1539718040.9738
PID 1519 query successfully ended at 1539718040.9745
PID 29280, start time 1539718074.7701
PID 29280 connected at 1539718074.7705
PID 2154, start time 1539718075.6762
PID 2154 connected at 1539718075.6765
PID 23079, start time 1539718076.5378
PID 23079 connected at 1539718076.5381
PID 22242, start time 1539718077.4256
PID 22242 connected at 1539718077.4259
PID 17201, start time 1539718081.415
PID 17201 connected at 1539718081.4153
PID 1520, start time 1539718081.5527
PID 1520 connected at 1539718081.553
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718465
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

PID - это какого процесса? Он повторяется неоднократно, а в приведенном в первом посту коде циклов не видать.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718467
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Я имел в виду, что дёргаю url со скриптом в цикле
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718468
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Тут ещё и вебсервер в доле... Грязновато выходит. Отсутствие третьей строчки "query successfully ended" - не результат какого-то таймаута (1 - ожидание клиентом ответа от вебсервера и 2 - ожидание вебсервером ответа скрипта)?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718471
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingдёргаю url со скриптом в циклеА в логах web-сервера что откладывается?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718472
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

query successfully ended идёт сразу перед echo результата клиенту. max_execution time 30, по умолчанию.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718473
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При этом все вызовы получили положительный ответ (выдаваемый при успешном выполнении запроса) в консоли браузера.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718475
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Ну и куда эти "query successfully ended" подевались, кто их сожрал, если ответы успешные? Тут что-то совсем не так.
Покажите скрипт дергалки и логи (access и error) вебсервера.
И значения таймаутов в дергалке и в конфиге вебсервера.

Или же, исключите урл-дергалку, вебсервер и браузер вовсе, сконцентрируйтесь только на PHP + MySQL.

Вдогонку, max_execution_time - это максимальное время _работы_ пхп-скрипта без учета времени ожидания от внешних ресурсов, сна и т.п. Здесь скрипт простенький, едвали его время работы перевалит за несколько микросекунд.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718487
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас выяснилось, что на скорость запроса влияло параллельное выполнение двух других (одна выбирает из той же таблицы один результат по uid и gid, другая выбирает 100 самых свежих по gid), но они выполнялись с приемлемой скоростью. Их отключение позволило увеличить скорость функции вставки до ~50/сек, но в рабочем режиме эти три функции вызываются от множества юзеров, причём сама вставка чуть реже чтения результатов (которая всегда вызывается в начале сессии).
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718491
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingИх отключение позволило увеличить скорость функции вставки до ~50/секЭто с примерно 5/сек, в десять раз? И без них означенные 7500 записей уходят в таблицу за положенные 2,5 минуты?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718494
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Сейчас загнал 1000 записей, дёргая урл 60 раз в секунду, средняя скорость добавления без тех двух функций порядка 15-20 в сек.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718509
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Интересу ради запилил тест. Далеко не идеальный, конечно, но уж как есть.
Имеется файл с тестовыми данными, которые заносятся в таблицу поодиночке. Часть данных имеет дубликаты в ключевом поле, таких 10%.
Для вставки каждой записи инициируется отдельный процесс PHP. В этом есть некоторая аналогия с вебсервером. Весьма приблизительная, конечно, но вполне соответствующая режиму CGI, который в чистом виде нынче практически не используется применительно к PHP. Нагрузку на проц, конечно, дает ощутить, и даже немного больше, чем на реальном вебсервере :-)
В процессе записи периодически запрашивается текущее количество строк в таблице. Зная расположение дубликатов в исходном файле, легко оценить ожидаемое количество строк. Эти запросы должны происходить гипотетически через каждую секунду (вычисленное время), но из-за ограниченности ресурсов компа в реальности получаются реже.

В выводе скрипта main.php в самом начале текущие настройки, потом в три столбика идут номер итерации, кол-во записей, время от предыдущей итерации.

По результатам.
1. На далеко не новом домашнем компе (СУБД MariaDB, PHP 5.6) уже при предполагаемых 50 з/с проц заметно не справляется, хотя, при 10 з/с усе прекрасно. А вот при 120 вместо одной расчетной секунды пилит тест пять секунд, ну и отставание факта от плана в таблице то ещё... В общем, на значениях свыше 25 тест повален, похоже, по нехватке ресурсов.
2. На более-менее приличном сервере о 12 ядрах и много памяти (СУБД MySQL 5.6, PHP 7.1) на предполагаемые 200 запросов (в секунду) уходит около 1,3 сек и отставание фактического от планового кол-ва записей исчисляется единицами (видимо, работающие в фоне дочерние процессы к моменту измерения не успели выполнить запись), а вот при 400 з/с уже наблюдается весьма заметное (десятки записей) отставание и сказывается нехватка ресурсов.

Ещё раз подчеркну: тест весьма дубовый.
Конфиг в init.php
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718532
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжение теста.
Если процессы не плодить и все запросы выполнить синхронно в одном цикле. Тут хорошо видна зависимость от движка таблицы, но зависимость от ресурсов незначительна.

На сервере

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
$ php one.php 
Version = 5.6.41-log
Engine = InnoDB
Index = , PRIMARY KEY `id` (`id`)
Per sec = 1000
0       1       0.001
1000    910     2.812
2000    1820    2.911
3000    2729    2.828
4000    3638    2.724
5000    4547    2.725
6000    5456    2.663
7000    6365    2.757
8000    7274    2.837
9000    8183    2.832
10000   9092    2.753

$ php one.php 
Version = 5.6.41-log
Engine = MyISAM
Index = , PRIMARY KEY `id` (`id`)
Per sec = 1000
0       1       0
1000    910     1.205
2000    1820    1.21
3000    2729    1.21
4000    3638    1.223
5000    4547    1.238
6000    5456    1.237
7000    6365    1.23
8000    7274    1.222
9000    8183    1.228
10000   9092    1.229


На домашнем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
$ php one.php 
Version = 10.1.35-MariaDB-alt1.M80P.1
Engine = InnoDB
Index = , PRIMARY KEY `id` (`id`)
Per sec = 1000
0       1       0.002
1000    910     3.076
2000    1820    3.987
3000    2729    3.049
4000    3638    3.042
5000    4547    3.074
6000    5456    3.048
7000    6365    3.041
8000    7274    3.088
9000    8183    4.243
10000   9092    3.083

$ php one.php 
Version = 10.1.35-MariaDB-alt1.M80P.1
Engine = MyISAM
Index = , PRIMARY KEY `id` (`id`)
Per sec = 1000
0       1       0
1000    910     1.441
2000    1820    1.479
3000    2729    1.463
4000    3638    1.446
5000    4547    1.475
6000    5456    1.463
7000    6365    1.469
8000    7274    1.463
9000    8183    1.48
10000   9092    1.463
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718565
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сколько я помню в mysql по дефолтну весьма избыточный уровень изоляции транзакций включен (serializable)
что если переключить в другой, например read committed ?
Код: sql
1.
set isolation level read committed
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718568
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
innodb pool buffer size увеличить еще можно, раз чтение затыкается.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718577
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett,

А смысл? На уровне MySQL проблем нет, запросы отрабатывают за доли миллисекунд.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718601
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, интересная ситуация, когда в отдельных точках, проверяемых наугад, проблем нет, а в целом проблема есть.
Наверно, самое время для более подробного описания конфигурации используемого ПО и, вероятно, железа. Думается, есть смысл поглядеть за изменением загрузки CPU, использованием памяти и топом процессов во время теста.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718617
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да неее, давайте еще страниц 10 погадаем, потом посмотрим во что сервер упирается, если конечно ТС соизволит
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718665
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер на Debian 7, 4 ядра (4G RAM), PHP 5.6.36. Мысли об апгрейде железа под нагрузки были, но есть ощущение, что первоочередная причина в оптимизации.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718697
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Про ПО, его архитектуру и конфигурацию расскажите?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718703
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уже спрашивал, но не видел, ответили или пропустили
во время медленной вставки, что показывает htop, atop ? есть ли чрезмерная нагрузка на cpu, диск?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718747
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

В top такая картина. Нужные процессы выделены красным, видно, что они занимают 1-4% каждый.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718770
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот скриншот снят во время проблемного запуска? Тормоза ж при околонулевой нагрузке CPU. Либо сеть совсем дохлая (так понимаю, "урл дергается" по сети), либо дисковая подсистема никуда не торопится (мускулю периодически нужно ж сбрасывать данные на диск). Или, может быть, у вебсервера какое-то дурное ограничение на входящие подключения (тупо ставит http-запросы в очередь) но в таком случае секретная "дергалка" должна бы о неразумных таймаутах просигнализировать в логах, если это вообще логгируется.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718790
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Да, во время запуска. Единственное отличие от "тихого" режима – ядра начинают использоваться процента на 3.
"Дохлая сеть" в смысле скорость передачи от меня на сервер? Был бы вероятен такой вариант, дабы интернет у меня имеет свойство барахлить, если бы ранее не были зафиксированы подобные тормоза у множества юзеров (сотни тысяч) с таймаутами порядка 10-20с и адские перегрузки с нередким крашем сервера. Но тогда ещё могла быть причина в плохой оптимизации таблиц (unique key – строка на 50 символов и отсутствие иных индексов, а там частый запрос был select с order by и limit), сейчас таблицы оптимизировали и тестируем перед релизом всю эту систему.
Таймауты в дёргалке (в консоли браузера после ответа от сервера) варьируются от 0.2 до 1.5с, но думаю, тут можно учесть скорость соединения и подвисание браузера при множестве запросов.
Про скорость дисков и количество запросов, каким образом можно увеличить эти параметры или посмотреть максимально возможные?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718811
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а диск? atop можете показать?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718826
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

atop, сверху до "атаки", снизу во время, нужный процесс выделен красным.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718838
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Ух... Ужас, сколько неучтенных и слабо контролируемых факторов.

Предлагаю во второй раз сузить область тестирования до PHP + MySQL. Локально. Запуск всех тестов исключительно из консоли сервера.

В качестве примера можете попробовать мои туповатые тесты с постов предыдущей страницы. Модифицируйте по собственному усмотрению. На сонном 4-ядернике 50...100 запросов в секунду в тесте main.php должны нормально так загрузить проц. Загрузка - это работа (хоть и не всегда производительная). Нет загрузки - нет работы.

Если на локальных тестах в связке PHP + MySQL нормально будет, то расширить область тестирования на вебсервер. Опять же, локально, без всяких "барахлящих интернетов" и браузеров. Написать скриптик с curl'ом, циклически "дергающий урл" - дело нескольких минут. Curl умеет и множественные запросы, если что, но по мне так для более ровного распределения по времени и простоты логгирования проще запустить 5...10 отдельных процессов с выводом результатов в отдельные файлы или консоли. Таймаут курлу установите в одну секунду (или менее). В лог для начала - время обработки запроса, код ответа вебсервера, вывод скрипта по желанию.

Если в локальных тестах обнаружатся заметные проблемы - следует искать их причины.

По загрузке дискового ввода/вывода - утилита iotop есть. В принципе, в atop тоже видно, только переключаться надо.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718915
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диска не влез или его не показывает в atop? (встречал такое на виртуалках kvm)
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39718933
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

Походу не показывает, у нас VDS.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719010
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда есть очень высокая вероятноть, что по iops имеются ограничения.
В них дело или нет, сказать точно сложно.
Вы все же попробуйте повысить размер innodb-pool-buffer-size.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719027
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hettпопробуйте повысить размер innodb-pool-buffer-sizeА смысл его повышать, если там данных с гулькин нос? Тормоза ж при таблице в сотню записей, она даже на мегабайт не тянет.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719059
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hett,

innodb_pool_buffer_size уже 3G при четырёх гигах оперативы.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719079
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Посмотрел ваши тесты, провёл аналогичные на локалке со своей таблицей. Скорость не поменялась, всё те же 3-5 записей в секунду. Т.е. скорее всего, повысить можно лишь через обновление ПО.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719084
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

Простой тест one.php тоже показал низкую производительность или, хотя бы, тысячу запросов прогнал в приемлемое время? Это простейший тест, он не должен тормозить при мало-мальски исправном железе.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719087
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingу нас VDSА не тут ли собака порылась?
Если самый низкий тарифный план или плохо настроена изоляция между клиентами, то можно любых просадок производительности ожидать.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719089
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

А, у Вас же виртуалка... На виртуалку могут всяких ограничений понавешать - и на проц, и на диск...
Там запросто подобное может пойти в десять раз хуже.
Поинтересуйтесь у хостера, не навалял ли он каких-то дурных ограничений. А то мож там ядер то четыре, да по 500 МГц каждое в эквиваленте. Дисковая подсистема хост-машины тоже может быть чем-то перегружена и покажет производительность на уровне дерьмовой флешки, она же не в Вашем личном распоряжении.

Найдите на битриксяческом сайте тестовый скрипт, предназначенный для проверки сервера перед установкой Битрикса. Называется bx_server_test.php или как-то так. Там есть простые тесты и для СУБД и для ФС. На остальные можете не обращать внимания. Для Вашего случая результаты тестов должны быть на "отлично". Если это не так, попробуйте потребовать объяснений у хостера. По крайней мере, оный скрипт является официальным и Вам будет на что сослаться.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719107
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkleПо крайней мере, оный скрипт является официальным и Вам будет на что сослаться.Это если тариф официально заявлен как совместимый с Битриксом. В иных случаях это вряд ли получится.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719108
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но я все равно предложил бы не бросать исследования и продолжить, либо сокращая front (локальный curl вместо удаленного браузера), либо сокращая back (убрать из кода обращения к MySQL, заменить весь код одной строчкой с логированием и т.д.).
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719113
gpbetatesting
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Под тестом я имел в виду "запустить свой скрипт на локалке (xampp, т.е. другая конфигурация сервера) и посмотреть на скорость добавления в локальную же таблицу". По вашему тесту выходят аналогичные результаты, только ещё ругается на превышение максимального времени работы скрипта.

Тест Битрикса показал отличные результаты.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719128
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftvkleПо крайней мере, оный скрипт является официальным и Вам будет на что сослаться.Это если тариф официально заявлен как совместимый с Битриксом. В иных случаях это вряд ли получится.Ну как мыслю. Битриксу нужен достаточно высокопроизводительный сервер. Иначе он в тестах покажет "сайт работает медленно". Да и владелец сайта с посетителями будут не вполне довольны.
Под рассматриваемую задачу, в том виде как она сейчас поставлена и реализована, нужен высокопроизводительный сервер. Всё же, 50 http-запросов в секунду, пусть даже и относительно простых, легко могут поставить сервер колом при "грамотном" подходе. На битриксяческие тарифы, во всяком случае, можно как-то ориентироваться в плане производительности. Если тариф заведомо существенно худший - ну тут понятно, ошибка выбора тарифа - тогда претензий и быть не может.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719135
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingПо вашему тесту выходят аналогичные результатыОпять темните... По которому из двух и при каком режиме... чего и сколько показал? Ну ей Богу, как партизан на допросе.

gpbetatestingТест Битрикса показал отличные результаты.Отлично, что и требовалось для подтверждения! Мускуль и ПХП работают нормально, ФС тоже, стало быть. Выходит, означенная в топике проблема более-менее признанным тестовым скриптом и близко не подтвержена. Тем не менее, тормоза как-то фиксируются и они где-то в чем-то другом.

В первом приближении остаются два варианта.

Либо методика тестирования или её реализация не вполне корректна. Увы и ах, про нее мы знаем примерно как "что-то там в притормаживающем браузере, работающее через глючной инет". Ни подробным описанием, ни конфигурацией, увы, не располагаем. Логами - тоже. Ещё и время ответа (?) сервера перепутано с таймаутом, ну да и черт с ним.

Либо проблемы на вебсервере, который тоже может ограничивать количество одновременно обрабатываемых запросов. Тип и конфигурация вебсервера являются секретными. А, нет, уже не совсем секретными - в слове xampp наконец то промелькнул Апач! Фиг знает, как сконфигурированный. Нужен ли этот монстрик под означенную задачу - тоже вопрос. А, nginx вроде ещё мелькал в топе... Ну, два вебсервера тут явно перебор.

Тут были скриншоты топа на сервере, где хорошо видно большое количество отдыхающих пхпшных процессов, которые вебсервер обычно держит в запасе для немедленного обслуживания запросов. Дык, может и запросов то столько нет, обрабатывать нечего... В смысле, фактически запросы не сыпются на сервер со скоростью 50 штук в секунду, а капают неспешно на четыре красным замалеванных процесса. Так или иначе, логи вебсервера никто не видел.

По хорошему, надо бы сложить логи "дергалки", логи вебсервера и логи пхпшного скрипта. Притом, в URL следует ввести уникальную отметку запроса, чтобы можно было отследить путь и время каждого из них в логе, вплоть до конкретной записи в таблице, куда можно добавить поле типа DATATIME и заносить текущую отметку времени по NOW(). Так вот как-то можно пытаться что-то понять...
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719192
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОтлично, что и требовалось для подтверждения! Мускуль и ПХП работают нормально, ФС тоже, стало быть
Не известно что там битрикс тестирует.
Может узкое место - это запись на диск, которую он и не тестирует вовсе.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39719246
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettНе известно что там битрикс тестирует.Что мешает открыть скрипт и посмотреть?
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39728810
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatesting,

чем дело кончилось, не томи...

зы
> Лог 39 запросов, отправленных за ~0.5c:
в логе мелькает около 10 пидов, не густо.
...
Рейтинг: 0 / 0
PHP+MySQL: тормозит добавление записи в таблицу
    #39729155
Фотография Karbafos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gpbetatestingСейчас выяснилось, что на скорость запроса влияло параллельное выполнение двух других (одна выбирает из той же таблицы один результат по uid и gid, другая выбирает 100 самых свежих по gid), но они выполнялись с приемлемой скоростью. Их отключение позволило увеличить скорость функции вставки до ~50/сек, но в рабочем режиме эти три функции вызываются от множества юзеров, причём сама вставка чуть реже чтения результатов (которая всегда вызывается в начале сессии).

показываем вывод show create table users_table;
...
Рейтинг: 0 / 0
81 сообщений из 81, показаны все 4 страниц
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP+MySQL: тормозит добавление записи в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]