powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / таблица 70 000 строк притормаживает
22 сообщений из 22, страница 1 из 1
таблица 70 000 строк притормаживает
    #34788788
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заметил, что если в любой(!) и большой или маленькой таблице строчек примерно до 70 000, то операции insert/update/delete выполняются почти мгонвенно. Но вот если больше 70 000, то те же самые запросы начинают занимать все 100% ресурсов CPU и работают в десятки раз дольше. Пробовал на различных серверах. Запросов много - все они оч маленькие. Как только кол-во опускается менее 70 000 - то сново все летает.
Подскажите, что можно почитать на эту тему. Может можно еще что то потюнить.
Система:
Linux 2.6.22-r5 SMP
postgresql 8.1.9
8Gb Ram
Кроме постгреса других процессов на серваке нет.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789155
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так большой или маленькой таблице в 70000 строк ? :)

Ну и очевидно, что explain медленных и быстрых запросов в студию.
Хотя причина "тормозов" тоже очевидна - вместо кеша ПГ лезет в диск.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789380
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело что к примеру оч простые запросы

Код: plaintext
1.
select count(*) from works 

Код: plaintext
1.
2.
"Aggregate  (cost=1124.49..1124.50 rows=1 width=0)"
"  ->  Seq Scan on works  (cost=0.00..1098.79 rows=10279 width=0)"

до 70 000 летают - а после тормазят.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789484
Конфиг сервера и статистику загрузки можно подробнее?
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789497
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Также хотелось бы увидеть explain analyze - т.е. фактические данные о выполнении запроса.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789536
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postgresql.conf
max_connections = 10000
shared_buffers = 65536
temp_buffers = 800
work_mem = 65536
maintenance_work_mem = 131072
max_stack_depth = 2048
fsync = on
wal_buffers = 128
commit_delay = 1000
checkpoint_segments = 10
checkpoint_timeout = 900
effective_cache_size = 65536
random_page_cost = 4
redirect_stderr = on
log_rotation_size = 10240
stats_start_collector = on
stats_command_string = on
stats_block_level = on
stats_row_level = on
stats_reset_on_server_start = off
autovacuum = on
autovacuum_naptime = 90
max_locks_per_transaction = 80


Остальное по дефолту
База примерно 60 Gb
8Gb Ram (в свопе еще 214 кб)
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34789556
Конфиг дисковой подсистемы? Контроллер? Размер кэша? Tablespaces?
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34790090
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostreSQL начинающий Конфиг дисковой подсистемы? Контроллер? Размер кэша? Tablespaces?

диски 0+1 200Gb SATA 8mb кеш всего 4ре штуки
контроллер интеловский набортный
(!)Tablespaces? - это меня поставило в тупик - а как это смотреть?

ps -пробовали и на других серверах - диски побольше/поменьше, SATA/PATA/SCSI
все равно около 70 000 какие то тормаза - родилась идея может это наследие 12 битных систем?
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34790250
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nedbaв том то и дело что к примеру оч простые запросы

Код: plaintext
1.
select count(*) from works 

Код: plaintext
1.
2.
"Aggregate  (cost=1124.49..1124.50 rows=1 width=0)"
"  ->  Seq Scan on works  (cost=0.00..1098.79 rows=10279 width=0)"

до 70 000 летают - а после тормазят.

1) SELECT count(*) FROM table не является для постгреса простым запросом
2) Вы так и не представили цифры (время выполнения запросов), которые считаете большими.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34790474
ilejn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nedbaоперации insert/update/delete выполняются почти мгонвенно.

... и в качестве примера приводится select count(*)

Хорошо бы уточнить формулировку вопроса.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34791651
> диски 0+1 200Gb SATA 8mb кеш всего 4ре штуки
> контроллер интеловский набортный

Примерно это я и предполагал. Понятно, откуда берется загрузка процессора 100%. Пока размера кэша хватает, скорость приемлемая. Как только начинается активная работа с дисковой - затык: CPU работает и за себя и за процессор контроллера.

> Tablespaces? - это меня поставило в тупик - а как это смотреть?

Я не помню cli psql наизусть. Вопрос был к тому, чтобы понять, различаются ли правила кэширования для разных таблиц.

> пробовали и на других серверах - диски побольше/поменьше, SATA/PATA/SCSI

На других серверах есть смысл пробовать с другим конфигом и с другой дисковой (в первую очередь, с нормальным контроллером и нормальным количеством дисков). Если с дисковой проблемы, то различаться будет только количество данных в кэше (будет не 70000, а 100000 или 50000).
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34794242
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно вы правы
hdparm -t /dev/mapper/hhacaafe

/dev/mapper/hhacaafe:
Timing buffered disk reads: 8 MB in 3.76 seconds = 2.12 MB/sec


и еще
top - 13:15:39 up 1 day, 55 min, 2 users, load average: 20.22, 17.90, 17.06

Есть ли способ (возможно есть уже готовые тесты) проверить что система слаба для такой нагрузки. Похоже придется писать обоснование - по тому прошу помощи.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34794372
ChameLe0n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
load average 20 - это огромное значение. Пытались определить откуда такая нагрузка?
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34794491
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ChameLe0nload average 20 - это огромное значение. Пытались определить откуда такая нагрузка?

как это можно сделать? какие есть методы? я использую команду top
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34794560
> load average: 20.22, 17.90, 17.06

Дикие значения. Должны быть меньше 1. iostat?

> проверить что система слаба для такой нагрузки

Для дисковой - iometer.

Менять - это простой способ. Попробуйте сначала экстенсивные: версия, конфиг PostgreSQL. Надеюсь, система у вас - не Ubuntu?
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34794652
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторSearching...
[ Results for search key : iometer]
[ Applications found : 0 ]

Gentoo (sync 06.09.07)
kernel 2.6.22-r5 SMP
Postgres postgresql-8.1.9
8Gb Ram
Кроме постгреса других процессов на серваке нет.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34795069
> iometer

iometer.org

> Gentoo (sync 06.09.07)

Не могу ничего сказать, не сталкивался. Я использую либо CentOS, либо RHEL. Imho экзотические дистрибутивы для промышленных задач... в общем, я бы воздержался: хардваре вендоры не гарантируют совместимость со всеми возможными дистрибутивами и Gentoo я, если честно, никогда не встречал в CL.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34795226
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nedba

1. ~70000 строк - это ваша эмпирическая оценка для размера кеша определяемого
shared_buffers = 65536 относительно ваших объемов данных.
2. effective_cache_size = 65536 - мало, надо 1/2 - 2/3 от всего объема памяти на выделеном сервере.
3. uname -a - выдает SMP ?
4. очевидно, что у вас проблемы с дисковой подсистемой - нужен нормальный контроллер или его драйвер.


PostreSQL
авторНадеюсь, система у вас - не Ubuntu?
У меня на Debian ПГ отлично живет с нагрузкой промышленых масштабов.
Ubuntu от Debian ничем по сути не отличается.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34795848
nedba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex_v13 nedba

1. ~70000 строк - это ваша эмпирическая оценка для размера кеша определяемого
shared_buffers = 65536 относительно ваших объемов данных.
2. effective_cache_size = 65536 - мало, надо 1/2 - 2/3 от всего объема памяти на выделеном сервере.


Как раз за эти параметры я сейчас и бьюсь. При увеличении effective_cache_size - хотя бы в двое - система ведет себя так: после перезагрузки все запросы летают, через 20 минут начинают исполнятся дольше чем после перезагрузки раз в 10, через 4-5 часов система еле ворочает даже простой запрос типа SELECT * FROM tables1 LIMIT 1 . Помогает только перезапуск постгреса.

Отсюда вопрос - effective_cache_size - как сказано в документации http://www.postgresql.org/docs/8.2/interactive/runtime-config-query.html отвечает за распределение кеша для одной квери исходя из доступности кеша дискового и распределяемого ядром. Значит при большом количестве маленьких запросов к разным таблицам в памяти будут сидеть не данные страниц таблиц, а индексы этих таблиц. и каждая новая квери будет пытатся сначала выкинуть LRU чужих индексов и засунуть туда свои индексы, а потом только уже искать среди них условия своего селекта. А так же не сказанно, что индексы твоей квери доступны другим потокам обращающимся к той же таблице в это же время (из-за версионности(?)).

Вопрос первый - так ли я понял.
Вопрос вторй - надо ли тогда его делать все-таки большим и появится ли прирост производительности через некоторое время большой нагрузки.
Третий вопрос - как можно повлиять/настроить дисковый кеш, который управляется ядром (по тому, что постгрес не пытается брать на себя функции возложеные на операционку).
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34795945
alex_v13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не вдаваться в особые подробности, то ситация такая:

1. Параметр shared_buffers отвечает за размер объема памяти используемого всеми потоками Постгреса для хранения/кэширования данных необходимых для выполнения запросов. Эта объем памяти не кешируется линуксом и не свапится.

2. effective_cache_size - это скорее не объем памяти, а некая оценка производительности связки "кэш-память + дисковая подсистема". Указанный оптимальный размер в 1/2 - 2/3 объема памяти выделенного сервера, исходит из того предположения, что вся свободная пямять кроме нужной самому северу + shared_buffers + work_mem на каждый обрабатываемый запрос - уйдет на кэш дисков, а это как раз и будет сколько указано, при нормальных настройках/параметрах.

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

Вероятность же того, что у вас происходит именно так, надо оценить...

Какой у вас размер таблиц и базы? Какая статистика по hit/read в pg_stat_database, pg_statio_user_tables, pg_statio_user_indexes, какое соотношение seq_scan/index_scan в pg_stat_user_tables, насколько они вообще использутся (в смысле индексы).
Если не включен сбор статистики - включите.
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34796775
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nedbaОтсюда вопрос - effective_cache_size отвечает за распределение кеша для одной квери исходя из доступности кеша дискового и распределяемого ядром.

Вопрос первый - так ли я понял.Нет. Effective_cache_size не влияет на распределение кеша. Он влияет только на выбор плана выполнения запроса. "Sets the planner's assumption about... This parameter has no effect on the size of shared memory allocated by PostgreSQL, nor does it reserve kernel disk cache; it is used only for estimation purposes."

nedbaПри увеличении effective_cache_size - хотя бы в двое - система ведет себя так: после перезагрузки все запросы летают, через 20 минут начинают исполнятся дольше чем после перезагрузки раз в 10, через 4-5 часов система еле ворочает даже простой запрос типа SELECT * FROM tables1 LIMIT 1.Если скорость выполнения запросов меняется в зависимости от effective_cache_size, значит нужно разбираться с планами запросов.

PS: ИМХО, разработчики плохо обозвали этот параметр. :-(
...
Рейтинг: 0 / 0
таблица 70 000 строк притормаживает
    #34806657
razn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PostreSQL начинающий> Надеюсь, система у вас - не Ubuntu?
У меня Ubuntu! А что нежелательно Postgres на Ubutu?! Вот так новостию... А почему?!
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / таблица 70 000 строк притормаживает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]