Não tenho certeza se é uma abordagem madura o suficiente para um sistema de produção, mas tive bastante sucesso com o monitoramento do tráfego de banco de dados usando um sniffer de tráfego de rede.
Envie os dados brutos entre o aplicativo e o banco de dados para outra máquina, decodifique e analise-os lá.
Eu usei o PostgreSQL, e decodificar o tráfego e transformá-lo em um fluxo de operações de banco de dados que poderia ser registrado foi relativamente simples. Imagino que funcionaria em qualquer banco de dados em que o formato do pacote esteja documentado.
O ponto principal era que não colocava carga extra no próprio banco de dados.
Além disso, era um monitoramento passivo, registrava todas as atividades, mas não conseguia bloquear nenhuma operação, então pode não ser exatamente o que você está procurando.