На моем сайте я закодировал функцию, которая показывает, сколько уникальных посетителей и сколько просмотров страниц я получаю в день.
Проблема в том, что иногда запрос на вставку выполняется вечно, а в InnoDB нет DELAYED INSERT
function.
Редактировать: Это использует InnoDB, что я имею в виду при длительном времени загрузки составляет около 6 секунд вместо 0,1-0,5 секунд.Как только я убираю логи, сайт становится намного быстрее.
Массив $b
содержит информацию о браузере, но, согласно XHProf, это запрос PDO, который выполняется так долго.
Код вставки:
$values = array(
'time' => time(),
'ip' => $_SERVER['REMOTE_ADDR'],
'page' => rtrim((isset($_GET['q']) ? $_GET['q'] : 'index'), '/'),
'browser' => $b[11][0] . ' ' . $b[11][1],
'os' => $uos,
'referred' => (isset($_SERVER['HTTP_REFERER']) && !preg_match('|^' . Config::getValue('site', 'url') . '|', $_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''),
);
$this->table->insert($values);
и код функции вставки:
public function insert($table, $data) {
ksort($data);
$fieldNames = implode('`, `', array_keys($data));
$fieldValues = ':' . implode(', :', array_keys($data));
$sth = $this->prepare('INSERT INTO ' . $table . '(`' . $fieldNames . '`) VALUES (' . $fieldValues . ');');
foreach ($data as $key => $value) {
$sth->bindValue(':' . $key, $value);
}
$sth->execute();
}