Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Сыграйте в классический пасьянс и попробуйте разложить по порядку колоду из 52 карт, начиная с короля и заканчивая тузом. Игра имеет четыре варианта: с 1, 2, 3 и 4 мастями. Выиграйте как можно больше в каждом варианте и улучшите свои показатели.

Пасьянс Паук «Классический»

Карточные, Логическая, Мобильная

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Субд

С этим тегом используют

Postgresql Производительность Мониторинг Тестирование Нейронные сети Корреляция ИМХО Все
121 пост сначала свежее
kznalp
kznalp
4 дня назад

Продолжение игр с нейросетями⁠⁠

Вопрос нейросети

Как большое количество мертвых строк влияет на время выполнения select ?

Из ответа нейросети

Основные причины влияния мертвых строк на SELECT:
...
2. Ухудшение эффективности индексов
Индексы, построенные на таблице, также содержат ссылки на мёртвые строки. Это может привести к тому, что при использовании индекса для поиска данных, система будет проверять больше записей, чем необходимо, что замедляет выполнение запроса.
...
Как уменьшить влияние мёртвых строк ?
...
4. Использование индексов
Правильно настроенные индексы позволяют быстрее находить нужные данные, минуя мёртвые строки.


Как это понимать ? А вот как хочешь , так и понимай :-)


[моё] Юмор Субд Postgresql Нейромузыка Настройка
9
7
kznalp
kznalp
4 дня назад
Postgres DBA

Нейросеть пока не заменит инженера. Ну по крайней мере в DBA⁠⁠

Вопрос нейросети :

Как на производительность СУБД PostgreSQL влияет недостаточный размер shared_buffers ?

Ответ нейросети:

**Увеличение операций ввода-вывода (I/O)**
**Неэффективное использование кэшей**
**Рост времени отклика**
**Проблемы с контрольными точками (checkpoints)**
**Конкуренция за блокировки**


Вопрос нейросети:

Как на производительность СУБД PostgreSQL влияет слишком большой размер shared_buffers ?

Ответ нейросети:

**Рост дискового I/O**:
**Неэффективное использование памяти (Double Buffering)**
**Снижение производительности контрольных точек (Checkpoint)
** **Снижение эффективности кэша**


Итог - рекомендации нейросети по оптимизации размера shared_buffers - бесполезны . Нейросеть приводит одни и те же симптомы при противоположных вводных данных.
Вывод - на данном этапе средствами СУБД установить характерные ожидания неоптимального размера shared_buffers , скорее всего, не представляется возможным. Необходимо проведение нагрузочного тестирования и статистический анализ производительности СУБД силами инженера DBA.
Более того , в каждом конкретном случае, для, каждой конкретной конфигурации СУБД, инфраструктуры и нагрузки - результаты будут отличаться и требовать отдельного анализа.
В очередной раз - серебрянной пули нет.

Все нейросети имеют принципиальное и пока непреодолимое ограничения - они не обладают экспериментальными данными , только тексты , большая часть которых - мусор, в интернете . И уж конечно , я по крайней мере пока не встречал , нейросети не умеют экспериментировать и логически осмысливать результаты .
Хотя , в области ML по экспериментам по оптимизации запросов что, то было . Но там очень ограниченная область. Да и тишина, что то последние 5 лет. Все внимание себе забрал ии.

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

А нейросети отлично подходят когда надо воды налить в инструкции и статьи - тут им конкурентов нет.

Показать полностью
[моё] Субд Postgresql Нейронные сети Оптимизация Тестирование Инженер
19
2
kznalp
kznalp
5 дней назад
Postgres DBA
Серия СУБД PostgreSQL

Экспериментальная проверка рекомендации DeepSeek по настройке autovacuum для PostgreSQL⁠⁠

Взято с основного технического канала Postgres DBA

Очередная иллюстрация -ЛЮБОЙ ответ нейросетей необходимо экспериментально проверять.

Экспериментальная проверка рекомендации DeepSeek по настройке autovacuum для PostgreSQL Нейронные сети, Субд, Postgres, Тестирование, Настройка, Длиннопост, DeepSeek

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

