Настройки в postgresql.conf
Для облегчения загрузки больших объемов данных в базу данных PostgreSQL, вам может понадобиться увеличить значения shared_buffers и max_locks_per_transaction в файле postgresql.conf.
shared_buffers
Параметр shared_buffers задает объем памяти, используемой для буферов разделяемой памяти. В документации PostgreSQL указано, что по причинам производительности вам возможно потребуется использовать большее значение параметра, чем минимальное значение в 128 КБ, либо значение в 16 KБ умноженное на число, установленное для параметра max_connections. Рекомендуется, чтобы shared_buffers был установлен на использование нескольких десятков мегабайт для боевого экземпляра.
При загрузке больших объемов данных, вы часто нуждаетесь в более высоком значении shared_buffers, чем значение установленное по умолчанию в 32 МБ. После изменения этого параметра в файле postgresql.conf, вам необходимо перезапустить кластер базы данных.
max_locks_per_transaction
Значение max_locks_per_transaction указывает число объектов базы данных, которые могут быть заблокированы одновременно. В большинстве случаев, значения по умолчанию 64 бывает достаточно. Тем не менее, при загрузке большого количества данных (например, несколько тысяч) сразу, число одновременных заблокированных для транзакции объектов может превысить 64.
Это не взаимосвязь один-к-одному между конкурентными блокировками и количеством наборов данных; другими словами, если вы загружаете 3000 наборов данных, вам не нужно увеличивать max_locks_per_transaction до 3000. Вначале раскомментируйте параметр max_locks_per_transaction и увеличьте его значение до 100 перед загрузкой в пакетном режиме.
При изменении параметра max_locks_per_transaction, вы должны перезагрузить сервер.
Увеличение значения любого из данных параметров может привести к запросу базой данных большего объема разделяемой памяти, чем допускает операционная система. Сведения о том, как можно увеличить разделяемую память в вашей операционной системе, находятся в разделе Управление ресурсами ядра в Документации PostgreSQL.
cursor_tuple_fraction
Значение cursor_tuple_fraction используется планировщиком PostgreSQL для оценки необходимого набора строк, возвращаемого запросом. По умолчанию, в файле postgresql.conf cursor_tuple_fraction имеет значение 0.1, это означает, что первые 10 процентов строк (или объектов) результата возвращаются быстро, для возвращения остальных строк требуется время.
Если вы хотите изменить процент результата, который отображается планировщиком PostgreSQL при подключении к не-ArcGIS приложениям, измените значение параметра cursor_tuple_fraction в файле postgresql.conf.
Когда для запросов данных применяется ArcGIS 10.2 или более поздней версии, всегда используется значение 1.0, это означает, что данные не отображаются до возвращения 100 процентов результатов. Измененное значение cursor_tuple_fraction в файле postgresql.conf не применяется при доступе к базе данных из ArcGIS. Чтобы изменить значение, используемое ArcGIS, необходимо задать переменную среды cursor_tuple_fraction для сеанса или всей системы.
Повышение производительности сторонних пространственных SQL-запросов
При выполнении SQL-запросов вне ArcGIS, которые возвращают пространственных столбцы ST_Geometry из бизнес-таблицы, можно повысить производительность запросов, если вы установите системную переменную среды, ST_GEOMETRY_OUTPUT_FORMAT, для вывода в тип ST_Geometry, а не в расширенное стандартное текстовое представление (WKT).
По умолчанию, ST_GEOMETRY_OUTPUT_FORMAT установлен на ST_GEOMETRY, это означает, что возвращается 16-ричное представление. Это необходимо для создания работоспособной резервной копии базы геоданных. Вы можете изменить эту переменную на TYPE, если вы хотите улучшить производительность SQL-запросов. Если вы установите эту переменную, потому что вы планируете сделать ряд пространственных запросов SQL, убедитесь, что удалили ее после того, как вы завершите ваши запросы, а затем перезапустите кластер базы данных PostgreSQL.
Переменная должна быть установлена на компьютере, где запущен PostgreSQL.
Для ОС Linux, установите переменную оболочки, из которой запускаете SQL-запросы. Для оболочки bash, синтаксис выглядит следующим образом:
ST_GEOMETRY_OUTPUT_FORMAT=TYPE
Для оболочки csh, синтаксис выглядит следующим образом:
setenv ST_GEOMETRY_OUTPUT_FORMAT TYPE
В Windows, создайте системную переменную среды в свойствах системы.
Имя переменной: ST_GEOMETRY_OUTPUT_FORMAT
Значение переменной: TYPE
После установки данной переменной, вам необходимо перезапустить кластер базы данных PostgreSQL.