SQL Error [53200]: ОШИБКА: нехватка разделяемой памяти Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction
При выполнении запросов на БД (Postgres) возникла ошибка:
24.02.21 13:50:38.219,main,ERROR,ExecSql,null
com.bssys.db.jdbc.DBSQLException: ОШИБКА: нехватка разделяемой памяти
Подсказка: Возможно, следует увеличить параметр max_locks_per_transaction.
Подробная информация по параметру здесь. Коротко ниже:
max_locks_per_transaction (integer)
Этот параметр управляет средним числом блокировок объектов, выделяемым для каждой транзакции; отдельные транзакции могут заблокировать и больше объектов, если все они умещаются в таблице блокировок.
Значение по умолчанию = 64
рядом также находится параметр max_pred_locks_per_transaction (integer)
В файле postgresql.conf (Postgres/data/) указано так:
#———————————————————————-
# LOCK MANAGEMENT
#———————————————————————-
#deadlock_timeout = 1s
#max_locks_per_transaction = 64 # min 10
# (change requires restart)
#max_pred_locks_per_transaction = 64 # min 10
# (change requires restart)
Изменил на это значение:
#———————————————————————-
# LOCK MANAGEMENT
#———————————————————————-
#deadlock_timeout = 1s
max_locks_per_transaction = 256 # min 10
# (change requires restart)
max_pred_locks_per_transaction = 1000 # min 10
# (change requires restart)
P.S. После изменения убрать символ «#» в начале строки
Популярные сообщения из этого блога
КБК. КВФО — Код вида финансового обеспечения (деятельности)
НПА: Приказ Минфина России от 01.12.2010 N 157н Письмо Минфина России от 18 января 2018 г. N 02-06-10/2715 В целях организации и ведения бухгалтерского учета, утверждения Рабочего плана счетов применяются следующие коды вида финансового обеспечения (деятельности): для государственных (муниципальных) учреждений, организаций, осуществляющих полномочия получателя бюджетных средств, финансовых органов соответствующих бюджетов и органов, осуществляющих их кассовое обслуживание: 1 — деятельность, осуществляемая за счет средств соответствующего бюджета бюджетной системы Российской Федерации (бюджетная деятельность); 2 — приносящая доход деятельность (собственные доходы учреждения); 3 — средства во временном распоряжении; 4 — субсидии на выполнение государственного (муниципального) задания; 5 — субсидии на иные цели; 6 — субсидии на цели осуществления капитальных вложений; 7 — средства по обязательному медицинскому страхованию; для отражения органами Федерального казн
TRUNCATE / DELETE / DROP или как очистить таблицу
ИМЕЕМ: Таблица MSG (сообщения) с большим количеством записей. SQL> CREATE TABLE msg (id INTEGER NOT NULL PRIMARY KEY, description CHAR (50) NOT NULL, date_create DATE); ЗАДАЧА: Необходимо очистить таблицу от данных РЕШЕНИЕ: Для решения данной задачи есть несколько способов. Ниже описание и пример каждого из них. Способ №1 — используем DELETE Самый простой способ (первый вариант) — выполнение оператора удаления записи. При его выполнении вы будете видеть результат (сколько записей удалено). Удобная штука когда необходимо точно знать и понимать правильные ли данные удалены. НО имеет недостатки перед другими вариантами решения поставленной задачи. SQL> DELETE FROM msg; —Удалит все строки в таблице SQL> DELETE FROM msg WHERE date_create = ‘2019.02.01’; —Удалит все строки у которых дата создания «2019.02.01» Способ №2 — используем TRUNCATE Использование оператора DML для очистки всех строк в та
Linux (РедОС). Сброс пароля
Используется ОС РедОС 7.1, которая установлена в VBox. В процессе установки ОС, был задан только пароль для «root», дополнительных пользователей не создавалось. В рекомендациях на сайте производителя ОС указано: Помимо администратора РЕД ОС (root) в систему необходимо добавить, по меньшей мере, одного обычного пользователя. Работа от имени администратора РЕД ОС считается опасной (можно по неосторожности повредить систему), поэтому повседневную работу в РЕД ОС следует выполнять от имени обычного пользователя, полномочия которого ограничены. После перезапуска и попытке войти в систему под root, система выдает сообщение «Не сработало .попробуйте еще раз». Поэтому для решения проблемы было решено создать пользователя, для этого выполняем такие действия: После загрузки, в момент выбора системы, быстро нажимаем стрелки вверх и вниз (приостанавливаем обратный отсчет). Выбираем ядро и нажимаем «e». Находим строку, которая относится к ядру: здесь будет ряд «boot parameter
ТФФ 34.0. Полный перечень документов альбома ТФФ (Таблица 2)
Для удобства и поиска информации по томам, маркерам и обозначении версии ТФФ. Таблица актуальна — версия 34.0 — (дата начала действия с 01.01.2023 г.) Ссылки на предыдущие версии форматов: ТФФ 33.0 — https://albafoxx.blogspot.com/2021/01/320-2.html ТФФ 32.0 — https://albafoxx.blogspot.com/2020/01/310-2.html ТФФ 31.0 — https://albafoxx.blogspot.com/2020/01/310-2.html ТФФ 30.0 — https://albafoxx.blogspot.com/2019/12/300-2.html ТФФ 29.0 — https://albafoxx.blogspot.com/2019/05/290-2.html ТФФ 28.0 — https://albafoxx.blogspot.com/2019/04/2.html Наименование документа (справочника) Маркер Номер версии ТФО документа № тома Казначейское уведомление SU TXSU190101 2 Расходное расписание, Реестр расходных расписаний AP TXAP190101 1 Перечень целевых субсидий TL TXTL170101 1 Уведомление (протокол), Ин
ТФФ 33.0. Полный перечень документов альбома ТФФ (Таблица 2)
Для удобства и поиска информации по томам, маркерам и обозначении версии ТФФ. Таблица НЕ актуальна — версия 33.0 — (дата начала действия с 01.01.2022 г.) с 01.01.2023 г действует новая версия ТФФ — версия 34.0 Ссылки на предыдущие версии форматов: ТФФ 32.0 — https://albafoxx.blogspot.com/2020/01/310-2.html ТФФ 31.0 — https://albafoxx.blogspot.com/2020/01/310-2.html ТФФ 30.0 — https://albafoxx.blogspot.com/2019/12/300-2.html ТФФ 29.0 — https://albafoxx.blogspot.com/2019/05/290-2.html ТФФ 28.0 — https://albafoxx.blogspot.com/2019/04/2.html Наименование документа (справочника) Маркер Номер версии ТФО документа № тома Казначейское уведомление SU TXSU190101 2 Уведомление (протокол), Информация о непрошедших контроль документах в ППО Федерального казначейства PT TXPT170101 2 Выписка из лицевого счета главного распорядителя (распор
06.09.17 — 08:02
Добрый день,прошу помощи в решении проблемы
пользую 1с 8.3.9.2309 + PostgreSql 9.4.2-1.1C происходит ошибка при загрузке базы dt ,ошибка 53200 error out of memory detail failed on request of size 536870912
ОС windows server 2016 standard,аналогичная проблема и на других ос
Пробовал менять настройки конфига pg,сейчас они такие
Это из основных как я полагаю интересующих :
shared_buffers = 64MB # min 128kB
temp_buffers = 256MB # min 800kB
work_mem = 128MB # min 64kB
maintenance_work_mem = 256MB # min 1MB
effective_cache_size = 6GB
——————————————
Всего оперативной памяти 16gb
Причём конкретно только одна база не загружается (она исправна,её тестировал БП 2.0)
ещё пробовал увеличить файл подкачки на диске С
Помогите кто сталкивался с такой же проблемой?кто её решил?
1 — 06.09.17 — 08:10
разрядность PostgreSql какая?
2 — 06.09.17 — 08:12
(1) 64 разрядная как и windows server
3 — 06.09.17 — 08:21
В логе вот что пишет:
pg_authid_rolname_index: 1024 total in 1 blocks; 552 free (0 chunks); 472 used
MdSmgr: 8192 total in 1 blocks; 6544 free (0 chunks); 1648 used
LOCALLOCK hash: 8192 total in 1 blocks; 2880 free (0 chunks); 5312 used
Timezones: 79320 total in 2 blocks; 5968 free (0 chunks); 73352 used
ErrorContext: 8192 total in 1 blocks; 8176 free (0 chunks); 16 used
2017-09-04 18:55:43 MSK ERROR: out of memory
2017-09-04 18:55:43 MSK DETAIL: Failed on request of size 536870912.
2017-09-04 18:55:43 MSK CONTEXT: COPY config, line 328, column binarydata
2017-09-04 18:55:43 MSK STATEMENT: COPY Config FROM STDIN BINARY
4 — 06.09.17 — 08:21
попробуй в work_mem указать немного больше чем от тебя просят
5 — 06.09.17 — 08:22
ставил 256 и 512
6 — 06.09.17 — 08:22
и да, этот ДТ куда-то вообще загружается? Он точно не битый?
7 — 06.09.17 — 08:23
(5) переведи «on request of size 536870912»
8 — 06.09.17 — 08:25
(6) Да как файловая база он загружается
9 — 06.09.17 — 08:27
(6) и точно не битый делал тестирование и исправление и chdbfl,без ошибок
10 — 06.09.17 — 08:30
(7)размер по запросу 536870912,полагаю что не хватает памяти загрузить какую то таблицу
11 — 06.09.17 — 08:31
а где её увеличить!?или может какой то другой параметр нужно увеличить
12 — 06.09.17 — 08:34
(11) 536 больше 512?
13 — 06.09.17 — 08:36
(12) я понял к чему ты,я пробовал и 1024 ставить
14 — 06.09.17 — 08:36
(12) но вот только не везде
15 — 06.09.17 — 08:39
Попробую work_mem выставить > 536 ,но смогу попробовать вечером
16 — 06.09.17 — 08:52
(15) сделай сразу побольше чтобы наверняка
17 — 06.09.17 — 09:07
(16) да 1024 поставлю,отпишусь по результату
18 — 06.09.17 — 09:20
и temp_buffers тоже.
19 — 06.09.17 — 09:30
shared_buffers рекомендуется делать побольше. 1/4 — 1/3 RAM.
maintenance_work_mem в 1/2 RAM или больше (до RAM-shared_buffers)
20 — 06.09.17 — 09:40
(19) если не ошибаюсь то пробовал я ставить и больше 1 gb в
shared_buffers или temp_buffers служба pg перестаёт запускаться
21 — 06.09.17 — 11:01
(16) Попробывал,выставить 1024 work_mem,shared_buffers,temp_buffers ошибка всё равно выходит
22 — 06.09.17 — 11:04
Увидел вот какой момент,в свойствах Pg есть строка версии где написано PostgreSQL 9.4.2,complited by Visual C++ build 1500, 32-bit
23 — 06.09.17 — 11:06
мне эта строка не нравится,типа используются компоненты Visual C++ 32 бита,посмотрел на давно созданном сервере тоже на pg там 64 стоит м.б дело в этом!?
24 — 06.09.17 — 11:26
Похоже что да,вроде как ура..грузит ,но ошибку не выкидывает
25 — 06.09.17 — 11:36
победа,парни дико извиняюсь,3 дня не в ту сторону смотрел,не тот дистрибутив поставил поставил общий,а надо было postgresql-9.4.2-1.1C_x64
26 — 06.09.17 — 11:49
(25) Теперь научился отличать приложения х64 от х86?
27 — 06.09.17 — 11:55
(12) они равны
Johan
28 — 06.09.17 — 12:35
(26) Да,я поставил не посмотрев,а в описании в pg и сервис написано 64 Bit,а вот когда увидел строку версии ,тогда меня смутило
I have a query that inserts a given number of test records.
It looks something like this:
CREATE OR REPLACE FUNCTION _miscRandomizer(vNumberOfRecords int)
RETURNS void AS $$
declare
-- declare all the variables that will be used
begin
select into vTotalRecords count(*) from tbluser;
vIndexMain := vTotalRecords;
loop
exit when vIndexMain >= vNumberOfRecords + vTotalRecords;
-- set some other variables that will be used for the insert
-- insert record with these variables in tblUser
-- insert records in some other tables
-- run another function that calculates and saves some stats regarding inserted records
vIndexMain := vIndexMain + 1;
end loop;
return;
end
$$ LANGUAGE plpgsql;
When I run this query for 300 records it throws the following error:
********** Error **********
ERROR: out of shared memory
SQL state: 53200
Hint: You might need to increase max_locks_per_transaction.
Context: SQL statement "create temp table _counts(...)"
PL/pgSQL function prcStatsUpdate(integer) line 25 at SQL statement
SQL statement "SELECT prcStatsUpdate(vUserId)"
PL/pgSQL function _miscrandomizer(integer) line 164 at PERFORM
The function prcStatsUpdate looks like this:
CREATE OR REPLACE FUNCTION prcStatsUpdate(vUserId int)
RETURNS void AS
$$
declare
vRequireCount boolean;
vRecordsExist boolean;
begin
-- determine if this stats calculation needs to be performed
select into vRequireCount
case when count(*) > 0 then true else false end
from tblSomeTable q
where [x = y]
and [x = y];
-- if above is true, determine if stats were previously calculated
select into vRecordsExist
case when count(*) > 0 then true else false end
from tblSomeOtherTable c
inner join tblSomeTable q
on q.Id = c.Id
where [x = y]
and [x = y]
and [x = y]
and vRequireCount = true;
-- calculate counts and store them in temp table
create temp table _counts(...);
insert into _counts(x, y, z)
select uqa.x, uqa.y, count(*) as aCount
from tblSomeOtherTable uqa
inner join tblSomeTable q
on uqa.Id = q.Id
where uqa.Id = vUserId
and qId = [SomeOtherVariable]
and [x = y]
and vRequireCount = true
group by uqa.x, uqa.y;
-- if stats records exist, update them; else - insert new
update tblSomeOtherTable
set aCount = c.aCount
from _counts c
where c.Id = tblSomeOtherTable.Id
and c.OtherId = tblSomeOtherTable.OtherId
and vRecordsExist = true
and vRequireCount = true;
insert into tblSomeOtherTable(x, y, z)
select x, y, z
from _counts
where vRecordsExist = false
and vRequireCount = true;
drop table _counts;
end;
$$ LANGUAGE plpgsql;
It looks like the error is a result of a memory building up somewhere but since I create temp table, use it and drop right away (thus to my understanding releasing memory), I don’t see how that would be possible.
Update
I updated prcStatsUpdate function to represent the actual function that I have. I just replaced table and column names to be something generic.
The reason I didn’t post this first time is that it’s mostly very simple sql operations and I assumed there could not be any issues with it.
Also, where do you start line counting from? It says error is on line 25, but that just can’t be true since line 25 is a condition in the where clause if you start counting from the beginning. Do you start counting from begin?
Any ideas?
Доброго дня.
Сегодня получил такую ошибку в логах. До этого сервер крутился без рестарта где-то месяца три, база не то чтобы очень большая, но в некоторых таблицах сотни тысяч строк. Увеличил этот самый «max_locks_per_transaction», поднял «shared_buffers» и «work_mem», перезапустил postgres, проблема исчезла. Но навсегда ли?
Было:
shared_buffers = 128MB # min 128kB
work_mem = 4MB # min 64kB
temp_buffers = 8MB # min 800kB
max_locks_per_transaction = 64 # min 10
Стало:
shared_buffers = 256MB # min 128kB
work_mem = 16MB # min 64kB
temp_buffers = 32MB # min 800kB
max_locks_per_transaction = 1024 # min 10
Выполнение запроса к pg_locks вменяемой информации не дало (или я просто не умею читать между строк).
Собственно, вопрос следующий: куда копать, возможно, настроить доп. логирование? Я хочу точно понять, почему это появилось, дабы предотвратить дальнейшие рецидивы. Может, у меня кривые запросы, которые продуцируют дедлоки? Или просто увеличение объема бд требует увеличение объема выделенной памяти? Еще что-то?
Заранее спасибо.
I am getting numerous of the following error message when testing a patch on Postgres:
PDOException: SQLSTATE[53200]: Out of memory: 7 ERROR: out of shared memory HINT: You might need to increase max_locks_per_transaction
I can’t see any way that the patch could cause these.
Example: https://www.drupal.org/pift-ci-job/1112291
Comments
- Log in or register to post comments

