Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как транзакции влияют на производительность? / 14 сообщений из 14, страница 1 из 1
04.07.2007, 11:33
    #34637222
_Андрей_М
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Есть база, в которую идёт массовая вставка записей(Delphi -> Zeos 6.6.1 -> PG 8.2.3).
Пробовал делать коммит после каждой вставки, и после каждых 1000 вставок.
Разница в скорости - в пределах погрешности измерения. Это нормально, или я что-то не так делаю?
Дело в том, что в InterBase скорость вставок при массовом коммите сильно возрастает. Но понятно, что базы разные.
...
Рейтинг: 0 / 0
04.07.2007, 12:21
    #34637446
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
А вы уверены, что в ZEOS компонентах не стоит автокоммит и поэтому скорость вставки одинаковая?
Возможно ваша БД настолько мала, что разница столь минимальна. При реальных нагрузках всё должно изменится не в пользу КОММИТА каждого INSERT'а.
...
Рейтинг: 0 / 0
04.07.2007, 13:07
    #34637665
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Все верно. PostgreSQL после каждого коммита НЕ СБРАСЫВАЕТ данные на диск, а держит их в буфере. Вот в версии 7.4 массовый коммит был действительно необходим, а в старших версиях СУБД умнее.
...
Рейтинг: 0 / 0
04.07.2007, 13:15
    #34637707
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
MBGВсе верно. PostgreSQL после каждого коммита НЕ СБРАСЫВАЕТ данные на диск, а держит их в буфере. Вот в версии 7.4 массовый коммит был действительно необходим, а в старших версиях СУБД умнее.

Не факт. За сброс WAL буффера на диск отвечает параметр commit_delay, который может быть равен 0 и сброс будет происходить моментально после COMMIT'а. Большое значение грозит бОльшей потерей данных в случае падения БД.
...
Рейтинг: 0 / 0
04.07.2007, 13:50
    #34637897
_Андрей_М
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
В таблице, в которую идёт инсерт - 5 млн записей
В Zeos'е стоит AutoCommit := False. То, что коммит через 1000 работает - видно по базе (кол-во записей в процессе работы кратно 1000). А вот commit_delay равно 0.
Но, судя по http://www.phpclub.ru/detail/store/pdf/postgresql-performance.pdf
это используется для оптимизации нескольких мелких транзакций. Неужели явные begin-commit не указ?
Сейчас попробую покрутить.
...
Рейтинг: 0 / 0
04.07.2007, 14:11
    #34638007
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
_Андрей_МВ таблице, в которую идёт инсерт - 5 млн записей
В Zeos'е стоит AutoCommit := False. То, что коммит через 1000 работает - видно по базе (кол-во записей в процессе работы кратно 1000). А вот commit_delay равно 0.
Но, судя по http://www.phpclub.ru/detail/store/pdf/postgresql-performance.pdf
это используется для оптимизации нескольких мелких транзакций. Неужели явные begin-commit не указ?
Сейчас попробую покрутить.

Крутить стОит если у вас OLTP с большим кол-вом соединений.
commit - это не указ сбрасывать на диск.
5 Млн записей это не показатель в данном случае.

Я просто хочу сказать, чтобы вы не делали коммит после каждой вставленной строки. Лучше коммитить по 1000.
...
Рейтинг: 0 / 0
04.07.2007, 14:37
    #34638133
_Андрей_М
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Установка commit_delay = 1000 удовлетворения не принесла. Как и увеличение wal_buffers с 256к до 512к. Винчестер, собственно, не напрягается, даже если коммит каждой записи делать. Тут дело в чём-то другом. Или в самом деле Pg всё оптимизирует до безобразия, и быстрее уже не получится.
...
Рейтинг: 0 / 0
04.07.2007, 15:43
    #34638473
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
_Андрей_МУстановка commit_delay = 1000 удовлетворения не принесла. Как и увеличение wal_buffers с 256к до 512к. Винчестер, собственно, не напрягается, даже если коммит каждой записи делать. Тут дело в чём-то другом. Или в самом деле Pg всё оптимизирует до безобразия, и быстрее уже не получится.

