Назад | Перейти на главную страницу

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

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

В таблице view_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 (R) Core (TM) 2 Duo CPU E6750 @ 2,66 ГГц

2 ГиБ RAM

Или стол мог быть заблокирован. Что, кажется, все дано, более вероятно. Postgresql очень консервативен в отношении блокировок, но это может случиться. Ожидание в одну секунду записи HD или CPU кажется крайне маловероятным. И, чтобы сделать вставку, не нужно много плунжера. Проверить таблицу pg_lockspg_stat_activity чтобы увидеть, что они делают), а функция pg_lock_status(), или некоторые другие таблицы и функции, относящиеся к статусу блокировки.

Есть ли у таблицы внешний ключ? Если ему нужно проверить ограничение внешнего ключа, он должен выполнить поиск в таблице. Может быть, это замедляет его.

http://wiki.postgresql.org имеет массу советов.