Простые запросы иногда выполняются очень медленно
У меня есть несколько очень простых запросов, которые иногда выполняются очень медленно.
Таблица visible_sites имеет около 10 - 20 строк.
Запуск EXPLAIN ANALYZE всегда дает время выполнения менее 3 миллисекунд.
Когда запрос запускается автоматически (каждые 10 секунд), он иногда занимает более секунды для запуска.
Запрос:
INSERT INTO ga.viewed_sites (site_id) VALUES ('gop2')
Стол:
CREATE TABLE viewed_sites (
site_id character varying(4) NOT NULL,
last_viewed timestamp with time zone DEFAULT now() NOT NULL
);
(Случайный) результат журнала:
2010-05-24 15:47:55 UTC LOG: duration: 1044.632 ms statement: INSERT INTO ga.viewed_sites (site_id) VALUES ('gop2')
Это ужасно неопределенный вопрос, но что может быть причиной этого? Я предполагаю, что это сводится к процессору, оперативной памяти, жесткому диску или некоторой комбинации выше.
Postgresql 8.3, Ubuntu 8.04
Процессор Intel® Core ™ 2 Duo E6750 с частотой 2,66 ГГц
2 ГиБ оперативной памяти
2 ответа
Или стол может быть заблокирован. Который, кажется, все дано, более вероятно. Postgresql очень консервативен в отношении блокировок, но это может произойти. Одна секунда ожидания записи HD, или процессор кажется крайне маловероятным. И это не займет много оперативной памяти, чтобы сделать вставку. Проверьте таблицу pg_locks
(а также pg_stat_activity
чтобы увидеть, что они делают), и функции pg_lock_status()
или некоторые другие таблицы и функции, относящиеся к статусу блокировки.
Есть ли у таблицы внешний ключ? Если он должен проверить ограничение внешнего ключа, он должен выполнить поиск таблицы. Может быть, это замедляет это.
http://wiki.postgresql.org/ имеет массу советов.