УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Postgresql


Автор Сообщение
Сообщение создано: 11. 02. 2014 [07:14]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Из-за большого количества (примерно 500 и >>) мелких и одновременных запросов к БД падает соединение
OpenSCADA просто перестает (по понятным причинам) слать SQL запросы.

Вопросы:
1) после такого обрыва, OpenSCADA подымает связь с БД? (у меня соединение с БД появилось после ручного выкл и вкл в узле "Postgresql.Базы данных")
2) архив сообщений копит пачку сообщений и потом ее отсылает в БД? или отправляет их по одиночки?
3) есть ли в OpenSCADA какая ни будь возможность формирования пачки запросов, для отправления ее одним запросом в БД?

Хочется найти элегантное решение моей проблем (куча мелких и практически одновременных запросов к БД, из-за которых происходит падение).
Как вариант придумал обходиться рандомом временной задержки SQL запросов, но это не очень красиво :) и выглядит как костыль :)

Сообщение создано: 11. 02. 2014 [08:36]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
заметил такую штуку
если связь с Postgresql падает
то OpenSCADA ни как не реагирует(не выдает ошибку соединения), она мне выдала ее только при заходе в узел "Postgresql.Базы данных"

и еще, стоило мне отключить архиватор сообщений, как все запахало как нужно, с чем это связанно не знаю.
проверял несколько раз, при запуске архиватора все падало и не работало, как только его убираю все пашет



[Сообщение редактировалось 1 раз(а), в последний раз 11.02.2014 в 11:18.]
Вложенный файл

Снимок экрана - 11.02.2014 - 13:14:06.png (Тип файла: image/png, Размер: 364.08 килобайт) — 1882 загрузок
Снимок экрана - 11.02.2014 - 13:15:55.png (Тип файла: image/png, Размер: 291.13 килобайт) — 1858 загрузок
Сообщение создано: 11. 02. 2014 [11:42]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Из-за большого количества (примерно 500 и >>) мелких и одновременных запросов к БД падает соединение
OpenSCADA просто перестает (по понятным причинам) слать SQL запросы.

Одновременными к одной БД они не могут быть в принципе.

"monia" wrote:

1) после такого обрыва, OpenSCADA подымает связь с БД? (у меня соединение с БД появилось после ручного выкл и вкл в узле "Postgresql.Базы данных")

Если "PQstatus(connection) != CONNECTION_OK" то переподключается иначе нужно смотреть ошибку в данном случае.

"monia" wrote:

2) архив сообщений копит пачку сообщений и потом ее отсылает в БД? или отправляет их по одиночки?

Очередной раз повторяю, что БД (любая) это не место для ведения больших архивов по многим причинам, одна из которых эта!
Архив сообщений хоть и копит но в случае БД шлёт отдельно. Во первых по причине того, что унифицирующий интерфейс OpenSCADA над БД работает с отдельными записями (строками). Во вторых многие БД просто не позволяют отправлять несколько запросов одновременно, как то в случае с MySQL такая возможность только недавно включилась, а некоторые вообще имеют проблемы с размером даже одного запроса SQL, как то FireBird.

"monia" wrote:

3) есть ли в OpenSCADA какая ни будь возможность формирования пачки запросов, для отправления ее одним запросом в БД?

Создавайте отдельную процедуру архивирования на БД и шлите как угодно, прямыми SQL-запросами. Только по причинам выше это у Вас вряд-ли получится.

"monia" wrote:

Хочется найти элегантное решение моей проблем (куча мелких и практически одновременных запросов к БД, из-за которых происходит падение).
Как вариант придумал обходиться рандомом временной задержки SQL запросов, но это не очень красиво :) и выглядит как костыль :)

