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

Коллеги, подскажите, какая лучше всего файловая система для хранения данных

постгреса ? база большая (400Гб), очень много таблиц (более 4к), и тормозит судя по strace на pread64 , т.е. на случайном чтении. Тормозит как select, так и vacuum, cluster и тд. Сейчас ext4 без какого-либо тюнинга. Что лучше выбрать для хранения данных таблиц на hdd (wal лежит на nvme/ext4): btrfs, xfs, jfs, zfs, nils ?

46 ответов

8 просмотров
Pavel-Nikiforov Автор вопроса

спасибо, кэп, это и так понятно. Но у заказчика может не быть бюджета на hot plug nvme .

Вот и оставьте ext4 и не меняйте

выберите ту фс, которую лучше всего знает ваш знакомы сисадмин

Pavel-Nikiforov Автор вопроса

с учетом того, что это 2 диска в зеркало и 400гб это не окончательный объем , плюс их надо будет hotplug делать и это все *2 для резервирования самого сервера в 500$ точно это не выльется.

Что-то мне подсказывает, что проблема тут далеко не в файловой системе и даже не в отсутствии индексов. При среднем размере таблицы в 100Мбайт все это добро должно даже при cross join двух таких таблиц должно спокойно влезать в оперативку при нормальных настройках в postgresql.conf

Pavel-Nikiforov Автор вопроса

оптимизировать запросы уже некуда: есть индекс btree по числу, по которому и достаются данные. sort, join - нет

Pavel-Nikiforov Автор вопроса
Iurii Shaporenko
Что-то мне подсказывает, что проблема тут далеко н...

ну вот тыкая perf-ом и strace получаю что тормозит именно чтение с диска, так как постгрес читает 8к за раз одним pread64.

Pavel Nikiforov
оптимизировать запросы уже некуда: есть индекс btr...

Какие параметры сервера и какие настройки shared_buffers и work_mem стоят?

Pavel Nikiforov
ну вот тыкая perf-ом и strace получаю что тормозит...

тут еще может такая штука быть как исторические данные лежат в одной куче с горячими. Так то мало вводных) Менять фс по моему как то странно

Pavel-Nikiforov Автор вопроса
Iurii Shaporenko
Какие параметры сервера и какие настройки shared_b...

X5680 *2, 16Gb RAM (ее хватает, во время работы остается free) , shared_buffers = 4096MB , work_mem = 128MB .

Pavel Nikiforov
ну вот тыкая perf-ом и strace получаю что тормозит...

А ещё бы хорошо посмотреть \d+ таблицы, откуда читаете, и explain analyze самого запроса. А то мало ли

Pavel-Nikiforov Автор вопроса
Andrew ᛉ
тут еще может такая штука быть как исторические да...

ну так вот дело в том, что все данные "теплые": оно частями достается постоянно, частично обновляется

База, которая постоянные random iops гоняет, на hdd. Wal, который by design sequential iops гоняет, на nmve. Правильной дорогой идёте.

Pavel-Nikiforov Автор вопроса
sexxst
База, которая постоянные random iops гоняет, на hd...

nvme там не только для wal, но и для части таблиц которые мелкие, но с очень большим количеством запросов. с ними как раз проблем нет.

Pavel-Nikiforov Автор вопроса

нет, конечно. select * from ... where idx in (....), обновления тоже пачками по 100-200 записей. софт уже поправлен, что бы не было обновлений одной таблицы "параллельно" из нескольких потоков

Pavel Nikiforov
нет, конечно. select * from ... where idx in (.......

А вот это уже читали? https://habr.com/ru/company/ozontech/blog/564520/

https://habr.com/ru/post/169513/

Pavel-Nikiforov Автор вопроса
Pavel-Nikiforov Автор вопроса
Andrew ᛉ
https://habr.com/ru/post/169513/

ну вот тут как раз ожидаемые числа

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

Pavel Nikiforov
nvme там не только для wal, но и для части таблиц ...

Мелкие таблицы, из которых постоянно — будут сидеть в памяти, нет смысла их на nvme класть.

Pavel Nikiforov
ну вот тут как раз ожидаемые числа

ставьте XFS https://www.programmersought.com/article/84541519658/

Andrew ᛉ
https://habr.com/ru/post/169513/

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

Pavel Nikiforov
спасибо, кэп, это и так понятно. Но у заказчика мо...

Да тут даже обычные sata/sas ssd вместо имеющихся механических дисков будут на совершенно другом уровне. И это те самые 400-500$ фактически

Andrew ᛉ
там 13 год, 9.2.1 версия pg ... :c

Это вопрос не к pg, а к ядру

Pavel-Nikiforov Автор вопроса
sexxst
Да тут даже обычные sata/sas ssd вместо имеющихся ...

этот вариант рассматривается, но вопрос в том, насколько быстро софт "запилит" диск, что его придется менять.

Pavel Nikiforov
этот вариант рассматривается, но вопрос в том, нас...

Берете какой-нибудь intel с mlc ячейками. Забываете лет на 5-7

Pavel-Nikiforov Автор вопроса
Ilya Anfimov
Не сказал бы.

ну лучше чем 1 диск. для надежности 2й сервер с БД есть :)

Pavel Nikiforov
ну лучше чем 1 диск. для надежности 2й сервер с БД...

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

Pavel Nikiforov
да, cluster не особо помогает.

Мне кажется, Вы не до конца поняли посыл этой статьи... и Вам правильно же советуют https://t.me/pgsql/317882 . Т.е. если добиться того, чтобы все "горячие" данные были в shared buffers, то эффект будет гораздо больше, чем от "плясок вокруг дисков". Как говорится, "Cache is King". ©

Pavel-Nikiforov Автор вопроса
Yaroslav Schekin
Мне кажется, Вы не до конца поняли посыл этой стат...

нету там горячих данных - запросы к этим данным рандонмые: читается случайная часть данных с точки зрения софта, генератор случайности - юзер, который то это смотрит, то то.

Pavel Nikiforov
нету там горячих данных - запросы к этим данным ра...

Так, на самом деле, в правильно спроектированных OLTP базах почти никогда не бывает — что-то из выделенного к этой не относится? Или она чем-то ещё особенная?

Pavel-Nikiforov Автор вопроса
Yaroslav Schekin
Так, на самом деле, в правильно спроектированных O...

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

Pavel Nikiforov
какие данные запросит юзер предугадать невозможно....

Значит, опять-таки — тут либо просто не хватает RAM, либо какая-то часть того, что читается с диска — просто лишняя (к примеру, малополезные индексы плохи не только тем, что замедляют CRUD, но и тем, что занимают "чужую" память / искусственно "раздувают" горячие данные). Т.е. на Вашем месте я бы смотрел в этих направлениях.

Ну да, я видел (и Вас даже процитировал ;) ) — мне просто показалось, что он не понял, что и почему ему советуют.

Pavel-Nikiforov Автор вопроса
Yaroslav Schekin
Значит, опять-таки — тут либо просто не хватает RA...

я уже пробовал выключать часть индексов: постгрес переходит на "grep" по данным, что не очень хорошо, так как поднимаются все данные с диска. в таблице 2 индекса, оба активно используются при запросах. в одном из индексов есть include поле: оно нужно для того, что бы как раз не поднимать с диска саму запись ради u32 числа. сама запись в БД тоже максимально компактная, насколько это возможно. Все упирается в iops диска, скорее всего.

Pavel Nikiforov
я уже пробовал выключать часть индексов: постгрес ...

Нет, Вы не понимаете, в чём суть, к сожалению. :( Пример с индексом был просто примером для понимания — очевидно, неудачным. > Все упирается в iops диска, скорее всего. Опять-таки, при правильном проектировании (и, соответственно, достаточном количестве RAM) база на чтении будет "летать" хоть на дискетах, грубо говоря. ;) Т.е. диски практически не имеют значения. > в одном из индексов есть include поле: оно нужно для того, что бы как раз не поднимать с диска саму запись ради u32 числа. Вот даже на этом примере — если другие запросы почему-то поднимают с диска те же сами записи — это "раздутые" горячие данные. Т.е. include тут — это минус, а не плюс. Т.е. общий посыл в том, что при нехватке RAM для "горячих" данных все прочие меры по сравнению с устранением этой нехватки практически бесполезны, понимаете? Проще всего добавить [быстрой] RAM, ясное дело. ;)

Pavel-Nikiforov Автор вопроса
Yaroslav Schekin
Нет, Вы не понимаете, в чём суть, к сожалению. :( ...

> Т.е. include тут — это минус, а не плюс с учетом того, что у меня в этих таблицах нет insert вообше (он был в начале, когда данные создавались), то для обновления данных мне надо как раз получить это поле u32 с индекса. так как hot update нет, то мне зачем читать всю запись ради одного поля, если я ее гарантировано буду перезаписывать ?

> я к тому что посмотреть в системной таблице вьюхе нельзя его работу? Для этого "из коробки" есть расширение: https://www.postgresql.org/docs/current/pgbuffercache.html > так то я понимаю, что чаще читается - то в буфере лежит. Грубо говоря, да (есть всякие специальные стратегии для работы с shared buffers, но они, в основном, для защиты от всяких "глупостей", вроде того, как если бы "случайный" seq.scan огромной таблицы "вымывал" всё, что было в RAM). > если я правильно знаю, то деления на разные буферы в постгрис как в оракле нет? Я не знаю, как там в Oracle. Но shared_buffers используется не только для кеширования данных БД, конечно.

Pavel Nikiforov
> Т.е. include тут — это минус, а не плюс с учетом...

> то для обновления данных мне надо как раз получить это поле u32 с индекса. Зачем?! > то мне зачем читать всю запись ради одного поля, если я ее гарантировано буду перезаписывать ? А всё равно PostgreSQL её прочитает. С HOT или без него — update всегда читает записи целиком, насколько я помню. Т.е. этот индекс — почти наверняка пример того, о чём я писал.

Pavel-Nikiforov Автор вопроса
Andrew ᛉ
ставьте XFS https://www.programmersought.com/arti...

поставил xfs, на ней действительно лучше стало. Еще попробовал jfs - ну то же самое, что и с ext4. На xfs при том же iops (ну быстрее не может оно) объем прокачиваемых данных больше.

Andrew ᛉ
ставьте XFS https://www.programmersought.com/arti...

Чего за древняя статья такая- «EXT4 can only support up to 4TB (more need to patch)»?

Pavel Nikiforov
поставил xfs, на ней действительно лучше стало. Ещ...

Ну да, мы тоже пробовали у себя на ней 👍

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

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

А чем вам питонисты не угодили?😂
.
79
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
4
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Подскажите, можно ведь комбинировать запись данных в один и тот же Stream через TFileStream и через TCompressionStream поочерёдно? Ну т.е. часть данных мне нужно сжать, часть ...
notme
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, кто сталкивался с тем, что Electron.js не разворачивает билд React.js-приложения? Голый body в чёрном цвете, как и должно быть, но остального - нет. Билд работает исп...
..
6
Карта сайта