Вопрос DeepSeek

Как изменится производительность СУБД PostgreSQL при нагрузке создаваемой pgbench и количестве подключений от 5 до 100 для СУБД размером 300MB при ресурсах CPU = 2 и RAM = 2GB при изменении настроек автовакуума с настроек по умолчанию на агрессивные настройки ?

Ответ DeepSeek

Исходные параметры:

  • Размер БД: 300 MB

  • Ресурсы: 2 CPU, 2 GB RAM

  • Количество подключений: 5–100

  • Нагрузка: pgbench в режиме TPC-B (смесь SELECT/UPDATE).

  • Сравнение:
    Настройки по умолчанию:

autovacuum_vacuum_scale_factor = 0.2

autovacuum_vacuum_threshold = 50

autovacuum_vacuum_cost_delay = 20ms

autovacuum_vacuum_cost_limit = 200

Агрессивные настройки:

autovacuum_vacuum_scale_factor = 0.05 # Запуск при 5% изменений вместо 20%

autovacuum_vacuum_threshold = 25 # Нижний порог срабатывания

autovacuum_vacuum_cost_delay = 5ms # Меньшая задержка между операциями

autovacuum_vacuum_cost_limit = 1000 # Больше операций за один проход

Прогнозируемые результаты:

1. Низкая нагрузка (5–20 подключений):

  • По умолчанию:
    Автовакуум запускается редко. Мертвые кортежи накапливаются, но не критично. Производительность стабильна.
    TPS: ~600–800.

  • Агрессивные настройки:
    Автовакуум срабатывает чаще, но нагрузка от него незначительна. Мертвые кортежи удаляются своевременно.
    TPS: ~650–850 (+5–10%).

2. Средняя нагрузка (30–60 подключений):

  • По умолчанию:
    Накопление мертвых кортежей приводит к:
    Увеличению размера таблиц (из-за "раздувания").
    Замедлению SELECT (сканирование большего объема данных).
    Блокировкам при UPDATE из-за долгих вакуумных операций.
    TPS: падение до 400–500.

  • Агрессивные настройки:
    Частые, но короткие вакуум-сессии. Меньше "раздувания", быстрее доступ к данным.
    TPS: ~550–700 (+20–40%).

3. Высокая нагрузка (80–100 подключений):

  • По умолчанию:
    Критическое накопление мертвых кортежей. Автовакуум не успевает очищать данные, что вызывает:
    Резкое падение TPS (до 200–300).
    Рост времени отклика (блокировки, конкуренция за I/O).

  • Агрессивные настройки:
    Плюсы: Минимизация "раздувания", стабильный TPS (~450–600).
    Минусы: Конкуренция за ресурсы CPU между фоновым вакуумом и рабочими процессами. При 2 CPU возможны просадки из-за нехватки вычислительной мощности.

Ключевые метрики для сравнения:

  1. TPS (Transactions Per Second):
    Агрессивные настройки дадут прирост на 20–40% при 30–60 подключениях.
    При 80–100 подключениях рост TPS будет менее значительным (+10–15%) из-за ограничений CPU.

  2. Задержки (Latency):
    В агрессивном режиме задержки будут стабильнее, особенно в диапазоне 30–60 подключений.

  3. Размер таблиц (Table Bloat):
    Агрессивный автовакуум уменьшит "раздувание" на 40–60% по сравнению с настройками по умолчанию.

  4. Использование CPU:
    При агрессивных настройках нагрузка на CPU вырастет на 15–25% из-за частого выполнения вакуума.

Рекомендации:

  1. Для тестовой конфигурации (2 CPU, 2 GB RAM):
    Агрессивные настройки целесообразны при 20–60 подключениях.
    При 80–100 подключениях требуется мониторинг CPU: если загрузка достигнет 90–100%, производительность может ухудшиться.

  2. Оптимизация под высокую нагрузку:
    Увеличьте autovacuum_max_workers (если нужно параллелить вакуум).
    Настройте maintenance_work_mem (выделите 256–512 MB для операций вакуума).

  3. Дисковый I/O:
    Если диск медленный (HDD), агрессивный автовакуум может вызвать contention I/O. Используйте SSD для минимизации рисков.

