powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Теоретический вопрос по скорости обработки данных
9 сообщений из 9, страница 1 из 1
Теоретический вопрос по скорости обработки данных
    #38808408
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день. Есть много (порядка нескольких сотен) условно-независимых запросов, модифицирующих данные (функции, добавление, удаление, обновление). Все это хозяйство должно идти в одной транзакции. Как я понимаю, лучше для быстродействия все это впихнуть в одну или несколько больших команд и отправить из прикладного софта в СУБД. Или лучше это сделать пакетами по маленьким командам, да еще и в разных потоках? Последовательность выполнения запросов не принципиальная (точнее, можно отделить те ,где нужна последовательность от тех, где не нужна). Все запросы работают с 2-3 мя общими большими (~10-20 млн записей) таблицами.

Индексы задействованы. Интерсуют дальнейшие возможности по оптимизации. По моим представлениям разбивка обработки на несколько потоков выигрыша не даст, так как они все будут конкурировать за одну таблицу
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38808493
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamakama,
объединение нескольких операций в одну транзакцию приводит к ускорению до некоторого предела, за которым расходы на изоляцию начинают расти нелинейно. В большинстве случаев оптимальный размер транзакции легко определить на практике
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=494338&msg=4914268
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38808501
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamakamaони все будут конкурировать за одну таблицу
Зависит от того, что вы делаете. Если таблицу никогда не блокируете целиком и не работаете по конкурентным выборкам, то параллельное обновление будет давать ускорение.

Например, считаем баланс по заказам и обновляем баланс по клиентам.
Если потоки 1,2,3,4 обновляют клиентов с clientID вида xxx0, xxx1, xxx1, xxx3, то никаких блокировок не будет.
Если же вы между 4-мя потоками разделите заказы одного клиента, будут блокировки.
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38808524
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tadmin,

А размер транзакции в чем? В командах, в суммарной длинне текста команды?
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38808527
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас я ограничиваю размер отсылаемой на выполнение команды (не транзакции) в 65 Кб текста.

Да, думаю, без детального описания операций не получится. Есть линейная таблица 1 (10-20 млн записей) типа "ключ-значение" с несколькими атрибутами. Сначала сносится содержимое по значению атрибута, потом идет серия оперция вставок в эту таблицу. Есть линейная таблица 2 (20-30 млн записей), где выполняется update по ключу. Есть линейная таблица 3 (20-30 млн записей), где так же все сносится по значению атрибута и серия вставок строк. В принципе, это можно распараллелить, но у меня одноворемнно идет обработка на 10 машинах. Боюсь, что упрусь в производительность дисков.

Партицирование, полировка тонкими настройками ПГ - все это будет, но нужно выжать все соки из доступных решений
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38810002
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamakamaА размер транзакции в чем? В командах, в суммарной длинне текста команды?
Сейчас я ограничиваю размер отсылаемой на выполнение команды (не транзакции) в 65 Кб текста.
В количестве обновленных (вставки, обновления, удаления) записей за одну транзакцию.
Т.е. если вы вставили, а потом два раза обновили - на счетчике "3"

Очень приблизительно, оптимальный размер транзакции - обновление до 5-10 тысяч за транзакцию.

kamakamaДа, думаю, без детального описания операций не получится.
Ваше описание не позволяет дать какой-то определенный совет. Вам стоит создать тестовые таблицы, наполнить их данными, показать DDL таблиц, запросы и планы исполнения. Когда в планах все будет ОК, можно экспериментировать с числом параллельных потоков.
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38810056
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamakamaДобрый день. Есть много (порядка нескольких сотен) условно-независимых запросов, модифицирующих данные (функции, добавление, удаление, обновление). Все это хозяйство должно идти в одной транзакции. Как я понимаю, лучше для быстродействия все это впихнуть в одну или несколько больших команд и отправить из прикладного софта в СУБД. Или лучше это сделать пакетами по маленьким командам, да еще и в разных потоках? Последовательность выполнения запросов не принципиальная (точнее, можно отделить те ,где нужна последовательность от тех, где не нужна). Все запросы работают с 2-3 мя общими большими (~10-20 млн записей) таблицами.

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

транзакции по смыслу раставляются не только и не столько для производительности сколько для обеспечения целостности (все или ничего)
на основе этого и стоит размер транзакции определять

ну и конечно не стоит делать транзакции на часы (это очень вредно для базы).

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

PS: а как вы собираетесь соединить "должно идти в одной транзакции" и "пакетами по маленьким командам, да еще и в разных потоках" ?

PPS: перед тем как что то вообще менять надо понять во что процесс упирается.
Если в диск - паралельность не поможет. Если в процессор - поможет. И тд. Вариантов много бывает.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38812270
kamakama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

нет, объем транзакций - менее 1000 записей суммарно в среднем, выборок нет, только удаление и обновление по ключу + добавление записей. Время выполнения не более 5-7 секунд. Проблема в том, что однородные транзакции генерируют одновоременно примерно 20 потоков на разных вычислителях. И тут скорость обработки падает фатально. Подозрение на 2 места - или диски и тут ничего особо не сдалешь, или поиграться с настройками конфига (буферы запросов, буферы транзакций, кэш СУБД и т.п.)
...
Рейтинг: 0 / 0
Теоретический вопрос по скорости обработки данных
    #38812418
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamakamaMaxim Boguk,

нет, объем транзакций - менее 1000 записей суммарно в среднем, выборок нет, только удаление и обновление по ключу + добавление записей. Время выполнения не более 5-7 секунд. Проблема в том, что однородные транзакции генерируют одновоременно примерно 20 потоков на разных вычислителях. И тут скорость обработки падает фатально. Подозрение на 2 места - или диски и тут ничего особо не сдалешь, или поиграться с настройками конфига (буферы запросов, буферы транзакций, кэш СУБД и т.п.)

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

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Теоретический вопрос по скорости обработки данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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