Eventos de espera do RDS para PostgreSQL
Um evento de espera é uma indicação de que a sessão está aguardando um recurso. Por exemplo, o evento de espera Client:ClientRead
ocorre quando o RDS para PostgreSQL está aguardando para receber dados do cliente. Normalmente, as sessões aguardam por recursos como os seguintes.
-
Acesso com thread único a um buffer, por exemplo, quando uma sessão está tentando modificar um buffer
-
Uma linha que está bloqueada por outra sessão
-
Uma leitura de arquivo de dados
-
Uma gravação em arquivo de log
Por exemplo, para satisfazer uma consulta, a sessão pode realizar uma varredura de tabela completa. Se esses dados ainda não estiverem na memória, a sessão aguardará a conclusão da E/S do disco. Quando os buffers são lidos na memória, talvez a sessão precise aguardar, pois outras sessões estão acessando os mesmos buffers. O banco de dados registra as esperas utilizando um evento de espera predefinido. Esses eventos estão agrupados em categorias.
Por si só, um único evento de espera não indica um problema de performance. Por exemplo, se os dados solicitados não estão na memória, é necessário ler dados do disco. Se uma sessão bloquear uma linha para uma atualização, outra sessão aguardará que essa linha seja desbloqueada para poder atualizá-la. Uma confirmação exige a conclusão da gravação em um arquivo de log. Esperas são componentes integrais do funcionamento normal de um banco de dados.
Por outro lado, uma série de eventos de espera geralmente mostra um problema de performance. Nesses casos, é possível utilizar os dados dos eventos de espera para determinar onde as sessões estão perdendo tempo. Por exemplo, se um relatório que é normalmente executado em minutos agora demora várias horas, é possível identificar os eventos de espera que mais contribuem para o tempo de espera total. Se você puder determinar as causas dos principais eventos de espera, às vezes pode aplicar alterações que melhoram a performance. Por exemplo, se a sua sessão está aguardando uma linha que foi bloqueada por outra sessão, é possível encerrar a sessão responsável pelo bloqueio.