Ну да, и без того немалое время доступа к БД увеличивается ещё более.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 02. 2014 [11:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

и еще, стоило мне отключить архиватор сообщений, как все запахало как нужно, с чем это связанно не знаю.
проверял несколько раз, при запуске архиватора все падало и не работало, как только его убираю все пашет

Что значит падало? Слова подбирайте согласно ситуации.
У меня проверять не на чем сейчас, разве только в конце недели.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 02. 2014 [13:43]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
С пачками стало все ясно, спасибо за разъяснение

Оптимизировал код шаблонов, вроде полегче стало, буду тестировать :), без архиватора.

Я собираюсь немного поколдовать с настройками производительности Postgresql
может еще лучше станет

PQstatus(connection) != CONNECTION_OK

а ссылку на описание можно? или данный код взят из исходников OpenSCADA?

Сообщение создано: 11. 02. 2014 [14:54]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

PQstatus(connection) != CONNECTION_OK

а ссылку на описание можно? или данный код взят из исходников OpenSCADA?

А Вы про что спрашивали? Конечно из OpenSCADA!

Learn, learn and learn better than work, work and work.
Сообщение создано: 12. 02. 2014 [11:09]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

У меня проверять не на чем сейчас, разве только в конце недели.

Проверил: не восстанавливает подключение, что не хорошо для сетевой БД.
Добавил возможность включения БД даже в случае отсутствия соединения и попытки восстановления подключения при запросах к БД. Так-же уменьшил умолчательный таймаут подключения до 1 секунды.
В MySQL тоже добавил возможность включения БД при отсутствии соединения, хотя восстановление там было.
Позже проверю работу без подключения для FireBird и для всех сетевых БД прогоню тесты подключения и восстановления подключений.


Learn, learn and learn better than work, work and work.
Сообщение создано: 18. 02. 2014 [12:56]
monia
Олег Намятов
Создатель темы
Зарегистрирован(а) с: 21.05.2012
Сообщения: 173
Позже проверю работу без подключения для FireBird и для всех сетевых БД прогоню тесты подключения и восстановления подключений.

Можешь отписаться, когда сделаешь
Что бы обновить САКАДУ

[Сообщение редактировалось 1 раз(а), в последний раз 18.02.2014 в 13:01.]
Сообщение создано: 19. 02. 2014 [10:30]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"monia" wrote:

Позже проверю работу без подключения для FireBird и для всех сетевых БД прогоню тесты подключения и восстановления подключений.

Можешь отписаться, когда сделаешь
Что бы обновить САКАДУ

Наверное не скоро, поскольку c FireBird быстро не получилось в виду отсутствия там прямого механизма проверки состояния подключения (во всяком случае пока не нашёл) и запутанного механизма транзакций.

Но для PostgreSQL обновиться Вам ничего не мешает!

Learn, learn and learn better than work, work and work.
Сообщение создано: 24. 02. 2014 [12:10]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"roman" wrote:

"monia" wrote:

Позже проверю работу без подключения для FireBird и для всех сетевых БД прогоню тесты подключения и восстановления подключений.

Можешь отписаться, когда сделаешь
Что бы обновить САКАДУ

Наверное не скоро, поскольку c FireBird быстро не получилось в виду отсутствия там прямого механизма проверки состояния подключения (во всяком случае пока не нашёл) и запутанного механизма транзакций.

Пересмотрел концепцию восстановления подключений сетевых БД на отключение БД в случае отсутствия подключения и периодические попытки включить БД (раз в 10 секунд). Что облегчает доступ к БД в целом, исключая попытки переподключения при каждом запросе и ступор на таймаутах при этом. А также сам механизм доступа БД заметно упрощается.
Прогнал тесты на восстановление подключения и общие тесты БД в Special.SystemTests для FireBird, MySQL, PostgreSQL.

Ещё погляжу на модуль архиватора DBArch, на предмет его включение при выключенной БД и сохранение указателя обработанных данных буфера, чтобы при восстановлении связи он их перегружал и не терял на глубину буфера.

Learn, learn and learn better than work, work and work.



8991