Транзакций в секунду в базе данных (скажем, PostgreSQL)

1556
IamIC

Я имею в виду 2 страницы документации на сайте PostgreSQL: # 1 и # 2 . Исходя из этого, мы видим, что журнал транзакций сбрасывается на диск 5 раз в секунду (wal_writer_delay = 200ms), и мы также видим, что СУБД не будет сообщать о транзакции как успешной, пока она не будет зафиксирована в файле журнала, так как synchronous_commit = on by by дефолт.

Это дало бы нам теоретический пик в 5 успешных операций записи в секунду, если каждая выполняется в своей собственной транзакции, что часто имеет место. Причина в том, что журнал не записывается на диск быстрее, чем это.

И все же мы видим скорость в тысячах в секунду.

Как это работает?

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

0

1 ответ на вопрос

1
Craig Ringer

Commits will queue up and all flush when the WAL gets written.

So you'll get big groups of commits writing 5 times a second.

Эту часть я знаю. Но я сомневаюсь, почему он сообщает, что он "безопасно сохранен" с большей скоростью, чем когда это невозможно, насколько я вижу. IamIC 10 лет назад 0
Измерьте задержку между выдачей команды commit и ее возвратом. Это будет в среднем вдвое меньше вашей писательской задержки и будет довольно равномерно распределено. Потому что коммиты стоят в очереди. Ваша ошибка в том, что, когда просыпается писатель, может быть написана только одна запись. Это не относится к делу. Craig Ringer 10 лет назад 0
Я знаю, тысячи могут быть написаны, когда проснется писатель WAL. Если я запускаю цикл вставок, скажем, из C # или Delphi, он будет возвращаться несколько тысяч раз в секунду. Это та часть, которую я не понимаю. IamIC 10 лет назад 0
Смотрите предыдущий комментарий. Измерьте, сколько времени занимает каждый коммит. Должно быть avg wal writer delay / 2. Если не отображается ваш автономный исполняемый тестовый код, полный pg config и журналы тестового запуска. Craig Ringer 10 лет назад 0

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