Низкая производительность по запросу PostgreSQL

ОБНОВЛЕНИЕ: Только что пришло мне в голову: Возможно ли, что pgAdmin считает не фактическое время запроса, а время, необходимое для получения результатов в сетке?

Я просто выполнил запрос с помощью командной строки (psql) и вывел результаты в текстовый файл, и он был очень быстрым (1-2 секунды).

В этом случае проблема не в конфигурации сервера postgresql / ubuntu; это скорее проблема адаптера дисплея.

Я прав или ищу в неправильном направлении?


На моем "старом" компьютере (Core 2 Duo, 4 ГБ ОЗУ, 250 ГБ SATA HD), работающем в Arch Linux 64bit, я могу выполнить простой запрос "SELECT * FROM sometable" за 0,4 мс (я использую pgAdmin 3). База данных - это PostgreSQL 9.1 (с PostGIS), и таблица содержит около 60000 строк.

Я перенес базу данных на более новый компьютер (Core i5, 8 ГБ ОЗУ, 1 ТБ Western Digital Black SATA III), и тот же запрос занимает целых 22 секунды (!!!). На новом компьютере установлен Ubuntu Server 13.04 64bit.

Для дальнейшего тестирования я скопировал базу данных на 64-битный ПК с Windows 7 (Core i5, 6 ГБ ОЗУ), и запрос выполняется примерно за 10 секунд.

Это явно проблема конфигурации, но меня немного смущает, является ли это проблемой конфигурации PostgreSQL или Ubuntu Server.

Я уже пытался поиграться с conf-файлами PostgreSQL (kernel.shmmax, shared_buffers и т. Д.), Но безрезультатно. И, конечно, я VACUUMed, VACUUM ANALYZed и воссоздал все показатели.

Есть идеи? Я заинтересован в решении Ubuntu Server, а не о Windows 7.

Заранее спасибо,

Ebl

2 ответа

Чтобы получить время выполнения на сервере без передачи данных клиенту, используйте EXPLAIN ANALYZE,

Или используйте сочетание клавиш в инструменте запросов pgAdmin: SHIFT F7 (в зависимости от вашей ОС и версии проверьте меню запросов на наличие сочетаний клавиш).

Кстати, если вы обратитесь к руководству pgAdmin, используйте текущий выпуск - 1.18 на данный момент:
http://www.pgadmin.org/docs/1.18/query.html

Вы измеряете время, необходимое для передачи строк в pgAdmin:

http://www.pgadmin.org/docs/1.4/query.html

"Если набор данных был возвращен, отображается не только истекшее время выполнения сервера, но и время получения данных с сервера на страницу" Вывод данных "."

Если вы попробуете "выбрать количество (*) из sometable", это будет так же быстро, как на старом компьютере.

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