parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

«нечто формально правильное, а по сути издевательство» (Ленин)

Sumo 18.01.2016 21:35 / 18.01.2016 21:37

Я с трудом представляю себе задачу когда нужно открыть два одинаковых соединения в Парсеровском скрипте. Но могу представить задачу, когда мне надо объединить несколько запросов, которые, как правило, выполняются отдельно в одну транзакцию:
@addUser[...]
  ^connect[connect-string]{
     ^void:sql{insert ...}
  }

@modifyUser[...]
  ^connect[connect-string]{
     ^void:sql{update ...}
  }

@main[]
  ^connect[connect-string]{
    ^void:sql{begin}
     ^addUser[...]
     ...
     ^modifyUser[...]
     ^void:sql{commit}
  }
В этом случае не только лишние соединения плодятся, но еще и дедлоки вылезают. Причем понять причину этих дедлоков не создавая лог на уровне СУБД невозможно. Да и лишние конекты никому не нужны. Именно на это мы вчера с G_Z и напоролись.

Поэтому поддержу Лешу — кешировать вложенные соединения надо также как и последовательные.

Более того, я бы в cgi-версии сделал кеширование соединений на все время жизни скрипта. Если уж нам надо два соединения, то они явно будут к разным базам и не факт, что их можно сделать строго последовательными.