I suggest increasing max_locks_per_transaction to see if that fixes it. It may be that more locks are needed with this patch because it adds foreign keys. The patch used to pass Postgres testing, but then stopped.
- Log in or register to post comments

- Log in or register to post comments

Is there anything I can do to help advance this?
- Log in or register to post comments

| Project: | DrupalCI: Test Runner | » DrupalCI: Environments |
| Component: | Jobs and Job Handling | » PHP Containers |
There is a new postgres 9.5 container — I just queued up a test on the posted issue to see if the problem is still there.
If it is, we can look at the postgres config for the containers, which is in the drupalci_environments repository.
Im moving this there now.
- Log in or register to post comments

Thanks very much. The patch passes with Postgres 9.5. Is compatibility with Postgres 9.1 still required for a patch to be accepted into core? The answer to that will determine whether Postgres 9.1 testing needs to be fixed.
- Log in or register to post comments

- Log in or register to post comments
-
Уважаемые, у меня возникла следующая проблема: при попытке произвести обмен данными, как мы уже неоднократно это делали, вдруг возникла ошибка следующего содержания
Ошибка СУБД
Error: Out of shared memory
Hint: You may need increase max_lock_per_transaction.Пробовал переписать настройки в postgre.conf
shared_buffers = 48MB (по умолчанию 27)
max_lock_per_transaction = 250( по умолчанию 150)
max_connections я уменьшил со 100 до 50
Результат остался тот же, да и на одном из форумов PostgreSQL прочитал что так можно разрушить базу, поэтому эксперименты свои решил прекратить, может кто-нибудь сталкивался с подобной проблемой, подскажите, что делать, я ума не приложу!!!
1C 8.1.11.64
PostgreSQL 8.2.4-3.1C -
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Где-то я слышал, что такое может быть, когда слишком много таблиц одновременно задействовано…
Обмен какой идет? Попробуйте обмениваться более мелкими порциями данных.
-
более мелкими порциями обмениваться не получиться, что касается обмена, то я не в курсе, бухгалтерия говорит это автообмен, который вроде как должен производиться раз в сутки, но пока мы производим его максимум пару раз в неделю, при чем выявляется последовательность, что ошибка возникла сразу после обновления 1С платформы до версии 1.11.64, до этого все работало долго, но работало. у нас в штате нет 1С программиста, а я в этом деле не особо силен…..какие есть мысли?
-
Offline
BabySG
Администраторы
Команда форума
Администратор- Регистрация:
- 10 июн 2007
- Сообщения:
- 11.853
- Симпатии:
- 18
- Баллы:
- 29
Последняя версия 11.67 — стоит обновиться

Давайте поподробнее, как делается обмен и какие правила настроены.
А то испорченный телефон получается. -
Offline
Kadra
- Регистрация:
- 17 фев 2009
- Сообщения:
- 1
- Симпатии:
- 0
- Баллы:
- 1
Аналогичная проблема.
Postgres 8.3.3-2.1C
1С 8.1.13.41
УПП 1.2.20.1Распределенная информационная база. Размер базы примерно 3Gb. Полный обмен файловый. Обычный размер выгружаемого файла 1м. В центральной базе сделали проведение по партиям за месяц. Файл выгрузки получился 11м. При загрузке в удаленную базу выдало ошибку.
Ошибка СУБД
Error: Out of shared memory
Hint: You may need increase max_lock_per_transaction.
На удаленной машине установлен пень 4-2гигагерца 2 гигабайта памяти.
В настройках постгри
effective_cache_size = 1512MB
остальное по дефолту.Буквально 2 недели назад делал обновление конфигурации центральной базы. Файл выгрузки был 40 метров примерно. Обмены прошли нормально. А тут вот такая заковырка.