(3842) 44-24-00 (3842) 44-24-01 (3842) 44-24-07 kokc@kemkad.ru Переходите в наши соцсети              

ООО «Политерм». Таймаут - максимальное время выполнения SQL запроса

Запросы SQL (язык структурированных запросов) нашли широкое применение среди пользователей геоинформационной системы ZuluGIS. Их преимущества перед простыми запросами к базам данных очевидны. Во-первых, они выполняются не к определенной базе данных, а сразу ко всем слоям и подключенным к ним базам данных и, во-вторых, диалект запросов дополнен в соответствии с OGC расширением языка SQL, что позволяет выполнять их не только текстовыми и числовыми данными, но и пространственными объектами на карте. Сам язык запросов не так прост, тем более, когда приходится работать с пространственными наборами данных, которые содержат сотни тысяч объектов и записей. Когда вы работаете со слоями среднего и большого размера, написание наиболее эффективных запросов SQL является приоритетом. Не всегда удается сформировать эффективную конструкцию запроса к базе данных, тем более с первого раза. Неэффективно написанные запросы могут выполняться минутами, а в некоторых случаях часами, и чтобы прекратить их выполнение, необходимо останавливать работу программы. Запросы к слоям опубликованным на ZuluServer, при закрытии программы продолжают выполняться, тем самым занимают имеющиеся подключения к серверу. Сравнение эффективности 2 запросов На изображениях приведены примеры запросов, которые решают одну и ту же задачу к слою, с общим количеством объектов в карте 12978. С применением запросов SQL в базу данных потребителей заносится ID камеры, к которой он подключен, но второй выполняется в 100 раз быстрее. Причина долгого выполнения первого запроса кроется в том, операторы geometry плохо оптимизированы. Они удобны, но двойное сравнение геометрии объектов в рамках одного запроса лучше заменить простым оператором JOIN. Начиная с версии ZuluGIS 8.0.0.7754 (дата релиза — 24.03.2021), введён таймаут (максимальное время) выполнения SQL запроса, значение таймаута по умолчанию — 60 сек. Это позволяет избежать зависаний при выполнении "продолжительных" запросов. По истечении времени таймаута выдаётся соответствующая ошибка. Если запрос на обновление данных по объектам должен выполняться 100 секунд, а таймаут 60 секунд — данные не обновятся и отобразится сообщение о превышении таймаута. Таймаутом можно управлять прямо в теле запроса, указав максимальное время в секундах, например: SET TIMEOUT ; SELECT ; Чтобы задать "бесконечный" таймаут используйте аргумент INFINITE: SET TIMEOUT INFINITE; SELECT ; Online Справка Компания «Политерм» входит в группу «Проект поддерживают» портала ГИС-Ассоциации.

<< Вернуться на предыдущую страницу