Простые запросы иногда выполняются очень медленно

У меня есть несколько очень простых запросов, которые иногда выполняются очень медленно.

Таблица 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/ имеет массу советов.

Другие вопросы по тегам