epgsql poolboy

254 views
Skip to first unread message

pfi79

unread,
Sep 6, 2013, 11:19:58 AM9/6/13
to erlang-...@googlegroups.com
Подскажите, где я косячу.

Использую epgsql от wg, pollboy от devinus, pool_worker - написал по примеру epgsql_pool от devinus.
При select'ах к базе заметил, что накапливается и не освобождается память в pool_worker
Что не так и как лечить?

Sergey Prokhorov

unread,
Sep 7, 2013, 10:37:43 AM9/7/13
to erlang-...@googlegroups.com
Я, например, pool worker не использую а передаю в poolboy непосредственно коннект к БД - работает прекрасно. См https://groups.google.com/d/msg/erlang-russian/DXv5yCwvRz0/H1ViTQH0e_QJ

пятница, 6 сентября 2013 г., 19:19:58 UTC+4 пользователь pfi79 написал:

fred partanskii

unread,
Sep 7, 2013, 10:47:22 AM9/7/13
to erlang-...@googlegroups.com

Пробовал твой вариант, память копится в pgsql_sock

07.09.2013 18:37 пользователь "Sergey Prokhorov" <seri...@gmail.com> написал:
--
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу erlang-...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.

Sergey Prokhorov

unread,
Sep 7, 2013, 7:15:52 PM9/7/13
to erlang-...@googlegroups.com
А можно примеры запросов и код который это вызывает?

суббота, 7 сентября 2013 г., 18:47:22 UTC+4 пользователь pfi79 написал:

Michael Uvarov

unread,
Sep 8, 2013, 1:49:35 AM9/8/13
to erlang-...@googlegroups.com
Могут ли это быть проблемы с binary и редкой сборкой мусора?

pfi79

unread,
Sep 8, 2013, 10:30:08 AM9/8/13
to erlang-...@googlegroups.com
select_exec(Type, Sql, Args)->
    Res = equery(pool, Sql, Args),
    case Res of
        {ok, Cols, Rows} ->
            decode_result(Type, Cols,Rows);
        {error, Reason} ->
            {error, Reason}
    end.

equery(PoolName, Stmt, Params) ->
    poolboy:transaction(PoolName, fun(Worker) ->
        pool_worker:equery(Worker, Stmt, Params)
    end).

decode_result(What, Cols,Rows) ->
    lists:map(fun(X) -> decode_res(What,X,Cols) end, Rows).

decode_res(type1, Row, Cols)->
    #rec{
      first               = get_fild(<<"fild1">>,Cols,Row)
    , second          = get_fild(<<"fild2">>,Cols,Row)
    }.

воскресенье, 8 сентября 2013 г., 3:15:52 UTC+4 пользователь Sergey Prokhorov написал:

pfi79

unread,
Sep 8, 2013, 10:34:30 AM9/8/13
to erlang-...@googlegroups.com
Скорее всего да. В результате одно поле int, остальные либо binary, либо null.
По списку строк формирую список record'ов, подвергаю анализу и обработке, формирую результат и отпарвляюклиенту по TCP.
Но как это лечить не знаю, не хватает навыков и опыта.

воскресенье, 8 сентября 2013 г., 9:49:35 UTC+4 пользователь Michael Uvarov написал:

Michael Uvarov

unread,
Sep 8, 2013, 10:43:56 AM9/8/13
to erlang-...@googlegroups.com
Тут хорошо описана эта проблема:
http://dieswaytoofast.blogspot.ru/2012/12/erlang-binaries-and-garbage-collection.html

pfi79

unread,
Sep 9, 2013, 4:30:44 AM9/9/13
to erlang-...@googlegroups.com
Да оно, огромное спасибо!

воскресенье, 8 сентября 2013 г., 18:43:56 UTC+4 пользователь Michael Uvarov написал:
Reply all
Reply to author
Forward
0 new messages