На одном из моих серверов (i7 Ivy Core, 32 ГБ оперативной памяти, Debian 6 @64bit, PHP 5.4.10) У меня очень медленные вставки с SQLite. Следующая тестовая программа сообщает только 2.2 вставки/сек. (14 секунд для вставки 30 строк).
unlink("test.db");
$db = new PDO('sqlite:test.db');
$db->exec("CREATE TABLE test (dummy INT)");
$count = 30;
$t = microtime(true);
for ($i=0; $i<$count; $i++) {
$db->exec("INSERT INTO test VALUES ($i)")
or die("SQLite error: ".$db->errorInfo()[2]."\n");
}
$elapsed = microtime(true)-$t;
echo sprintf("%d inserts in %.3f secs (%.1f q/s)\n",
$count, $elapsed, $count/$elapsed);
Выход:
$ time php test.php
30 inserts in 13.911 secs (2.2 q/s)
real 0m14.634s
user 0m0.004s
sys 0m0.016s
Я знаю, что могу ускорить это, обернув BEGIN
/END
вокруг операторов insert (что дает мне 200000 q/s), но даже без транзакции это должно быть намного быстрее. На других (более старых) машинах (одна и та же версия PHP) я достигаю 300+ запросов/сек без явных транзакций.
Что может быть причиной этого? Должен ли я настраивать Sqlite или O/S?