За последние 24 часа нас посетили 20439 программистов и 1304 робота. Сейчас ищет 621 программист ...

PHP + PgSQL, вопрос про организацию работы веб-приложений

Тема в разделе "PostgreSQL", создана пользователем Afterrburner, 12 июн 2023.

  1. Afterrburner

    Afterrburner Новичок

    С нами с:
    12 июн 2023
    Сообщения:
    2
    Симпатии:
    0
    Всем привет,
    В нашей компании порядка 2000 пользователей, одновременно работать могут около 200.
    Корпоративные веб-приложения работают с БД через Zend, соединение с PgSQL устанавливается при каждом вызове скрипта PHP, под одной и той же учётной записью PgSQL. Постоянное соединение с PostgreSQL не используется.
    Так же активно используется AJAX, таким образом, одновременно может "висеть" до 200 активных сессий в БД.
    Всё вроде бы нормально, но есть какие-то необъяснимые пока "лаги" в виде 5 сек, которые возникают в PHP при обращении к БД. Профилировщик PHP показывает на Zend. В целом, каждый 20-й запрос затыкается на 5 сек, при этом на самой БД такой задержки при выполнении запросов не наблюдается. То ли долго летит, то ли долго прилетает обратно. Но вопрос не в этом...

    Возможности использовать постоянные соединения с БД нет, т.к. PHP не позволяет "пробросить" хост клиента на БД. Или я не понимаю, как это можно сделать. Если просто включить постоянные соединения - все клиенты начинают ломиться в один порт, и PgSQL "падает" в блокировки.

    Zend работает через PDO, соответственно работа с БД идёт через драйвер PHP_PDO для PgSQL.
    При этом, согласно документации, Zend при инициализации соединения не создаёт коннект, а только подготавливает:
    Creating an instance of an Adapter class does not immediately connect to the RDBMS server. The Adapter saves the connection parameters, and makes the actual connection on demand, the first time you need to execute a query.
    Чисто теоретически, можно было бы подумать над тем, чтобы установить соединение с БД один раз, сохранить его в сессии PHP, например, и использовать без повторной инициализации, но есть ли в этом смысл? То есть вопрос такой:

    Можно ли каким-то образом "держать" коннекты для каждого пользователя веб персонально?

    UPD
    "Лаги" вылечили, они были по вине неверной настройки DNS. Но суть вопроса не изменилась... интересуют ваши практики организации соединений PHP с БД
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    866
    Симпатии:
    134
  3. Afterrburner

    Afterrburner Новичок

    С нами с:
    12 июн 2023
    Сообщения:
    2
    Симпатии:
    0
    Постоянные соединения не спасут, т.к. все подключения к БД со стороны СУБД будут выглядеть как один хост, и все клиенты ломанутся в одно подключение, БД в итоге очень быстро упадёт. Проверено ))
     
  4. gregbowers

    gregbowers Новичок

    С нами с:
    22 янв 2024
    Сообщения:
    4
    Симпатии:
    0
    Hello
    Check below

    1. Connection Caching:
      • Implement a short-lived connection caching mechanism to reduce connection overhead.
    2. Database Connection Pooling:
      • Explore connection pooling solutions to manage and reuse database connections efficiently.
    3. Connection Management:
      • Optimize connection management in PHP scripts, promptly closing connections after use.
    4. Profiling and Monitoring:
      • Use profiling tools to identify delays and monitor database server loads during lag periods.
    5. Query Optimization:
      • Ensure optimized queries and proper indexing to improve database performance.
    6. Load Balancing:
      • Consider load balancing across multiple database servers for better scalability.