А зачем вы стали увеличивать этот параметр? В вашем примере вы добъетесь того, что конструкция с КОММИТами по одной записи будет приближаться по времени к КОММИТу 1000 ИНСЕРТов (опять же повторюсь, в реальном environtment'е!).
1000 строк это ... ну 500 - 900 Кб (отбросим часные случаи с blobами) + индексы и пр. системная информация. То есть допустим набегает что-то около 1.0 - 1.5 Мб. Что это есть для современного железа без конкурентных сессий...?

Кстати, создайте на сервере ощутимую загрузку CPU + I/O и тогда сравните разницу.
...
Рейтинг: 0 / 0
04.07.2007, 20:26
    #34639352
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
MBGВсе верно. PostgreSQL после каждого коммита НЕ СБРАСЫВАЕТ данные на диск, а держит их в буфере.
Даааа? А после случайного нажатия кнопки Reset он данные откуда достаёт --- из буфера?
...
Рейтинг: 0 / 0
04.07.2007, 20:31
    #34639363
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Thamerlan
Не факт. За сброс WAL буффера на диск отвечает параметр commit_delay, который может быть равен 0 и сброс будет происходить моментально после COMMIT'а. Большое значение грозит бОльшей потерей данных в случае падения БД.
А commit_delay вощемта работает в паре с commit_siblings. Если параллельно не будут работать несколько (commit_siblings) процессов, то никакой задержки не будет. У автора исходного сообщения процесс всего один, следовательно...
...
Рейтинг: 0 / 0
04.07.2007, 21:48
    #34639435
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Про сброс WAL буфера слышали, а вот куда он сбрасывается - не понимаете. А сбрасывается он в журнал транзакций. И только после заполнения сегментов журнала или по прошествии определенного времени данные в файл таблицы попадают. Так что коммит транзакции вовсе не приводит к какой-то лихорадочной деятельности по записи на диск, все идет строго по плану. Между прочим, один сегмент это 16 мегабайт и при настройках по умолчанию может быть до 7 сегментов (2*checkpoint_segments+1). Перемножили? С вашим объемом данных можно не беспокоиться.
...
Рейтинг: 0 / 0
05.07.2007, 12:00
    #34640458
Sad Spirit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
MBG , чё-то какое-то малопонятное словоблудие наблюдается, сначала MBGPostgreSQL после каждого коммита НЕ СБРАСЫВАЕТ данные на диск, а держит их в буфере.а потом уже
MBGПро сброс WAL буфера слышали, а вот куда он сбрасывается - не понимаете. А сбрасывается он в журнал транзакций.Так сбрасываются данные на диск при коммите или не сбрасываются? Или у вас таки журнал транзакций на RAM-диске находится, для повышения такскть надёжности и отказоустойчивости?

Но вообще, кнэшна, интересно бы найти ответ и на исходный вопрос. Может дело в том, что данные на диск попросту не сбрасываются, а зависают где-то в буфере диска? Или связка Delphi -> Zeos -> PG 8.2.3 даёт такие чудовищные накладные расходы, что разницы между commit'ом по одной записи или по 1000 записей нету?

Для исключения первого варианта есть волшебная кнопка Reset, для исключения второго можно попытаться запустить запросы напрямую, через консоль.
...
Рейтинг: 0 / 0
05.07.2007, 12:53
    #34640687
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
Sad Spirit MBG , чё-то какое-то малопонятное словоблудие наблюдается

RTFM
...
Рейтинг: 0 / 0
05.07.2007, 12:58
    #34640708
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как транзакции влияют на производительность?
MBG Sad Spirit MBG , чё-то какое-то малопонятное словоблудие наблюдается

RTFM"говорил ломайа руки краснобай ибало-мут"(с)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как транзакции влияют на производительность? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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