Заключение:

Агрессивные настройки автовакуума улучшат производительность на 20–40% при 30–60 подключениях, предотвращая "раздувание" таблиц. Однако при экстремальной нагрузке (80–100 подключений) и ограниченных ресурсах CPU (2 ядра) возможна конкуренция за процессорное время, что снизит эффективность. Тестирование на реальной инфраструктуре с мониторингом CPU/I/O обязательно.

Результаты сравнительных экспериментов

Конфигурация виртуальной машины

CPU = 2RAM = 2GB

Версия СУБД:Postgres Pro (enterprise certified) 15.8.1 on x86_64-pc-linux-gnu, compiled by gcc (AstraLinuxSE 8.3.0-6) 8.3.0, 64-bit

Сценарий нагрузки "Mix Without median time"

Эксперимент-1 : Настройки автовакуума по умолчанию

autovacuum_vacuum_scale_factor = 0.2

autovacuum_vacuum_threshold = 50

autovacuum_analyze_scale_factor = 0.1

autovacuum_analyze_threshold = 50

autovacuum_vacuum_cost_limit = -1

vacuum_cost_limit = 2000

autovacuum_vacuum_cost_delay = 2ms

Эксперимент-2 : "агрессивные" настройки автовакуума

autovacuum_vacuum_scale_factor = 0.01

autovacuum_vacuum_threshold = 25

autovacuum_analyze_scale_factor = 0.005

autovacuum_analyze_threshold = 10

autovacuum_vacuum_cost_limit = 2000

vacuum_cost_limit = 2000

autovacuum_vacuum_cost_delay = 2ms

maintenance_work_mem = 128MB

autovacuum_naptime = 5s

Результаты сравнительных экспериментов

Операционная скорость

Экспериментальная проверка рекомендации DeepSeek по настройке autovacuum для PostgreSQL Нейронные сети, Субд, Postgres, Тестирование, Настройка, Длиннопост, DeepSeek

Ось X - нагрузка на СУБД . Ось Y - операционная скорость

Ожидания СУБД

Экспериментальная проверка рекомендации DeepSeek по настройке autovacuum для PostgreSQL Нейронные сети, Субд, Postgres, Тестирование, Настройка, Длиннопост, DeepSeek

Итоги и проверка гипотез DeepSeek

  1. Операционная скорость для данной СУБД и данных ресурсах ВМ - не увеличилась и даже уменьшилась до -5% при оптимальной нагрузке.

  2. Характерные ожидания - не изменились .

  3. Гипотеза нейросети о влиянии "агрессивной" настройки автовакуума на производительность СУБД - не подтвердилась:

Агрессивные настройки автовакуума улучшат производительность на 20–40% при 30–60 подключениях, предотвращая "раздувание" таблиц.

Показать полностью 3
[моё] Нейронные сети Субд Postgres Тестирование Настройка Длиннопост DeepSeek
3
2
kznalp
kznalp
6 дней назад
Мнения
Серия ITшное

Вайбкодинг и вообще использование ИИ разрабами это хорошо ! Инженеры без работы не останутся !⁠⁠

Очень часто, встречаю термин "вайбкодинг", стало интересно - а что это такое ?

«Вайб-кодинг» (vibe coding) — стиль программирования с помощью искусственного интеллекта. Разработчик пишет задачу нейросети простым разговорным языком и получает готовый код. secrets.tbank.ru

Этот подход ускоряет разработку и делает её доступной для людей без технических знаний. Также он снижает порог входа в сферу разработки ПО — учить языки программирования не нужно, достаточно лишь грамотно выражать свои мысли. secrets.tbank.rucorp.cnews.ru

Термин «вайб-кодинг» придумал Андрей Карпатый, бывший исследователь компании OpenAI, разработчика нейросети ChatGPT. corp.cnews.ru

Это очень хорошая новость . Чем шире, полнее и чаще будет использоваться так называемый ИИ современным поколением разрабов - тем лучше.
Особенно в секторе решений enterprise.
Причина очень простая - всё, что они навайбкодят потом придется долго и терпеливо оптимизировать . Современные разработчики и раньше понятия не имели как СУБД работает:

-Вы зачем эксклюзивную блокировку используете?
-Это не мы это фреймворк такой.
моя любимая цитата из общения с современным разрабом.

-А почему у меня запрос так долго работает ?
-Потому, что вам удалось сделать SQL запрос со стоимостью плана выполнения триллион .

-А почему на сервере СУБД запрос выполняется быстро , а форма у клиента открывается долго ?
-А потому, что запрос выдаёт сотни тысяч строк.

А теперь еще и основные принципы разработки будут забыты.

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

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

Так, что обращение к современному поколению разработчиков :
Судари и сударыни , коллеги - шире, больше и активнее используйте в своей работе нейросети , искусственный интеллект и разнообразных чат-ботов !
Не тратьте время на эксперименты и нагрузочное тестирование .
Этим, вы обеспечите долгую и очень интересную работу для своих коллег инженеров . В первую очередь для DBA!

Или проще говоря: чего тут думать , трясти надо !
Трясите больше, трясите чаще, трясите сильнее !
А думать будут инженеры , потом . За свои растущие зарплаты 😉

Показать полностью
[моё] ИМХО Разработка Субд Нейронные сети Искусственный интеллект Текст
0
5
kznalp
kznalp
6 дней назад
Postgres DBA
Серия ITшное

Страшилка которой пугают всех DBA - очень большой размер shared_buffers⁠⁠

Вопрос : Какие события ожидания возникают при излишнем размере shared_buffers ?


Ответ ChatPPG:

При установке слишком большого значения для параметра shared_buffers в PostgreSQL могут возникнуть следующие проблемы и события ожидания:

1. Двойное кэширование (Double Buffering):
- Когда страница данных должна быть загружена в shared_buffers, она может сначала вытеснить существующую страницу, а затем операционная система (OS) может также вытеснить страницу, чтобы прочитать данные с диска. Это приводит к тому, что одна и та же страница хранится как в кэше PostgreSQL, так и в кэше OS, что приводит к избыточному использованию памяти и потенциально к более медленной производительности, так как страницы могут чаще читаться напрямую с диска, а не из кэша.

2. Нестабильность системы:
- Если shared_buffers установлен слишком высоко, это может привести к ошибкам нехватки памяти (out-of-memory errors) или активации механизма OOM (Out-Of-Memory) управляющего процессом, что может привести к нестабильности всей системы.

3. Затраты на очистку кэша после операций:
- После операций, таких как DROP TABLE, TRUNCATE или определенных команд COPY, PostgreSQL должна отменить большое количество буферов. При больших размерах кэша этот процесс может стать значительно более времязатратным и ресурсоемким.

4. События ожидания (Wait Events):
- Из-за избыточного использования памяти могут возникать события ожидания, связанные с операциями ввода-вывода (I/O). Например, события ожидания могут возникать из-за того, что система ожидает завершения операций чтения или записи данных с диска, что может замедлить общую производительность.

Для оптимизации использования памяти рекомендуется тщательно настроить значение shared_buffers относительно доступной оперативной памяти системы. Обычно рекомендуется устанавливать shared_buffers на значение, которое составляет от 25% до 40% от общего объема оперативной памяти, но не более 40%, чтобы избежать вышеупомянутых проблем.

Дополнительная информация о настройке shared_buffers доступна в документации PostgreSQL: [Memory Configuration](https://postgrespro.com/docs/postgrespro/15/runtime-config-r...).


Вывод - нейросеть ChatPPG не знает ответа на вопрос.
Либо , в PostgreSQL ожидания возникающие при большом размере shared_buffers не логируются. Как например , не логируются ожидания по причине утилизации CPU.


A вот ответ DeepSeek, гораздо интереснее , потому , что содержит конкретные названия событий ожидания (выделено мной):


При излишне большом размере `shared_buffers` в PostgreSQL могут возникать следующие события ожидания и проблемы:

### 1. **Увеличение времени поиска в буферном кеше**
- **Проблема**: Большой размер `shared_buffers` увеличивает время поиска данных в кеше из-за роста хеш-таблицы, управляющей буферами.
- **Ожидание**: `BufferPin` (задержки из-за конкуренции за доступ к буферам).

### 2. **Рост накладных расходов на блокировки**
- **Проблема**:
- Увеличение конкуренции за `LWLock` (легковесные блокировки), особенно за `buffer_mapping` и `buffer_content`.
- Блокировки на уровне буферов (`BufferLock`) становятся "узким местом".
- **Ожидания**:
- `LWLock: buffer_content`
- `LWLock: buffer_mapping`

### 3. **Неэффективное использование памяти**
- **Проблема**:
- Память отнимается у кеша ОС, что приводит к **двойному кешированию** (данные хранятся и в `shared_buffers`, и в кеше ОС).
- Нехватка памяти для рабочих процессов (`work_mem`, `maintenance_work_mem`).
- **Симптомы**: Увеличение операций I/O из-за отсутствия данных в кеше ОС.

### 4. **Проблемы с управлением грязными страницами**
- **Проблема**:
- При checkpoint требуется записать больше "грязных" страниц, что вызывает всплеск I/O-нагрузки.
- Увеличение времени завершения контрольных точек.
- **Ожидания**:
- `CheckpointWriteDelay` (принудительные задержки для регулировки записи).
- `WALWrite` (ожидание записи WAL).

### 5. **Деградация производительности при высокой конкуренции**
- **Проблема**:
- Множество процессов пытаются одновременно получить доступ к буферам.
- Увеличивается время освобождения буферов (`clock sweep` алгоритм замещения работает медленнее).
- **Ожидания**:
- `BufferPin`
- `IO: DataFileRead` (если данные не найдены в кеше).

### 6. **Снижение отзывчивости системы**
- **Проблема**:
- Избыточная память под `shared_buffers` может вызвать свопинг (swapping), если общая память сервера исчерпана.
- Увеличивается нагрузка на подсистему I/O и ЦП.

---

### Рекомендации:
1. **Оптимальный размер**:
- **15-25% от ОЗУ сервера** (но не более 40%).
- Пример: Для сервера с 64 ГБ ОЗУ — 8–16 ГБ.
2. **Мониторинг**:
- Следите за соотношением `cache hit ratio` в `pg_stat_bgwriter`. Если близок к 99% — увеличение `shared_buffers` не нужно.
- Анализируйте ожидания в `pg_stat_activity` и `pg_locks`.
3. **Настройка смежных параметров**:
- Увеличьте `checkpoint_timeout` и `max_wal_size` для снижения частоты контрольных точек.
- Настройте `bgwriter_delay` и `bgwriter_lru_maxpages` для эффективной записи грязных страниц.

### Пример диагностики:
```sql
-- Проверка hit ratio:
SELECT (sum(blks_hit) / sum(blks_hit + blks_read)) * 100 AS cache_hit_ratio
FROM pg_stat_database;

-- Поиск событий ожидания:
SELECT query, wait_event_type, wait_event
FROM pg_stat_activity
WHERE wait_event IS NOT NULL;
```

**Итог**: Слишком большой `shared_buffers` нарушает баланс между памятью, блокировками и I/O. Всегда тестируйте настройки под реальную нагрузку!


Самое занятное , что похоже DeepSeek тоже не знает ответа. Потому, что события BufferPin, BufferMapping, BufferContent возникают именно при недостаточном размере shared_buffers, что подтверждено экспериментально .


Итог : эксперименты нужно продолжать . Вполне может быть, что характерные ожидания , свидетельствующие о слишком большом размере shared_buffers не будут выявлены . Поживём - увидим.


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

https://habr.com/ru/companies/postgrespro/articles/466199/


Показать полностью
[моё] Субд Postgresql Нейронные сети Длиннопост
0
5
kznalp
kznalp
9 дней назад
Серия ITшное

Главный принцип - подвергай всё сомнению. В IT особенно!⁠⁠

Главный принцип - подвергай всё сомнению. В IT особенно! Субд, Postgresql, Настройка, Нейронные сети, DeepSeek, Длиннопост

Меня всегда интересовало - откуда вообще пошла рекомендация 25% RAM для shared_buffers ?

Спросил у DeepSeek

Кто первый рекомендовал значение 25% от размера RAM для параметра shared_buffers для СУБД PostgreSQL ?

Рекомендация устанавливать параметр **`shared_buffers`** в размере **25% от объёма оперативной памяти (RAM)** в PostgreSQL впервые появилась в **официальной документации проекта** и стала результатом **коллективного опыта разработчиков и сообщества**, а не авторства одного конкретного человека. Вот ключевые аспекты её происхождения и распространения:

---

### 📜 1. **Источник рекомендации**
- **Документация PostgreSQL**: В ранних версиях документации (например, в версии 9.1 и более поздних) явно указано, что для серверов с RAM ≥1 ГБ "разумным начальным значением" является **25% от общего объёма памяти** . Например:
> *"Если вы используете выделенный сервер с объёмом ОЗУ 1 ГБ и более, разумным начальным значением `shared_buffers` будет 25% от объёма памяти"* .
- Эта рекомендация позже стала стандартом в руководствах по настройке производительности.

---

### ⚙️ 2. **Почему именно 25%?**
- **Компромисс между кэшем PostgreSQL и ОС**: PostgreSQL использует двойное кэширование:
- `shared_buffers` — внутренний кэш СУБД.
- Кэш файловой системы ОС.
При значении выше 25% возникает дублирование данных в памяти, снижающее эффективность. При этом выделение <25% ухудшает производительность чтения данных .
- **Эмпирические тесты**: Эксперименты показали, что 25% обеспечивают баланс для большинства рабочих нагрузок (OLTP, аналитика). Например, тесты EDB в 2022 году подтвердили, что превышение 25% даёт незначительный прирост производительности, но повышает риски нехватки памяти для других процессов .
⚠️⚠️⚠️
Я провел серию тестов для EDB в 2022 году, чтобы определить, как общие буферы влияют на производительность PostgreSQL. Анализ проводился на устаревшем оборудовании с жесткими дисками и на более современных системах на базе SSD. В итоге мы пришли к выводу, что рекомендация 25 % в целом достаточна
⚠️⚠️⚠️
"(Из ссылки на результаты тестов)
Вы серьезно ? Это называете тестом и рекомендацией !? Ни одной цифры , ни одного графика . Просто "мы пришли к выводу" . А почему я могу верить вашим выводам ? Выводы на чем основаны ?
Я кстати, помню как во времена публикации на Хабре, один кекс в качестве критического комментария к моей статье по анализу производительности СУБД приводил эту статью.

"
---

### 📣 3. **Распространение рекомендации**
- **Сообщество и эксперты**: Совет стал общепринятым благодаря статьям на Habr , Crunchy Data , EnterpriseDB и в инструментах вроде **pgTune**.
- **Реальные конфигурации**: В корпоративных решениях (например, для розничных сетей) параметр строго следует правилу 25%:
- Для сервера с 6 ГБ RAM → `shared_buffers = 1.5 ГБ` .
- Для 32 ГБ RAM → `shared_buffers = 8 ГБ` .

---

### ⚠️ 4. **Исключения**
- **Системы с малым RAM** (<1 ГБ): Рекомендуется снизить долю до 15% или ниже .
- **Специфические нагрузки**:
- Для OLAP-систем с большими запросами иногда эффективнее 15–20% .
- Для чисто записывающих (write-heavy) нагрузок избыток `shared_buffers` может замедлить работу из-за накладных расходов на запись WAL .

---

### 💎 **Заключение**
Рекомендация в 25% для `shared_buffers` **не имеет единственного автора** — она сформирована разработчиками PostgreSQL на основе многолетнего опыта оптимизации. Её первое официальное упоминание появилось в документации (версии 9.x и ранее) , а затем было подтверждено практикой сообщества. Для современных систем это значение остаётся отправной точкой, но требует адаптации под конкретную нагрузку и мониторинг (например, через `pg_buffercache` и анализ соотношения попаданий в кэш) .


В общем , всё как обычно - в стародавние времена просто взяли цифру с потолка и затем рекомендация стала передаваться от одного акына к другому .
При этом не особо и задумываясь над целесообразностью, обоснованностью и не проведя анализ и тесты.
Что , в общем то подтверждает давно известное - основная масса DBA - ремесленники , верящие алхимикам.
Подлинное научное и инженерное знание и опыт в DBA это исключение , чем правило.

Показать полностью
[моё] Субд Postgresql Настройка Нейронные сети DeepSeek Длиннопост
6
2
kznalp
kznalp
10 дней назад
Китай
Серия IMHO

Пришло время учить китайский ...⁠⁠

Пришло время учить китайский ... Субд, Китай, Нейронные сети, DeepSeek, IT

Судя по полноте ответов DeepSeek на технические вопросы по СУБД PostgreSQL - материала и экспериментальных данных для обучения у китайской нейросети на порядки больше .

Пришло время учить китайский ... Субд, Китай, Нейронные сети, DeepSeek, IT

Видимо недалек тот день , когда китайцы представят и начнут активно продвигать свою СУБД. Наверняка у них есть свои решения , просто я пока не интересовался темой IT в Китае.

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

Показать полностью 1
[моё] Субд Китай Нейронные сети DeepSeek IT
6
0
kznalp
kznalp
10 дней назад
Postgres DBA
Серия ITшное

Shared_buffers для очень большой БД⁠⁠

Вопрос:

Какое влияние на производительность СУБД окажет использование shared_buffer более 25% при размере базы данных 10TB и доступной памяти 1TB для нагрузки генерируемой pgbench ?

Ответ ChatPPG

При использовании shared_buffers более 25% от общего объема памяти, особенно в случае большой базы данных (10TB) и ограниченного объема доступной памяти (1TB), могут возникнуть следующие проблемы:

1. Двойное кэширование: Если размер shared_buffers превышает определенный порог, PostgreSQL может начать кэшировать данные, которые уже находятся в кэше операционной системы. Это приводит к тому, что одни и те же страницы данных хранятся в обоих кэшах, что ведет к избыточному использованию памяти и потенциально к снижению производительности.

2. Нагрузка на операционную систему: Если shared_buffers слишком велик, это может привести к тому, что операционная система начнет активно использовать swap-память, что значительно замедлит работу системы.

3. Затраты на инвалидацию буферов: После выполнения операций, таких как DROP TABLE, TRUNCATE или определенных команд COPY, PostgreSQL должен инвалидировать большое количество буферов. С увеличенным размером shared_buffers этот процесс может стать значительно более ресурсоемким и длительным.

4. Ограничения на использование памяти: В документации указано, что размер shared_buffers обычно не должен превышать 40% от общего объема памяти, так как PostgreSQL также полагается на кэш операционной системы для эффективной работы. [Memory Configuration](https://postgrespro.com/docs/postgrespro/15/runtime-config-r...)

Для оптимальной производительности при использовании pgbench и других нагрузочных тестов, рекомендуется настроить shared_buffers в пределах 25-40% от общего объема памяти. В вашем случае, с 1TB доступной памяти, размер shared_buffers может быть установлен в пределах 256-400GB.

Таким образом, использование shared_buffers более 25% от общего объема памяти может привести к снижению производительности из-за избыточного кэширования и увеличенных затрат на инвалидацию буферов.


Ответ DeepSeek

Использование `shared_buffers` более 25% от доступной памяти (1 ТБ) для СУБД PostgreSQL с базой данных 10 ТБ и нагрузкой от `pgbench` может оказать **неоднозначное или даже негативное влияние** на производительность. Разберем ключевые аспекты:

### 1. **Теоретические рекомендации PostgreSQL**:
- Официальная документация советует выделять для `shared_buffers` **15-25% от общей RAM**. Для 1 ТБ это 256 ГБ.
- Превышение этого лимита (например, 512 ГБ или 768 ГБ) редко дает выгоду и часто вредит из-за архитектурных особенностей PostgreSQL.

### 2. **Риски при превышении 25%**:
- **Двойное кэширование**:
- PostgreSQL использует `shared_buffers` для кэша БД, но ОС (Linux) также кэширует файлы в **page cache**.
- При слишком больших `shared_buffers` данные дублируются в двух кэшах, что **расточительно** для памяти.
- Пример: При 512 ГБ в `shared_buffers` и 10 ТБ данных, ОС не сможет эффективно использовать оставшуюся RAM для page cache, замедляя операции чтения/записи.
- **Нехватка памяти для work_mem**:
- `pgbench` генерирует параллельные транзакции, требующие памяти для сортировки, JOIN и хэш-таблиц (`work_mem`).
- Если `shared_buffers` займет >50% RAM, рабочим процессам не хватит памяти. Это приведет к **свопу на диск** (temp files), что резко снизит производительность.
- **Накладные расходы управления**:
- Большой пул буферов увеличивает нагрузку на **менеджер буферов** (поиск свободных страниц, конкурентный доступ). Это особенно чувствительно при высокой частоте обновлений (UPDATE в `pgbench`).

### 3. **Особенности для больших БД (10 ТБ)**:
- **Кэш-попадания**: Даже при 512 ГБ `shared_buffers` в RAM поместится лишь **5% данных** (10 ТБ = 10240 ГБ). Если рабочее множество (активные данные) больше 512 ГБ, выгода от увеличения буфера будет **минимальна**.
- **Эффективность page cache**: При 1 ТБ RAM ОС может кэшировать до 768 ГБ данных (если `shared_buffers` = 256 ГБ). Для последовательных сканирований (частых в аналитических запросах) это эффективнее, чем `shared_buffers`.

### 4. **Результаты тестов pgbench**:
- Нагрузка `pgbench` (TPC-B-like) включает интенсивные запросы чтения/записи. Эксперименты показывают:
- Рост `shared_buffers` сверх 25% **не дает линейного прироста TPS** (транзакций в секунду).
- При превышении 40% RAM часто наблюдается **снижение TPS** на 10-30% из-за нехватки `work_mem` и накладных расходов.
- Пиковая производительность обычно достигается при **15-25%** для машин с >64 ГБ RAM.

### 5. **Оптимальная конфигурация для 1 ТБ RAM**:
- **`shared_buffers`**: 256 ГБ (25%).
- **`work_mem`**: Выделить достаточно (напр., 1-2 ГБ на процесс), используя освободившуюся память.
- **`maintenance_work_mem`**: Увеличить для VACUUM/INDEXING (напр., 64 ГБ).
- **Кэш ОС**: Оставить ~768 ГБ для page cache — критично для больших таблиц.
- **Параметры диска**: Использовать SSD/NVMe, так как 10 ТБ не поместятся в RAM.

### Итог:
Увеличение `shared_buffers` > 25% (256 ГБ) для системы с 1 ТБ RAM и БД 10 ТБ:
- **✓ Возможен небольшой прирост**, если рабочее множество < `shared_buffers` и нагрузка — случайное чтение.
- **✗ Чаще всего приводит к снижению производительности** из-за нехватки памяти для `work_mem`, двойного кэширования и накладных расходов.

**Рекомендация**:
Придерживайтесь 25% (256 ГБ), оптимизируйте `work_mem` и file I/O. Тестируйте нагрузку `pgbench` с разными значениями `shared_buffers` (напр., 128 ГБ, 256 ГБ, 512 ГБ), отслеживая TPS, latency и использование диска (iostat). Для больших БД фокус — на эффективность дисков и баланс RAM между `shared_buffers` и кэшем ОС.


P.S. Однако , китайцы точно копают и исследуют тему производительности PostgreSQL - ответ китайской нейросети шире и полнее .


Показать полностью
Субд Postgresql Тестирование Длиннопост Нейронные сети
2
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии