Последовательное сканирование PostgreSQL на крошечном столе медленно - PullRequest
1 голос
/ 22 декабря 2009

У меня есть таблица в PostgreSQL, которую мне нужно прочитать в память. Это очень маленькая таблица, всего три столбца и 200 строк, и я просто делаю select col1, col2, col3 from my_table для всего этого.

На компьютере разработчика это очень быстро (менее 1 мс), даже если этот компьютер является VirtualBox внутри Mac OS FileVault.

Но на рабочем сервере это постоянно занимает 600 мс. Производственный сервер может иметь более низкие спецификации, и версия базы данных тоже старше (7.3.x), но я думаю, что это само по себе не может объяснить огромную разницу.

В обоих случаях я запускаю explain analyze на самом сервере базы данных, поэтому это не может быть связано с нагрузкой на сеть. План выполнения запроса в обоих случаях представляет собой простое последовательное полное сканирование таблицы. В то время на производственной машине больше ничего не происходило, поэтому и споры тоже отсутствуют.

Как узнать, почему это так медленно, и что я могу с этим поделать?

Ответы [ 3 ]

3 голосов
/ 22 декабря 2009

Звучит так, будто, возможно, вы не выполняли VACUUMing этой базы данных должным образом? 7.3 - способ слишком стар, чтобы иметь AutoVacuum, поэтому это то, что вы должны сделать вручную (рекомендуется задание cron). Если у вас было много обновлений (со временем) для этой таблицы и вы не запускали VACUUM, доступ к ней будет очень медленным.

2 голосов
/ 22 декабря 2009

Это явно раздувание стола. Запустите вакуумный анализ рассматриваемой таблицы. Также - апгрейд. 7.3 даже больше не поддерживается.

0 голосов
/ 22 декабря 2009

что произойдет, если вы выполните запрос несколько раз? Первый запуск должен быть медленным, но остальные должны быть быстрее, потому что 1-е выполнение помещает данные в кеш.

Кстати: если вы выполняете SELECT ... FROM без каких-либо ограничений, то у вас есть 100% нормальное сканирование seq, вам нужно seq scan, чтобы получить значение, и, поскольку у вас есть ограничения, нет необходимости сделать сканирование индекса.

Не стесняйтесь публиковать результаты вашего запроса Explain Analyze.

PostgreSQL 7.3 действительно старый, нет возможности перейти на более современную версию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...