View a markdown version of this page

Gerenciamento de sessões com a API de dados do Amazon RDS - Amazon Aurora

Gerenciamento de sessões com a API de dados do Amazon RDS

A API de dados do RDS mantém um pool de conexões de banco de dados e as reutiliza entre chamadas para reduzir a sobrecarga de conexão. Antes de reutilizar uma conexão, a API de dados do RDS redefine o estado da sessão. A redefinição varia de acordo com o mecanismo de banco de dados: no PostgreSQL, a API de dados do RDS executa a instrução DISCARD ALL para limpar o estado da sessão, como tabelas temporárias, instruções preparadas e parâmetros no nível da sessão; no MySQL, a API de dados do RDS redefine a conexão (o equivalente a COM_RESET_CONNECTION).

Essas redefinições abrangem os atributos no nível da sessão gerenciados pelo mecanismo, mas não há garantia de que incluam o estado criado por uma extensão. As extensões podem não se comportar da mesma maneira que outros atributos no nível da sessão quando essas operações de limpeza são executadas, e seu estado pode persistir na conexão de banco de dados após a redefinição. Como a API de dados do RDS reutiliza conexões, o estado deixado por uma extensão não fica limitado à chamada que o criou e ainda pode estar presente quando uma chamada posterior reutiliza a mesma conexão.

dblink é um exemplo desse comportamento: DISCARD ALL não fecha as conexões abertas pela extensão dblink, portanto, uma conexão nomeada dblink aberta em uma chamada pode continuar aberta quando a conexão for reutilizada. Outras extensões que mantêm recursos fora do estado da sessão do mecanismo podem se comportar de maneira semelhante.

Se você usar extensões com a API de dados do RDS, não confie na redefinição da sessão para liberar o estado gerenciado pelas extensões. Crie e libere esse estado dentro da mesma transação, usando a própria função de encerramento da extensão. Para dblink, feche cada conexão com dblink_disconnect.