arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Здравствуйте! В нашем проекте требуется отображать значения только из БД. Сейчас примерно 2000 шаблонов Баз данных и 4900 каналов (возможно будет больше). База данных находится на сервере. Работаем по сети Ethernet (TCP/IP). При работе проекта в реальном времени и генерации сигналов с периодом 1с отображение значения параметров меняется через 5-6 с (интервал не постоянен). Это очень много. Уменьшение периода и цикла CALC, изменение потоков результатов не дало. Подскажите, пожалуйста, что нужно сделать, чтобы отображались значения 1 раз в секунду.
отправлено / posted
Trace Mode 6 позиционируется как средство программной поддержки АСУ ТП. SQL-интерфейс является вспомогательным. Он использует для обмена с БД ODBC-драйвер, который имеет существенные ограничения по производительности. Поток SQL-запросов имеет пониженный приоритет. При таком объеме SQL-запросов полученные динамические характеристики, скорее всего, являются предельными. Существенным фактором является также структура и функции обработки и хранения полученной информации.
Возможно, несколько ускорить обмен позволит использование группового считывания столбцов и строк (см. документацию).
Сообщения / Posts 17361 | Из / From: Россия
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Спасибо за ответ! Структура БД, с которой мы работаем такова, что использование группового считывания столбцов не возможно. Поэтому хотели бы применить оператор UNION или TRANSACTION, но, судя по всему, SQL-интерфейс ТМ не поддерживает эти операторы. Пример запроса которые по отдельности работают, но вместе не работают:
START TRANSACTION; SELECT codapardd1f.KKS #ARG_000#, valuesadd1f.CurrentTime #ARG_001#, valuesadd1f.Status #ARG_002#, valuesadd1f.Value #ARG_003# FROM codapardd1f, valuesadd1f WHERE codapardd1f.Id = valuesadd1f.IdParameter AND codapardd1f.KKS = '0PEB10CT001' Order by CurrentTime desc limit 1; SELECT codapardd1f.KKS #ARG_004#, valuesadd1f.CurrentTime #ARG_005#, valuesadd1f.Status #ARG_005#, valuesadd1f.Value #ARG_007# FROM codapardd1f, valuesadd1f WHERE codapardd1f.Id = valuesadd1f.IdParameter AND codapardd1f.KKS = '0PEB10CT005' Order by CurrentTime desc limit 1; COMMIT; Правильно ли я понимаю, что эти операторы в ТМ не работают?
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Trace Mode 6 в штатных SQL-запросах работает только через ODBC-драйвер соответствующей БД.
Тrace Mode 6 знает ключевые слова UNION и TRANSACTION и передает их в запросе ODBC-драйверу. Как воспринимает этот запрос в соответствующем синтаксисе, можно посмотреть в трассировщике ODBC-драйвера.
Модуль связи с СУБД в Trace Mode 6 выполняет следующее: - связывает каналы с полями таблиц БД; - с учетом этого готовит/разбирает текст запросов только на уровне, необходимом для связи с аргументами; - посылает запрос в ODBC-драйвер на исполнение, принимает результат и код завершения.
Сообщения / Posts 17361 | Из / From: Россия
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
В нашем проекте нужно отслеживать примерно 2000 параметров, приходящих из БД. Мы пользуемся несколькими каналами CALL MOVE для посылки 1 во входные значения каналов CALL SQLQuery (примерно по 200 аргументов в каналах MOVE). Может быть, для улучшения быстродействия нужно использовать какой-нибудь другой способ посылки 1 в БД (например, программу). Подскажите, пожалуйста.
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
отправлено / posted
Trace Mode 6 не управляет очередью SQL-запросов. Если Вы одновременно генерируете много запросов, то очередность их реализации определяется ODBC-драйвером и его производительностью. Если ODBC-драйвер не справляется с тем потоком запросов, который Вы пытаетесь организовать, Ваши запросы будут теряться, интенсивность запросов будет уменьшаться. М.б., улучшит ситуацию ключ " SQLMANY – отмена режима выполнения только одного SQL запроса одновременно (режим по умолчанию). " в файле конфигурирования запуска узла.
Сообщения / Posts 17361 | Из / From: Россия
| IP / IP: IP адрес / IP address |
arkos
Forum Haunter / Завсегдатай форума
Участник № / Member № 6144
отправлено / posted
Вся описанная ситуация происходит при установленом ключе SQLMANY. В любом случае спасибо за ответ!
Сообщения / Posts 143 | Из / From: Украина
| IP / IP: IP адрес / IP address |
Garrison
Forum Member / Участник форума
Участник № / Member № 5981
отправлено / posted
Извиняюсь но я так и не уловил браузер sql запросов TM все же поддерживает оператор UNION или нет? Вот смотрите, выполняем простой запрос: SELECT members.temp_to #ARG_001# FROM members WHERE members.id = 1 прямо в браузере нажимаем "выполнить запрос" получаем "задать ARG_001=8" все у нас отлично значение правильное и записано в аргумент, далее строим запрос с оператором UNION
SELECT members.temp_to #ARG_000# FROM members WHERE members.id = 1
UNION
SELECT members.temp_to #ARG_001# FROM members WHERE members.id = 6
и при выполнении запроса получаем:
получить ARG_000= задать ARG_001=8 задать ARG_001=14
это что за бред? что значит получить ARG_000=? почему два раза записать задать ARG_001=8 задать ARG_001=14 ??? Значения то полученные из бд верные а вот что с запросом делает TM я чего то никак не пойму (кстати при этом в аргумент №1 реально вообще ничего не записывается)... Драйвер ODBС по моему не причем, трассировку не смотрел но два других приложения через него аналогичный запрос выполняют корректно. Любопытно что если значение WHERE делать в обоих запросах одинаковым то уже получаем: задать ARG_000=14 получить ARG_001= задать ARG_000=8 тоже бред но уже иначе выглядящий )))... В TM точно ошибок нет? а то вроде и нужно получить всего 28 значений из базы но не городить же для каждого условия where 28 разных запросов к бд! Использую релиз 6.09
Сообщения / Posts 35 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
SQL-браузер Trace Mode 6 не поддерживает оператор UNION. В запросе не может быть 2 слова SELECT.
Сообщения / Posts 17361 | Из / From: Россия
| IP / IP: IP адрес / IP address |