Oracle Соединения с базой данных всегда пропускают кеш DRCP - PullRequest
2 голосов
/ 22 января 2020

Я настроил Oracle для использования DRCP и настройки PHP для подключения к соединению в пуле, но когда я проверяю статистику соединения, всегда есть ноль хитов, в то время как количество запросов и количество пропусков продолжает расти.

CCLASS_NAME             NUM_REQUESTS NUM_HITS NUM_MISSES NUM_WAITS  WAIT_TIME CLIENT_REQ_TIMEOUTS   
BIGTUNACAN.drcp_pooling_test    9828        0       9828         6     0     0

Мое соединение в tnsnames.ora использует SERVER = POOLED, а у моего php .ini установлен drcp_pooling_test.

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

TNS запись ниже

TESTPOOL.WORLD =

   (DESCRIPTION =

     (ADDRESS_LIST =

       (ADDRESS = (PROTOCOL = TCP)(HOST = test-db.bigtunacan.com)(PORT = 1521))

     )

     (CONNECT_DATA =

       (SID = TEST)

       (SERVER = POOLED)

     )

)

1 Ответ

2 голосов
/ 27 января 2020

Проблема заключается не в использовании SID (хотя вы все равно должны это изменить, поскольку вы потенциально можете потерять часть встроенной функциональности), а в том, что вы используете oci_connect(). Вместо этого используйте oci_pconnect(). Это предположение, поскольку вы пропустили указание контрольного примера.

NUM_HITS - это «Общее количество запросов клиентов, совпадающих с пулами серверов и сессий в пуле», но oci_connect() должен воссоздать сеанс, поэтому он не даст «хит». См. Таблицу 11 на стр. 261 The Underground PHP и Oracle Manual , в которой говорится, что oci_connect() «Получает объединенный в пул сервер из пула DRCP и создает новый сеанс». Вы получите некоторые преимущества от повторного использования сервера в составе пула, но не все преимущества, которые может дать oci_pconnect().

Однако вы должны сделать шаг назад и действительно пересмотреть, зачем вам DRCP. Если вы еще не используете oci_pconnect(), то ваши PHP вызовы соединения будут медленными. Перейдите на использование oci_pconnect(). После этого вы сможете уменьшить количество необходимых Apache процессов, что уменьшит количество одновременных подключений. Реализуйте другие лучшие практики, такие как использование переменных связывания. Только если у вашего хоста базы данных недостаточно памяти для одновременной обработки всех открытых соединений, вы можете перейти к использованию общих серверов или DRCP. DRCP - это решение для пула, поэтому есть некоторые накладные расходы (и небольшое количество дополнительного администрирования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...