select * from foo (100 000 строк) занимает 4 секунды, это нормально? - PullRequest
1 голос
/ 24 сентября 2010

У меня установлен postgres 8.4 на сервере Ubuntu с 4 ГБ оперативной памяти и Intel E5504 2 ГГц

Я создал одну таблицу

create table foo
(
id serial primary key,
fname varchar(30),
lname varchar(30)
) 

вставка 10 000 строк занимает около 4 секунд в первый раз и 1 секунду после
но выбор 100 000 строк всегда занимает 4 секунды,

select * from foo

это нормально или моя конфигурация может быть неправильной?

Может ли быть так, что мой удаленный канал Ubuntu ограничен или что-то в этом роде?

Ответы [ 2 ]

6 голосов
/ 24 сентября 2010

100000 строк вашей таблицы используют 6,4 МБ (или 12,4 МБ, если они в Юникоде).Это соответствует 64 Мбит / с, что занимает около 6,4 с в сети со скоростью 10 Мбит / с.Поэтому доступная пропускная способность сети может вызвать 4-секундную задержку, которую вы испытываете.

4 голосов
/ 24 сентября 2010

Попробуйте проверить, сколько времени займет запрос, выполняемый локально:

Подключитесь к локальной базе данных, используя psql:

psql -U username dbname

Включите отображение информации о времени:

dbname=> \timing
Timing is on.

Установить вывод для локального временного файла:

dbname=> \o /tmp/foo.txt

Выберите все строки из таблицы во временный файл:

dbname=> select * from foo;
Time: 104.442 ms

Проверка пропускной способности TCP между вашим сервером и вашим клиентом:

(на клиенте - я полагаю, Linux) Временно отключите брандмауэр:

# service iptables stop

(на клиенте) Начните прослушиваниена порту 10000:

# nc -l 10000 > /dev/null

(на сервере) Отправьте файл клиенту, используя обычный протокол TCP:

# time nc client_ip 10000 < /tmp/foo.txt
real        0m0.190s
user        0m0.004s
sys         0m0.078s

(на клиенте) Включить брандмауэр обратно:

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