172 похожих чатов

Здравствуйте. Есть БД. версия 9.6. Круглосуточно мониторинг показывает нагрузку

на дисковую систему 1 Гигабайт в секунду. Постоянно что-то там читает. Причем график ровный.
Мы сисадмины, прогеры отвечающие за БД, пытаются переложить ответственность на нас из-за большого латенси. Но у нас по железу все в порядке. Могли бы что-то посоветовать? Как помочь найти (девочке, её котёнка) причину этой нагрузки?

52 ответов

61 просмотр

>прогеры отвечающие за БД, пытаются переложить ответственность на нас из-за большого латенси. Вообще, нагрузка, которую создаёт СУБД -- определяется по сути только средствами СУБД, потому пинать надо как раз этих DBA. Ну, вы можэте посмотреть iotop, да, чтобы попытаться убедиться, что нагрузка идёт в основном от СУБД (а не от каких-нибудь ещё непонятночего). А потом -- к ним. Выяснять, сколько там занимает autovacuum, сколько bgwriter, сколько запросы (последнее -- в основном через модуль auto_explain, остальные методы в цэлом труднее соотнести с реальностью).

А, да, в линуксах очень вероятно, что чуть-чуть поможэт смена io scheduler на noop. Но это всё... Ну, такоэ.... То есть если у вас 100 потоков, каждый в основном висит на чтении -- то в дисковой системе висят в среднем 100 реквестов, что даёт очередь в 8 мегабайт, и, при скорости дисковой подсистемы в гигабайт/секунду -- latency около 8мс минимум. Учитывая, что каких-то потерь в дисковой подсистеме линукса непредусмотрено -- вы, как сисадмины с этим сделать ничего не можэте. Да, база хочет читать, да, из такой нагрузки у неё создаётся такая очередь и такая задержка обработки.

Кстати, судя по скорости -- у вас там RAID-1 из двух SATA SSD?

Ilya Anfimov
А, да, в линуксах очень вероятно, что чуть-чуть по...

латенси там нормальный. там WA вечно 20-40 процентов. латенси в районе 3-8 держится, выше не прыгает

Ilya Anfimov
А кто такой WA?

Параметр top wa — (%wa percent I/O wait) — показывает процент операций, готовых быть выполненных процессором, но находящихся в состоянии ожидания от диска. Это может быть работа с базой данных.

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

Ilya Anfimov
3-8 -- микро или милли секунды?

ms не такая крутая СХД и сеть, что бы такие показатели были )

Переложили бы Вы на кого-нибудь ответственность за использование давно не поддерживаемой версии PostgreSQL (я даже уж забыл, какие там были средства диагностики). ;(

Salavat
Параметр top wa — (%wa percent I/O wait) — показыв...

Ах, iowait. Ну, ничего такого. Ну да, io-bound нагрузка -- логично, что у него будет большой io wait. Более того, дажэ до 50% обычно не дотягивает -- что намекает, что система, возможно, вполне вытягивает потребную нагрузку (но это не точно).

Sergey V Strel
а что по записи? странно такое иметь совсем без за...

по записи БД не очень активная. в среднем по палате от 30 до 100 мб в секунду .

Salavat
ms не такая крутая СХД и сеть, что бы такие показ...

Ну, тогда так себе. Но, опять жэ -- это всё вопросы или к тем, кто нагрузку даёт, или к тем, кто даёт жэлезо под эту нагрузку. Вы, как сисадмины, что-то сильно изменить тут не можэте.

Ilya Anfimov
Ну, тогда так себе. Но, опять жэ -- это всё вопро...

тут вопрос вообще стоит в том, что мы не можем понять сколько надо ресурсов. уперлись во что то, но во что уперлись- не понятно. вот и пытаемся понять в чем дело. p.s. по планам запросов- все более менее четко(если так можно сказать для супер старой версии)97 процентов запросов отрабатывают примерно за пол секунды, остальные в районе 30 секунд(там если сложные вещи).

Salavat
ms не такая крутая СХД и сеть, что бы такие показ...

Ну, то есть я хочу сказать, что есть вот вещи, которые определяются СХД, сетью, физикой и прочими сисдаминскими вещами. Это, по сути -- минимум скорости прохождения пакетов и обработки во всяких там свитчах/контроллерах. Это сисадминское, да. Но это обычно микросекунды-сотни микросекунд. В плохих случаях миллисекунды, да. А есть -- размер очереди (который определяется почти исключительно приложэнием) и физические ограничения на скорость её обработки. Делоим второе на первое -- получаем задержку, определяемую исключительно приложэнием. И если это приложэнием не вашэ -- то это вопросы к тому, что им управляет.

Salavat
такова жизнь, не всё в наших силах.

Ой, Да это ничего страшного — возможно, уже нашлись люди, в силах которых майнить криптовалюту на вашем сервере (и да, если Вам кажется, что это ерунда — именно такие случаи систематически "всплывают" в IRC-канале по PostgreSQL, в среднем по несколько штук в год). ;(

Salavat
тут вопрос вообще стоит в том, что мы не можем пон...

Я как-то не понял -- так вы упёрлись или у вас всё более-менее чётко?

Salavat
тут вопрос вообще стоит в том, что мы не можем пон...

тогда можно оценить баланс чтения по запросам и что имеем на io системы смотреть кто ещё пожрал io может у вас вакуума никогда не было, таблички разнесло, может что угодно быть

Salavat
тут вопрос вообще стоит в том, что мы не можем пон...

Кстатеда, если воркеров оключить от базы -- то как, нагрузка перестанет или продолжытся, хе-хе?

Ilya Anfimov
Я как-то не понял -- так вы упёрлись или у вас всё...

система работает, но не на той скорости на которой нам надо. мы ищем причину.

Ilya Anfimov
Кстатеда, если воркеров оключить от базы -- то как...

пробовали-нагрузка падает и WA соответственно тоже )

Salavat
система работает, но не на той скорости на которой...

тогда смотрите кто что читает может и не в базу совсем а может и в базу, поймёте по файлам в каком месте

Sergey V Strel
тогда смотрите кто что читает может и не в базу со...

виртуалка новая. и там только база. некому больше, но я уже искал-читает только любимый постгрес.

Salavat
виртуалка новая. и там только база. некому больше,...

раз виртуалка попробуйте погонять на в разы увеличенном буферном кеше

Salavat
система работает, но не на той скорости на которой...

То есть ничего чёткого нет, скорости нехватает. Так берите планы запросов, берите explain (analyze, verbose, buffers) -- и смотрите, что там тупит. io медленное (это по отношэнию buffers read ко времени обычно можно определить -- оно будет очень схожым во многих случаях, когда видно, что ничего практически большэ запрос не делал), или в CPU упирается или что-то ещё мешает.

Ilya Anfimov
То есть ничего чёткого нет, скорости нехватает. Т...

делали- все тяжелые запросы затюнены. мы работаем над улучшением запросов. но это не быстро.

Salavat
система работает, но не на той скорости на которой...

Но, опять жэ, это работа DBA. (И определять потребное количество воркеров для максимальной скорости либо для устраивающей задержки -- тожэ работа DBA).

Sergey V Strel
раз виртуалка попробуйте погонять на в разы увелич...

в субботу в 4 раза увеличивать собираемся )

Salavat
делали- все тяжелые запросы затюнены. мы работаем ...

Причём тут "затюнены"? Они у вас работает не с той скоростью, с которой вам надо. И первое, что вам нужно -- определить, чем они там занимаются.

Salavat
в субботу в 4 раза увеличивать собираемся )

а вообще какие характерные размеры таблиц в строках / байтах?

Salavat
делали- все тяжелые запросы затюнены. мы работаем ...

Ну и вообще, что значит "затюнены"? Они достигли минимального потребления ресурсов для вашых потребностях в данных? Ой ли? У вас тогда были бы спец.чипы, разработанные с привлечением хорошых математиков и лучшых программистов и заказанные по 17nm технологии. Пока спец.чипов у вас не стоит -- а стоит постгрес с его конскими накладными расходами на чтение строк -- производительность вашых запросов очень далека от максимальной. Уверен, кстати, что и в рамках возможностей ванильного постгреса -- тожэ далека. Ну, учитывая общий уровень, понимания, да. Всегда можно что-то улучшыть. Вопрос только -- готовы ли вы за это платить (или лучшэ вам заплатить за что-то ещё, или забить просто).

Salavat
делали- все тяжелые запросы затюнены. мы работаем ...

Вообще, как-то выбешывает этот подход. Не только (и не столько) в постгресе/DBAстве. "С сердцэм у меня всё в порядке, только вот астма и одышка замучали". В каком порядке -- ты ведь понятия не имеешь, что там работает и на каком уровне.

pg_activity покажет какие запросы жрут сколько IO, не подскажу как это посмотреть без этого

Ilya Anfimov
Ну и вообще, что значит "затюнены"? Они достигли м...

то, что было на момент когда я увидел эту базу, было просто адом, и я не говорю что у нас все идеально по запросам. я говорю-нет каких то определенных запросов, которые отжирают все ресурсы. на системе большое количество мелких запросов.(очень большое) мы не беремся утверждать что у нас есть такие крутые инженереы-математики, и уж тем более специально разработанные чипы. вопрос в том, что сейчас мы много читаем с этой базы, есть приложение (монолит) в котором нет возможности разом переписать все(план на это есть, но до него пока не дошли) так вот идея в том, что мы добились не высокого латенси(3-8 мс) на дисковой подсистеме(раньше БД крутилась на hdd(и она больше не работала, чем работала). но меня смущает высокий WA. как только ты что то селектишь, к примеру 50-70 мб в секунд( не запросами с 20+джойнами) WA на подсистеме поднимается до 8-10 %. что это может быть за очередь, когда никакой нагрузки нет, но проц ждет IO ? и да, есть ещё системы которые крутятся на этой СХД-они ведут себя нормально.

Salavat
латенси там нормальный. там WA вечно 20-40 процент...

Высокий wa - ожидание от диска (чаще всего). Выкиньте бд с схд тупой, на локальные, хотя бы sata ssd, не говоря уже о nvme.

Salavat
то, что было на момент когда я увидел эту базу, бы...

Я ещё раз повторюсь -- чтобы понять, чем занимается сервер, выполняющий запросы -- надо смотреть analyze buffers этих запросов. Ну, хорошо. Не надо. Есть другие способы. Просто они все гораздо сложнее -- потому ОЧЕНЬ ПОЛЕЗНО смотреть analyze buffers. Чтобы было проще это доставать -- лучшэ через auto_explain и сэмплинг. Когда посмотрите -- начнёте понимать, это чтение или сортировки, или seq scan, или что там можэт быть.

Salavat
нет такой возможности (

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

Ilya Anfimov
Я ещё раз повторюсь -- чтобы понять, чем занимаетс...

уже проверяли. это не сортировка. это именно чтения. я бы сразу написал, что пролбема с сортировками.

John Doe
делайте реплику, перекидывайте часть селектов туда...

нет такой возможности. только если load balanser ставить который SQL может на разные базы балансировать(типа pgpool2

Salavat
уже проверяли. это не сортировка. это именно чтени...

И что вам тогда неясно? Почему только 1 гигабайт в секунду? Ну, наверное, или сетевуха десятка всего или вы выдали два SSD в RAID 1. Или почему гигабайт в секунду чтения даёт такую скорость работы приложэния? Так для этого и нужэн explain запросов, с определением количества buffers read и прочим -- чтобы поделить гигабайт на объёмы чтения, и понять, где мы что теряем.

Ilya Anfimov
И что вам тогда неясно? Почему только 1 гигабайт в...

дак я только ДБА, я не могу получить от наших специалистов никакой инфы по железу. ответ один-там всё хорошо, а база у вас говно, оптимизируйте. если бы было всё так просто, мы бы сюда не писали )

Salavat
дак я только ДБА, я не могу получить от наших спец...

Так, я что-то не понял. Вы DBA или сисадмин таки? Вначале вроде было наоборот про сисадминов?

Ilya Anfimov
Так, я что-то не понял. Вы DBA или сисадмин таки? ...

не, я то ДБА. и сижу в этой группе и читаю посты часто. а писал о проблеме сис админ:)

Victor- Автор вопроса
Ilya Anfimov
Так, я что-то не понял. Вы DBA или сисадмин таки? ...

Сисадмины, это мы. Есть отдельное подразделение, которое по железу.

Victor- Автор вопроса
Salavat
не, я то ДБА. и сижу в этой группе и читаю посты ч...

В общем, план выглядит простой. Вы устраиваете sampling с auto_explain -- и смотрите, сколько базе требуется чтения под вашу нагрузку. В смысле -- сколько байт читает один <средний> запрос или там один <средний> клиент. Потом смотрите реальный сегодняшний максимум (клиентов/запросов в секунду) -- и определяете, сколько должно бы быть на сегодня. Гигабайт в секунду чтения, допустим. В процэссе -- прикидываете, насколько это оправдано. Возможно, есть алгоритмические способы получать гораздо большэ результата за заметно мЕньшые затраты. Потом -- спрашываете, сколько есть максимум скорости чтения с вашэй СХД. Прикидываете, сходятся ли результаты (вашэго максимума скорости и потребления IO сегодняшнего и максимума, который должна бы выдавать СХД. А заодно -- скорости, которая она выдаёт при максимуме нагрузки по результатам мониторинга). Когда все рузльтаты более-менее устаканятся и станут логично друг с другом соотноситься -- определяете, можэт ли ваша конфигурацыя потянуть нагрузку, которую вы хотите. (Потом или добиваете жэлеза по потребности или уменьшаете хотелки по максимальной скорости или закрываете проект как нерентабельный).

Ilya Anfimov
В общем, план выглядит простой. Вы устраиваете sam...

спасибо за рекомендацию. чуть позеже(после выхов) выложу апдейты, может мы чего то найдем )

Victor
Именно.

Кстати, к сисадминам -- в линуксе на SATA какой-то невменяемый prefetch по дефолту, типа 128 или 256. Потсгресу тащемта нужэн 16 (т.е. 8 килобайт). Иногда, если SSD с дурацким размером сектора -- типа 16к или 32к -- вроде бывает полезно выставить в размер сектора (т.е. 32 или 64) -- но сейчас ужэ редко (поскольку SATA SSD обычно упираются в интэрфейс). Так что поставьте hdparmом prefetch у реальных девайсов, если это вообще сработает (от HBA зависит, понятно). (а у lvm тогда лучшэ вообще 0 поставить).

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта